none
Error al leer datos de otra entidad RRS feed

  • Pregunta

  • He actualizado CRM 3 a CRM 4 en algunas entidades tenemos programados eventos Java que leen datos de otra entidad, estamos comprobando que estos eventos no funcionan estoy buscando informacion al respecto pero no doy con ella. Adjunto envio evento me podias indicar cual es el equivalente para CRM4

    /* NUMERO DE CONTRATO */
    if(crmForm.all.contractid.DataValue != null)
    {

    function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName)
    {
            var sXml = "";
            var oXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            var serverurl = http://nuestrocrm;
            //set up the SOAP message
            sXml += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
            sXml += "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
            sXml += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
            sXml += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
            sXml += "<soap:Body>";
            sXml += "<entityName xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">"+sEntityName+ "</entityName>";
            sXml += "<id xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">"+sGUID + "</id>";
            sXml += "<columnSet xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\"";
            sXml += " xmlns:q=\"http://schemas.microsoft.com/crm/2006/Query\""
            sXml += " xsi:type=\"q:ColumnSet\"><q:Attributes> <q:Attribute>"+sAttributeName+"</q:Attribute></q:Attributes></columnSet>";
            sXml += "</soap:Body>";
            sXml += "</soap:Envelope>";
            // send the message to the CRM Web service
            oXmlHttp.Open("POST",serverurl+"/MsCrmServices/2006/CrmService.asmx",false);
            oXmlHttp.setRequestHeader("SOAPAction",
      "http://schemas.microsoft.com/crm/2006/WebServices/Retrieve");
            oXmlHttp.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
            oXmlHttp.setRequestHeader("Content-Length", sXml.length);
            oXmlHttp.send(sXml);
            // retrieve response and find attribute value
            var result = oXmlHttp.responseXML.selectSingleNode("//"+sAttributeName);
            if (result == null)
            {
                    alert("Ha ocurrido un error. Informar al administrador");
             }
            else
                    return result.text;

     

    }


    var contrato = new Array();
    contrato = null;

    contrato = crmForm.all.contractid.DataValue;

    var IdDato = contrato[0].id;

    var Datos=(GetAttributeValueFromID("contract", IdDato, "contractnumber"));

    crmForm.all.new_numerocontrato.DataValue = Datos;
    crmForm.all.new_numerocontrato.ForceSubmit = true;

    }

    else
         crmForm.all.new_numerocontrato.DataValue = null;

     

    sábado, 18 de septiembre de 2010 8:28

Todas las respuestas

  • Hola, Lluis

    Estaría bien que nos enviaras algo más de información, por ejemplo cuál es el mensaje de error de JavaScript que te encuentras. Aunque hayas cambiado de CRM3 a CRM4, los endpoint de los web services "2006" deberían seguir funcionando. Algunos sospechosos habituales:

    • Revisa la dirección del servicio web
    • Pon alguna traza en el código mediante alert() para ver en qué punto falla
    • Por otro lado, al cambiar de CRM3 a CRM4 se introduce la noción de "Organizaciones". En CRM3 sólo había una, que en CRM4 se convierte en la organización por defecto. Comprueba que la organización a la que quieres atacar está establecida como organización por defecto.

    Saludos y suerte

     


    Daniel - http://crmadiario.blogspot.com
    lunes, 20 de septiembre de 2010 7:32
  • Hola Daniel

    • La direccion del servicion web no ha cambiado ya que el equipo no ha cambiado
    • Teoricamente solo tengo una organizacion ya que estoy con una licencia profesional.
    • El codigo tiene un alert() que es el que muestra al ejecutar

    Me comentas que introduzca la nocion de organizaciones me podrias indicar como hacerlo, me alegra que el codigo teoricamente sea util para CRM 4  pero lo utilizamos en varias entidades ....

    lunes, 20 de septiembre de 2010 8:44
  • Vale, olvidemos lo de las organizaciones entonces: si tienes Professional no hay más que una, efectivamente.

    Te propongo que mejores algo la información que da el alert(), por ejemplo cambiándolo por lo siguiente:

    alert(sXml);

    alert(oXmlHttp.responseXML);

    Para así ver qué XML está enviando y qué le está devolviendo el web service y comprobar si existe el nodo "contractnumber".

    Saludos


    Daniel - http://crmadiario.blogspot.com
    jueves, 23 de septiembre de 2010 7:22
  • Hola Daniel

    He colocado en el evento las dos lineas que me propones y esto es lo que me muestra en la primera alerta

     

     <?xmI versIon="1.0" encoding=”utf-8"?><soap:Envelope

    xmlns:soap="http://schemas xmIsoap.org/soap/envelope/"

    xmlns:xsI="http://www.w3,org/2001/XML.Schema-instance

    xmlns: xsd="http://www.w3. org/2001/” > <soap.Body> <entityName

    xmlns—’"http://schemas.microsoft.com/crm/2006//webServlces ">contract</entityName> <Id

    xmlns="http://schemas.microsoft.com/crm/2006//webServlces ">{C3187FF6-C331-DF11-9EE9-001560450EE95}</id>

    <columnSet xmlns="http://schemas.microsoft.com/crm/2006//webServlces "

    Xmls:q="http://schemas.microsoft.com/crm/2006/Query" xsi:type="q:ColumnSet"><q:Attributes>

    <q:Attrlbute>contractnumber </q:Attribute></q:Attributes.> </columnSet></soap:Body></soap::Envelope.>

    En la segunda alerta me muestra

    [Objet] 

    Esta claro que lee el ID del contrato pero no es capaz de leerlo y por lo tanto escribirlo y en la version 3.0 esta funcionando correctamene.

    domingo, 26 de septiembre de 2010 19:21
  • Despues de varios dias y con ayuda este codigo ya es medio funcional aunque hay una sentencia que fija la lectura a 16 caracteres lo que no me resultara valido para entidades que tengan longitud variable.

    ESTE CODIGO YA ES FUNCIONAL LEE EL Nº DE CONTRATO. SI LOGRO DAR CON EL CODIGO FUNCIONAL EN UNOS DIAS

     
    /* NUMERO DE CONTRATO */
    if(crmForm.all.contractid.DataValue != null)
    {
     
    function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName)
    {
            var sXml = "";
            var oXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            var serverurl = "http://adpcrm";
            //Configura el mensaje SOAP
            sXml += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
            sXml += "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
            sXml += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
            sXml += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
            sXml += "<soap:Body>";
            sXml += "<entityName xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">"+sEntityName+ "</entityName>";
            sXml += "<id xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">"+sGUID + "</id>";
            sXml += "<columnSet xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\"";
            sXml += " xmlns:q=\"http://schemas.microsoft.com/crm/2006/Query\""
            sXml += " xsi:type=\"q:ColumnSet\"><q:Attributes> <q:Attribute>"+sAttributeName+"</q:Attribute></q:Attributes></columnSet>";
            sXml += "</soap:Body>";
            sXml += "</soap:Envelope>";
            // send the message to the CRM Web service
            oXmlHttp.Open("POST",serverurl+"/MsCrmServices/2006/CrmService.asmx",false);
            oXmlHttp.setRequestHeader("SOAPAction",
       "http://schemas.microsoft.com/crm/2006/WebServices/Retrieve");
            oXmlHttp.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
            oXmlHttp.setRequestHeader("Content-Length", sXml.length);
            oXmlHttp.send(sXml);
            // retrieve responde y busca el valor del atributo
            var temp_result = oXmlHttp.responseXML.text;  //selectSingleNode("//"+text);
            if (temp_result == null)
            {
                    alert("Ha ocurrido un error. Informar al administrador");
            }
            else
            {
                    var result = temp_result.substring(0, 16);
                    return result; //.text
            }
    }
     
    var contrato = new Array();
    contrato = null;
     
    contrato = crmForm.all.contractid.DataValue;
     
    var IdDato = contrato[0].id;
     
    var Datos=(GetAttributeValueFromID("contract", IdDato, "contractnumber"));
     
    crmForm.all.new_numerocontrato.DataValue = Datos;
    crmForm.all.new_numerocontrato.ForceSubmit = true;
     
    }
     
    else
         crmForm.all.new_numerocontrato.DataValue = null;
     

    domingo, 10 de octubre de 2010 8:23