none
Atributo calculado en CRM

    Question

  • Buenas, necesito crear un atributo en las entidades CRM que muestre el número de subcuentas que tiene dicha cuenta, alguna ayuda sobre cómo podría hacerlo??

     

    Un saludo y gracias, Alberto

    Friday, June 04, 2010 2:30 PM

Answers

  • ¡Mira lo que has hecho, Alberto!

    http://crmadiario.blogspot.com/2010/06/como-crear-un-campo-incremental-con.html

    Gracias por la inspiración :-)

    Daniel

    • Marked as answer by albertinson Monday, June 07, 2010 8:54 AM
    Monday, June 07, 2010 8:37 AM
  • Buenas Daniel, he visto que tu solución no es lo que necesito :(, la idea sería hacerlo en el onload del form, me podrías indicar un poco cómo podría hacerlo??

     

    Un saludo y muchas gracias, Alberto

     

    Buscando en la red he encontrado como hacer un retrieve desde el onLoad del formulario de cuentas, así que añado mi solución por si le puede servir a alguien:

     

    En el onLoad recupero el número de subcuentas de la cuenta que abre el formulario:

     

    // Preparo variables para Retrieve
    var searchId = crmForm.ObjectId;
    var authenticationHeader = GenerateAuthenticationHeader();

    // Preparo el SOAP message.
    var xml = "<?xml version='1.0' encoding='utf-8'?>"+
    "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+
    " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+
    " xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"+
    authenticationHeader+
    "<soap:Body>"+
    "<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
    "<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query'"+
    " xsi:type='q1:QueryExpression'>"+
    "<q1:EntityName>account</q1:EntityName>"+
    "<q1:ColumnSet xsi:type='q1:ColumnSet'>"+
    "<q1:Attributes>"+
    "<q1:Attribute>accountid</q1:Attribute>"+
    "</q1:Attributes>"+
    "</q1:ColumnSet>"+
    "<q1:Distinct>false</q1:Distinct>"+
    "<q1:Criteria>"+
    "<q1:FilterOperator>And</q1:FilterOperator>"+
    "<q1:Conditions>"+
    "<q1:Condition>"+
    "<q1:AttributeName>parentaccountid</q1:AttributeName>"+
    "<q1:Operator>Like</q1:Operator>"+
    "<q1:Values>"+
    "<q1:Value xsi:type='xsd:string'>"+searchId +"</q1:Value>"+
    "</q1:Values>"+
    "</q1:Condition>"+
    "</q1:Conditions>"+
    "</q1:Criteria>"+
    "</query>"+
    "</RetrieveMultiple>"+
    "</soap:Body>"+
    "</soap:Envelope>";

    // Prepare the xmlHttpObject and send the request.
    var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
    xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
    xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xHReq.setRequestHeader("Content-Length", xml.length);
    xHReq.send(xml);

    // Capture the result.
    var resultXml = xHReq.responseXML;

    // Check for errors.
    var errorCount = resultXml.selectNodes('//error').length;
    if (errorCount != 0)
    {
     var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
     alert(msg);
    }

    // Parse and display the results.
    else
    {

    var results = resultXml.getElementsByTagName('BusinessEntity');
    if (results.length == 0)
    {
      crmForm.new_subcuentas.DataValue = results.length; 
     }
     else
      {
       crmForm.new_subcuentas.DataValue  = results.length; 
      }
    }

    • Marked as answer by albertinson Monday, June 07, 2010 12:24 PM
    Monday, June 07, 2010 9:52 AM

All replies

  • Hola, Alberto

    Pues es el tipo de requerimiento que va a llevar algo de trabajo... Además, hay varias opciones dependiendo del nivel de complejidad de desarrollo que puedas asumir.

    1) Crear un atributo numérico "xyz_numerosubcuentas" en la entidad Cuenta y añadirlo al formulario.
    2) Decidir si quieres usar un PlugIn, un Workflow o código en cliente

    Te cuento como sería con un Workflow. Contendría las siguientes acciones
    3) Al crear una cuenta, comprobar si el campo "Cuenta primaria" tiene algún valor
    4) En caso afirmativo, aumentar en uno el campo "xyz_numerosubcuentas" de la cuenta primaria.

    Saludos

     

    Daniel - http://crmadiario.blogspot.com

    Monday, June 07, 2010 7:00 AM
  • Gracias por la respuesta Daniel, miraré de hacerlo así, aunque pensaba que sería más fácil...esperaba poder hacer una consulta pasando como argumento el accountid y contando las filas devueltas... podría hacerlo más o menos así con un Plugin??

     

    Un saludo!

    Monday, June 07, 2010 7:04 AM
  • Sí, como te decía hay varias opciones: yo sólo te he contado la más sencilla que se me ha ocurrido, ya que no requiere código. Para tareas de este estilo creo que un WF puede hacer el trabajo bastante bien.

    También puedes crear un post-PlugIn que se lance en el cambio del atributo parentaccount y actualice el valor en la cuenta "madre".

    Saludos

    Daniel - http://crmadiario.blogspot.com

    Monday, June 07, 2010 7:42 AM
  • ¡Mira lo que has hecho, Alberto!

    http://crmadiario.blogspot.com/2010/06/como-crear-un-campo-incremental-con.html

    Gracias por la inspiración :-)

    Daniel

    • Marked as answer by albertinson Monday, June 07, 2010 8:54 AM
    Monday, June 07, 2010 8:37 AM
  • jejeje gracias a ti Daniel!!! voy a probarlo ahora mismo! aunque leo al final de la entrada que no puedo controlar las bajas...creo que me tocará hacerlo con un plug-in... :S

    De todas formas excelente material para ampliar mis (pocos) conocimientos sobre los Workflows!

     

    Un saludo y gracias de nuevo, Alberto

    Monday, June 07, 2010 8:49 AM
  • Buenas Daniel, he visto que tu solución no es lo que necesito :(, la idea sería hacerlo en el onload del form, me podrías indicar un poco cómo podría hacerlo??

     

    Un saludo y muchas gracias, Alberto

     

    Buscando en la red he encontrado como hacer un retrieve desde el onLoad del formulario de cuentas, así que añado mi solución por si le puede servir a alguien:

     

    En el onLoad recupero el número de subcuentas de la cuenta que abre el formulario:

     

    // Preparo variables para Retrieve
    var searchId = crmForm.ObjectId;
    var authenticationHeader = GenerateAuthenticationHeader();

    // Preparo el SOAP message.
    var xml = "<?xml version='1.0' encoding='utf-8'?>"+
    "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+
    " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+
    " xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"+
    authenticationHeader+
    "<soap:Body>"+
    "<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
    "<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query'"+
    " xsi:type='q1:QueryExpression'>"+
    "<q1:EntityName>account</q1:EntityName>"+
    "<q1:ColumnSet xsi:type='q1:ColumnSet'>"+
    "<q1:Attributes>"+
    "<q1:Attribute>accountid</q1:Attribute>"+
    "</q1:Attributes>"+
    "</q1:ColumnSet>"+
    "<q1:Distinct>false</q1:Distinct>"+
    "<q1:Criteria>"+
    "<q1:FilterOperator>And</q1:FilterOperator>"+
    "<q1:Conditions>"+
    "<q1:Condition>"+
    "<q1:AttributeName>parentaccountid</q1:AttributeName>"+
    "<q1:Operator>Like</q1:Operator>"+
    "<q1:Values>"+
    "<q1:Value xsi:type='xsd:string'>"+searchId +"</q1:Value>"+
    "</q1:Values>"+
    "</q1:Condition>"+
    "</q1:Conditions>"+
    "</q1:Criteria>"+
    "</query>"+
    "</RetrieveMultiple>"+
    "</soap:Body>"+
    "</soap:Envelope>";

    // Prepare the xmlHttpObject and send the request.
    var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
    xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
    xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xHReq.setRequestHeader("Content-Length", xml.length);
    xHReq.send(xml);

    // Capture the result.
    var resultXml = xHReq.responseXML;

    // Check for errors.
    var errorCount = resultXml.selectNodes('//error').length;
    if (errorCount != 0)
    {
     var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
     alert(msg);
    }

    // Parse and display the results.
    else
    {

    var results = resultXml.getElementsByTagName('BusinessEntity');
    if (results.length == 0)
    {
      crmForm.new_subcuentas.DataValue = results.length; 
     }
     else
      {
       crmForm.new_subcuentas.DataValue  = results.length; 
      }
    }

    • Marked as answer by albertinson Monday, June 07, 2010 12:24 PM
    Monday, June 07, 2010 9:52 AM