none
Como puedo obtener el valor de un campo de otro formulario RRS feed

  • Pregunta

  • Hola,

    Desde el formulario de oportunidades, necesito coger el valor de un campo de la cuenta a la que asigno la oportunidad, es un campo definido por mi. ¿como puedo programar un evento para obtener este dato?

    Gracias

    lunes, 21 de octubre de 2013 15:10

Todas las respuestas

  • Hola Fernando, 

    Para ello puedes usar JS, ya sea por odata o por consultas fetch.  La idea, es hacer una consulta para que encuentre el valor que necesitas con el ID de la cuenta.

    Te dejo varios ejemplo de su aplicación

    Fetch

    http://blog.customereffective.com/blog/2011/05/execute-fetch-from-javascript-in-crm-2011.html

    http://crmfetchkit.codeplex.com/

    Odata 

    http://crm2011odatatool.codeplex.com/

    http://msdn.microsoft.com/en-us/library/gg309461.aspx


    Salu2 Atilin | http://www.dexrm.com

    martes, 22 de octubre de 2013 6:55
  • Muchas gracias por la info, Estuve buscando y me gustaría tener tu opinión para hacerlo con query. El ejemplo que he encontrado es este

    // Define the paging attributes.
    // The number of records per page to retrieve.
    int fetchCount = 3;
    // Initialize the page number.
    int pageNumber = 1;
    // Initialize the number of records.
    int recordCount = 0;

    // Define the condition expression for retrieving records.
    ConditionExpression pagecondition = new ConditionExpression();
    pagecondition.AttributeName = "address1_stateorprovince";
    pagecondition.Operator = ConditionOperator.Equal;
    pagecondition.Values.Add("WA");

    // Define the order expression to retrieve the records.
    OrderExpression order = new OrderExpression();
    order.AttributeName = "name";
    order.OrderType = OrderType.Ascending;

    // Create the query expression and add condition.
    QueryExpression pagequery = new QueryExpression();
    pagequery.EntityName = "account";
    pagequery.Criteria.AddCondition(pagecondition);
    pagequery.Orders.Add(order);
    pagequery.ColumnSet.AddColumns("name", "address1_stateorprovince", "emailaddress1", "accountid");

    ¿Puede valer este metodo para obtener un campo de la entidad cuenta para hacer un calculo en oportunidad?

    martes, 22 de octubre de 2013 12:13
  • Hola Fermando, 

    Debo de asumir, que al hacer este consulta estarás usando algún plugin/aspx, no?. Bueno con respecto a esto tengo mis propias conclusiones.

    1. Solo uso algún tipo de consulta en c#, si y solo si es sumamente necesario, en caso vea que hay alguna posibilidad de hacerlo con JS lo haría sin dudarlo.

    2. Si haces este tipo de consulta, mejor utiliza Linq, es mas rápido y limpio.

    3. Si vas a buscar por algún Id, no es necesario el Order, ya que solo retornara un registro.

    4. Si no me equivoco, estarás utilizando un responsemultiple, no?. Si es un solo registro, te recomiendo usar el retrieve, te adjunto un ejemplo

    CrmService.Retrieve("account", new Guid(accountId),
                                             new ColumnSet(new string[]{"name", "address1_stateorprovince", "emailaddress1"}));

    MSDN = http://msdn.microsoft.com/en-us/library/gg328416.aspx


    Es un método más limpio y rápido.  


    Salu2 Atilin | http://www.dexrm.com

    martes, 22 de octubre de 2013 13:27
  • Hola,

    Muchas gracias, vuestro apoyo para los que no tenemos experiencia es muy apreciado.

    La única forma que encontre es hacerlo así como podéis ver a continuación, lo que desconozco es si con crm.service.retrieve es más sencillo de hacer que como lo he realizado.

    function GetData() {

       var EntityName, EntityId, LookupFieldObject, OppurtunityName;
        var LookupId, LookupName, LookupType;
        var resultXml;

        LookupFieldObject = Xrm.Page.data.entity.attributes.get('customerid');

        if (LookupFieldObject.getValue() != null) {

            EntityId = LookupFieldObject.getValue()[0].id;
            EntityName = LookupFieldObject.getValue()[0].entityType;
            resultXml = RetrieveEntityById(EntityName, EntityId, 'name,address1_city,new_gruporiesgo');

    //mention the field names that you want to retrieve the data with comma separated

            if (resultXml != null && resultXml.selectSingleNode('//q1:new_gruporiesgo') != null) {
                // to load data to text field
                OppurtunityName = resultXml.selectSingleNode('//q1:new_gruporiesgo').nodeTypedValue;
                Xrm.Page.data.entity.attributes.get('new_gruporiesgo4').setValue(OppurtunityName);
            }

        }
    }
    // Do not make any changes to this function
    function RetrieveEntityById(prmEntityName, prmEntityId, prmEntityColumns) {

        var resultXml, errorCount, msg, xmlHttpRequest, arrayEntityColumns, xmlEntityColumns;

        arrayEntityColumns = prmEntityColumns.split(",");

        for (var i = 0; i < arrayEntityColumns.length; i++) {
            xmlEntityColumns += "<q1:Attribute>" + arrayEntityColumns[i] + "</q1:Attribute>";
        }

        var authenticationHeader = Xrm.Page.context.getAuthenticationHeader();

        //Prepare the 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>" +
        "<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>" +
        "<entityName>" + prmEntityName + "</entityName>" +
        "<id>" + prmEntityId + "</id>" +
        "<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>" +
        "<q1:Attributes>" +
        xmlEntityColumns +
       "</q1:Attributes>" +
        "</columnSet>" +
        "</Retrieve></soap:Body></soap:Envelope>";

        //call function to create Soap Request to ms crm webservice
        xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
        xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
        xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
        xmlHttpRequest.send(xml);

        resultXml = xmlHttpRequest.responseXML;

        var errorCount = resultXml.selectNodes('//error').length;

        if (errorCount != 0) {
            var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
            alert("Error Message : " + msg);
        }
        else {
            return resultXml;
        }
    }

    jueves, 24 de octubre de 2013 6:06
  • Hola Fernando, para hacer llamadas al servidor en el formulario de Dynamics CRM, lo debes hacer a través de Javascript. para consultas a CRM desde js te recomiendo utilizar el http://xrmservicetoolkit.codeplex.com

    Ten en cuenta que el código que acabas de enviar debe funcionar correctamente con todos los navegadores (todos los IE, chrome, firefox, etc.) y esta librería que te comento esta muy testeada.

    un abrazo y suerte

     

    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    jueves, 24 de octubre de 2013 6:13
    Moderador