none
Atributo calculado en CRM RRS feed

  • 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 4, 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 7, 2010 8:54 AM
    Monday, June 7, 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 7, 2010 12:24 PM
    Monday, June 7, 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 7, 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 7, 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 7, 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 7, 2010 8:54 AM
    Monday, June 7, 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 7, 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 7, 2010 12:24 PM
    Monday, June 7, 2010 9:52 AM