lunes, 7 de abril de 2014

SageCRM - Client Side API - Método SDATA



En este ejemplo vamos a utilizar el método sdata de la API de Cliente de CRM,  con el que a través de un script de cliente haremos una consulta sobre la base de datos para obtener el valor de un registro.
En este ejemplo en concreto lo que queremos es obtener el coste y el margen en una línea de un pedido.





En nuestro caso hemos añadido un nuevo campo dentro de la tabla de tarifas (Pricing) que hemos llamado “pric_coste”. Este campo lo actualizamos mediante procesos de sincronización contra nuestro ERP.

En la tabla QuoteItems hemos añadido los campos “quit_coste” y “quit_margen” para insertar en la línea del pedido tanto el coste como el margen del producto seleccionado en esa línea del pedido.

En la pantalla QuoteItemsSummary hemos añadido los campos de Coste y Margen, indicando que están en sólo lectura y griseados para que el usuario vea claramente que no son modificables. Para ello hemos añadido el siguiente script dentro del contenido personalizado de la pantalla.


crm.ready(function () {
    $("#quit_coste").attr('readonly', true);
    $("#quit_margen").attr('readonly', true);
    $("#quit_quotedpricetotal").attr('readonly', true);
    crm.fields("quit_coste").background("#DDDDDD");
    crm.fields("quit_margen").background("#DDDDDD");
crm.fields("quit_quotedpricetotal").background("#DDDDDD");
});



En el momento que se carga la pantalla también capturaremos el valor del producto seleccionado, y mediante el método sdata, accederemos a la tabla de precios (pricing) filtrando por el producto seleccionado.

En definitiva lo que hace el objeto sdata es ejecutar la siguiente url:
http://192.168.1.36/sdata/crmj/sagecrm/-/pricing?where=pric_productid eq ‘4

Si el método sdata devuelve algún valor satisfactoriamente, lo que hacemos es obtener el primer registstro de la consulta devuelta, y escribimos el valor del coste dentro del campo “quit_coste


crm.ready(function () {
   
    var ProductID = $("#quit_productid").val()
    var successProduct = function (crmRecord) {
        coste = GlobalRules.FormatImporteESP(crmRecord[0].pric_coste)
        $("#quit_coste").val(coste)
    }
    crm.sdata({
        entity: "pricing",
        where: "pric_productid eq '" + ProductID + "'",
        success: successProduct
});
});


Finalmente, lo único que hacemos es controlar que si se cambia la cantidad o el precio de venta del producto se obtenga el margen y el precio total. Y escribimos los valores dentro de los campos correspondientes.

<script>

function ObtenerTotal(Scantidad, Simporte)
{     
       Scantidad=GlobalRules.FormatImporteENG(Scantidad)  
       Simporte=GlobalRules.FormatImporteENG(Simporte)
       Stotal=Scantidad * Simporte
       Stotal=Stotal.toFixed(2)
       Stotal=GlobalRules.FormatImporteESP(Stotal)
       return Stotal
}



crm.ready(function () {
       ...

 $("#quit_quantity").change(function (event) {
       var cantidad=$("#quit_quantity").val()       
       var importe=$("#quit_quotedprice").val()     
       total=ObtenerTotal(cantidad, importe)        
       $("#quit_quotedpricetotal").val(total)
       $("#quit_quantity").val(GlobalRules.FormatImporteESP(cantidad))  
      
       var coste=$("#quit_coste").val()
       totalCoste=ObtenerTotal(cantidad, coste)     
       total=GlobalRules.FormatImporteENG(total)
       totalCoste=GlobalRules.FormatImporteENG(totalCoste)
       totalmargen=total-totalCoste
       totalmargen=totalmargen.toFixed(2)
       $("#quit_margen").val(GlobalRules.FormatImporteESP(totalmargen))
});

 $("#quit_quotedprice").change(function (event) {
       var cantidad=$("#quit_quantity").val()       
       var importe=$("#quit_quotedprice").val()
       total=ObtenerTotal(cantidad, importe) 
       $("#quit_quotedpricetotal").val(total)
       $("#quit_quotedprice").val(GlobalRules.FormatImporteESP(importe))
      
       var coste=$("#quit_coste").val()
       totalCoste=ObtenerTotal(cantidad, coste)     
       total=GlobalRules.FormatImporteENG(total)
       totalCoste=GlobalRules.FormatImporteENG(totalCoste)
       totalmargen=total-totalCoste
       totalmargen=totalmargen.toFixed(2)
       $("#quit_margen").val(GlobalRules.FormatImporteESP(totalmargen))
      
});

});
</script>



No hay comentarios:

Publicar un comentario