none
Como Mostrar la informacion de Una Entidad Clientes en Casos en Dynamics CRM 2011

    Pregunta

  • Hola tengo una pregunta tendo en la entidad Clientes unos campos como telefono y correo electronico y quiesiera que cuando coloque el nombre del cliente q es un campo lookup, adicional pudiera traerme la informacion adicional de telefono y correo electronico en un campos que cree nuevos en la entidad caso, intente hacerlo por un flujo de trabajo pero no me trae la informacion, se que lo puedo hacer en javascrip pero en realidad no encuentro como hacerlo si alguien me puede dar alguna idea o sugerencia agradeceria muchisimo cualquier tipo de informacion que me puedan dar...Gracias
    miércoles, 20 de julio de 2011 19:37

Respuestas

  • Hola Jrokita,

    Puedes hacer lo sigiente:

    1. Desarrollar un fectch xml para realizar la consulta. Te puedes apoyar en la nueva funcionalidad de CRM 2011 el cual te genera el fetch desde una búsqueda avanzada.

    2. una vez desarrollado el fetch lo asigno a una variable:

    ejem:
    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='[mi_entidad]'>"+
        "<attribute name='[atributo_a_buscar1]' />"+
        "<attribute name='[atributo_a_buscar2]' />"+
        "<filter type='and'>"+
        "  <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" + [valor_para_buscar]+ "' />"+
        "</filter>"+
     "</entity>"+
     "</fetch>";

    3.una vez que tengo el fetch en una variable, coloco el siguiente código:

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
     var telefono= "";
     var correo= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./[atributo_a_buscar]') != null) 
       telefono= results[i].selectSingleNode('./[atributo_a_buscar1]').nodeTypedValue;
      if(results[i].selectSingleNode('./[atributo_a_buscar]') != null) 
       correo = results[i].selectSingleNode('./[atributo_a_buscar2]').nodeTypedValue;
        }

    Al final pudieras crear una funcion similar a esta:

    function ObtenerDatos(){
     var lookupitem = new Array;
     lookupitem = Xrm.Page.getAttribute('customerid').getValue();
     if(lookupitem!=null){
    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='[mi_entidad]'>"+
        "<attribute name='[atributo_a_buscar1]' />"+
        "<attribute name='[atributo_a_buscar2]' />"+
        "<filter type='and'>"+
        "  <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" + [valor_para_buscar]+ "' />"+
        "</filter>"+
     "</entity>"+
     "</fetch>";
     var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
     var telefono= "";
     var correo= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./[atributo_a_buscar1]') != null) 
       telefono= results[i].selectSingleNode('./[atributo_a_buscar1]').nodeTypedValue;
      if(results[i].selectSingleNode('./[atributo_a_buscar2]') != null) 
       correo = results[i].selectSingleNode('./[atributo_a_buscar2]').nodeTypedValue;
        }
     Xrm.Page.getAttribute('[tu_nuevo_campo_telefono]').setValue(telefono);
     Xrm.Page.getAttribute('[tu_nuevo_campo_correo]').setValue(correo);
    }
    }

    4. Copiar las siguientes funciones:

    function Fetch(xml)
    {
     var Xml = "<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\">"
     Xml += GenerateAuthenticationHeader()
     Xml += "<soap:Body>";
     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";
     Xml += "<fetchXml>";
     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function 
     Xml += "</fetchXml>";
     Xml += "</Fetch>";
     Xml += "</soap:Body>";
     Xml += "</soap:Envelope>";

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function 
     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request 
     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
     XmlHttp.send(Xml);

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     XmlDoc.async = false;
     XmlDoc.resolveExternals = false;                   
     XmlDoc.loadXML(XmlHttp.responseXML.text);
     return XmlDoc;

    }

    function CreateXmlHttpObject() //CreateXmlHttp 
    {
     var oXmlHttp = null;
     if (window.XMLHttpRequest) {
      oXmlHttp = new XMLHttpRequest();
     }
     else {
       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {
        try {
         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);
         break;
        }
        catch (e) { }
       }
     }
     return oXmlHttp;
    }

    function FetchEncode(strInput) //_HtmlEncode 
    {
     var c;
     var HtmlEncode = '';
     if (strInput == null) {
       return null;
     }
     if (strInput == '') {
       return '';
     }
     for (var cnt = 0; cnt < strInput.length; cnt++) {
       c = strInput.charCodeAt(cnt);
       if (((c > 96) && (c < 123)) ||
      ((c > 64) && (c < 91)) ||
      (c == 32) ||
      ((c > 47) && (c < 58)) ||
      (c == 46) ||
      (c == 44) ||
      (c == 45) ||
      (c == 95)) {
        HtmlEncode = HtmlEncode + String.fromCharCode(c);
       }
       else {
        HtmlEncode = HtmlEncode + '&#' + c + ';';
      }
     }

     return HtmlEncode;
    }

     Espero que esto te pueda ayudar, cualquier duda házmela saber. Éxitos.


    Julio
    • Marcado como respuesta Jrokita martes, 26 de julio de 2011 23:08
    viernes, 22 de julio de 2011 21:22

Todas las respuestas

  • Hola Jrokita,

    Puedes hacer lo sigiente:

    1. Desarrollar un fectch xml para realizar la consulta. Te puedes apoyar en la nueva funcionalidad de CRM 2011 el cual te genera el fetch desde una búsqueda avanzada.

    2. una vez desarrollado el fetch lo asigno a una variable:

    ejem:
    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='[mi_entidad]'>"+
        "<attribute name='[atributo_a_buscar1]' />"+
        "<attribute name='[atributo_a_buscar2]' />"+
        "<filter type='and'>"+
        "  <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" + [valor_para_buscar]+ "' />"+
        "</filter>"+
     "</entity>"+
     "</fetch>";

    3.una vez que tengo el fetch en una variable, coloco el siguiente código:

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
     var telefono= "";
     var correo= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./[atributo_a_buscar]') != null) 
       telefono= results[i].selectSingleNode('./[atributo_a_buscar1]').nodeTypedValue;
      if(results[i].selectSingleNode('./[atributo_a_buscar]') != null) 
       correo = results[i].selectSingleNode('./[atributo_a_buscar2]').nodeTypedValue;
        }

    Al final pudieras crear una funcion similar a esta:

    function ObtenerDatos(){
     var lookupitem = new Array;
     lookupitem = Xrm.Page.getAttribute('customerid').getValue();
     if(lookupitem!=null){
    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='[mi_entidad]'>"+
        "<attribute name='[atributo_a_buscar1]' />"+
        "<attribute name='[atributo_a_buscar2]' />"+
        "<filter type='and'>"+
        "  <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" + [valor_para_buscar]+ "' />"+
        "</filter>"+
     "</entity>"+
     "</fetch>";
     var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
     var telefono= "";
     var correo= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./[atributo_a_buscar1]') != null) 
       telefono= results[i].selectSingleNode('./[atributo_a_buscar1]').nodeTypedValue;
      if(results[i].selectSingleNode('./[atributo_a_buscar2]') != null) 
       correo = results[i].selectSingleNode('./[atributo_a_buscar2]').nodeTypedValue;
        }
     Xrm.Page.getAttribute('[tu_nuevo_campo_telefono]').setValue(telefono);
     Xrm.Page.getAttribute('[tu_nuevo_campo_correo]').setValue(correo);
    }
    }

    4. Copiar las siguientes funciones:

    function Fetch(xml)
    {
     var Xml = "<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\">"
     Xml += GenerateAuthenticationHeader()
     Xml += "<soap:Body>";
     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";
     Xml += "<fetchXml>";
     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function 
     Xml += "</fetchXml>";
     Xml += "</Fetch>";
     Xml += "</soap:Body>";
     Xml += "</soap:Envelope>";

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function 
     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request 
     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
     XmlHttp.send(Xml);

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     XmlDoc.async = false;
     XmlDoc.resolveExternals = false;                   
     XmlDoc.loadXML(XmlHttp.responseXML.text);
     return XmlDoc;

    }

    function CreateXmlHttpObject() //CreateXmlHttp 
    {
     var oXmlHttp = null;
     if (window.XMLHttpRequest) {
      oXmlHttp = new XMLHttpRequest();
     }
     else {
       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {
        try {
         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);
         break;
        }
        catch (e) { }
       }
     }
     return oXmlHttp;
    }

    function FetchEncode(strInput) //_HtmlEncode 
    {
     var c;
     var HtmlEncode = '';
     if (strInput == null) {
       return null;
     }
     if (strInput == '') {
       return '';
     }
     for (var cnt = 0; cnt < strInput.length; cnt++) {
       c = strInput.charCodeAt(cnt);
       if (((c > 96) && (c < 123)) ||
      ((c > 64) && (c < 91)) ||
      (c == 32) ||
      ((c > 47) && (c < 58)) ||
      (c == 46) ||
      (c == 44) ||
      (c == 45) ||
      (c == 95)) {
        HtmlEncode = HtmlEncode + String.fromCharCode(c);
       }
       else {
        HtmlEncode = HtmlEncode + '&#' + c + ';';
      }
     }

     return HtmlEncode;
    }

     Espero que esto te pueda ayudar, cualquier duda házmela saber. Éxitos.


    Julio
    • Marcado como respuesta Jrokita martes, 26 de julio de 2011 23:08
    viernes, 22 de julio de 2011 21:22
  • Hola Julio Gracias estoy probando pero tengo una duda con la siguiente instruccion

      var results = XmlDoc.getElementsByTagName('result');

    porque nose que valor estas asignado aqui probe pero no esta entrando al For que esta alli 

     

    for (i=0;i < results.length;i++),

    la pregunta concreta seria este "results"  hace referencia a que debo devolver el valor del documento pero no estoy segura en este caso q ira aqui la entidad o el campo te agradeceria mucho si me puedes aclarar esta duda 


     


    Jrokita
    martes, 26 de julio de 2011 23:17
  • Hola Jrokita,

    Puedes hacer lo sigiente:

    1. Desarrollar un fectch xml para realizar la consulta. Te puedes apoyar en la nueva funcionalidad de CRM 2011 el cual te genera el fetch desde una búsqueda avanzada.

    2. una vez desarrollado el fetch lo asigno a una variable:

    ejem:
    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='[mi_entidad]'>"+
        "<attribute name='[atributo_a_buscar1]' />"+
        "<attribute name='[atributo_a_buscar2]' />"+
        "<filter type='and'>"+
        "  <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" + [valor_para_buscar]+ "' />"+
        "</filter>"+
     "</entity>"+
     "</fetch>";

    3.una vez que tengo el fetch en una variable, coloco el siguiente código:

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
     var telefono= "";
     var correo= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./[atributo_a_buscar]') != null) 
       telefono= results[i].selectSingleNode('./[atributo_a_buscar1]').nodeTypedValue;
      if(results[i].selectSingleNode('./[atributo_a_buscar]') != null) 
       correo = results[i].selectSingleNode('./[atributo_a_buscar2]').nodeTypedValue;
        }

    Al final pudieras crear una funcion similar a esta:

    function ObtenerDatos(){
     var lookupitem = new Array;
     lookupitem = Xrm.Page.getAttribute('customerid').getValue();
     if(lookupitem!=null){
    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='[mi_entidad]'>"+
        "<attribute name='[atributo_a_buscar1]' />"+
        "<attribute name='[atributo_a_buscar2]' />"+
        "<filter type='and'>"+
        "  <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" + [valor_para_buscar]+ "' />"+
        "</filter>"+
     "</entity>"+
     "</fetch>";
     var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
     var telefono= "";
     var correo= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./[atributo_a_buscar1]') != null) 
       telefono= results[i].selectSingleNode('./[atributo_a_buscar1]').nodeTypedValue;
      if(results[i].selectSingleNode('./[atributo_a_buscar2]') != null) 
       correo = results[i].selectSingleNode('./[atributo_a_buscar2]').nodeTypedValue;
        }
     Xrm.Page.getAttribute('[tu_nuevo_campo_telefono]').setValue(telefono);
     Xrm.Page.getAttribute('[tu_nuevo_campo_correo]').setValue(correo);
    }
    }

    4. Copiar las siguientes funciones:

    function Fetch(xml)
    {
     var Xml = "<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\">"
     Xml += GenerateAuthenticationHeader()
     Xml += "<soap:Body>";
     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";
     Xml += "<fetchXml>";
     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function 
     Xml += "</fetchXml>";
     Xml += "</Fetch>";
     Xml += "</soap:Body>";
     Xml += "</soap:Envelope>";

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function 
     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request 
     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
     XmlHttp.send(Xml);

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     XmlDoc.async = false;
     XmlDoc.resolveExternals = false;                   
     XmlDoc.loadXML(XmlHttp.responseXML.text);
     return XmlDoc;

    }

    function CreateXmlHttpObject() //CreateXmlHttp 
    {
     var oXmlHttp = null;
     if (window.XMLHttpRequest) {
      oXmlHttp = new XMLHttpRequest();
     }
     else {
       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {
        try {
         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);
         break;
        }
        catch (e) { }
       }
     }
     return oXmlHttp;
    }

    function FetchEncode(strInput) //_HtmlEncode 
    {
     var c;
     var HtmlEncode = '';
     if (strInput == null) {
       return null;
     }
     if (strInput == '') {
       return '';
     }
     for (var cnt = 0; cnt < strInput.length; cnt++) {
       c = strInput.charCodeAt(cnt);
       if (((c > 96) && (c < 123)) ||
      ((c > 64) && (c < 91)) ||
      (c == 32) ||
      ((c > 47) && (c < 58)) ||
      (c == 46) ||
      (c == 44) ||
      (c == 45) ||
      (c == 95)) {
        HtmlEncode = HtmlEncode + String.fromCharCode(c);
       }
       else {
        HtmlEncode = HtmlEncode + '&#' + c + ';';
      }
     }

     return HtmlEncode;
    }

     Espero que esto te pueda ayudar, cualquier duda házmela saber. Éxitos.


    Julio

     

    hola Julio soy yo otra vez esto es lo que estoy haciend, descargue la funcion   Fetch como me indicastes por el momento me es un solo campo a el que voy  a llamar, pero al llegar al punto 3 me indicas alli una variable "result", que toma el valor de result para hacer el For pero no se que valor es ese. Sera que me puedes aclarar la duda agradeceria cualquier tipo de informacion o ayuda.....Gracias

    function ObtenerDatos(){
     var lookupitem = new Array;
     lookupitem = Xrm.Page.getAttribute('customerid').getValue();

    if(lookupitem!=null){

    var FXML = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
    " <entity name='[account]'>"+
     " <attribute name='[accountid]' /> "+
      "<attribute name='[new_accountnumber]' /> "+
     " <order attribute='[new_accountnumber]' descending='false' />"+
    "<filter type='and'>"+
    "  <condition attribute='[new_accountnumber]' operator='[not-null]' />" +
     " </filter>"+
      "</entity>"+
      "</fetch>";
      var XmlDoc = Fetch(FXML);
      var results = XmlDoc.getElementsByTagName('result'); 
      var historia= "";

       for (i=0;i < results.length;i++)

               
        {

      if(results[i].selectSingleNode('./[new_accountnumber]') != null)
      
       historia= results[i].selectSingleNode('./[new_accountnumber]').nodeTypedValue;
    alert (historia);

          }
    /*Xrm.Page.getAttribute('[new_prueba]').setValue(historia);*/

    }

    }

    function Fetch(xml)
    {
     var Xml = "<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\">"
     Xml += GenerateAuthenticationHeader()
     Xml += "<soap:Body>";
     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";
     Xml += "<fetchXml>";
     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function
     Xml += "</fetchXml>";
     Xml += "</Fetch>";
     Xml += "</soap:Body>";
     Xml += "</soap:Envelope>";

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function
     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request
     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
     XmlHttp.send(Xml);

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     XmlDoc.async = false;
     XmlDoc.resolveExternals = false;                  
     XmlDoc.loadXML(XmlHttp.responseXML.text);
     return XmlDoc;

    }

    function CreateXmlHttpObject() //CreateXmlHttp
    {
     var oXmlHttp = null;
     if (window.XMLHttpRequest) {
      oXmlHttp = new XMLHttpRequest();
     }
     else {
       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {
        try {
         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);
         break;
        }
        catch (e) { }
       }
     }
     return oXmlHttp;
    }

    function FetchEncode(strInput) //_HtmlEncode
    {
     var c;
     var HtmlEncode = '';
     if (strInput == null) {
       return null;
     }
     if (strInput == '') {
       return '';
     }
     for (var cnt = 0; cnt < strInput.length; cnt++) {
       c = strInput.charCodeAt(cnt);
       if (((c > 96) && (c < 123)) ||
      ((c > 64) && (c < 91)) ||
      (c == 32) ||
      ((c > 47) && (c < 58)) ||
      (c == 46) ||
      (c == 44) ||
      (c == 45) ||
      (c == 95)) {
        HtmlEncode = HtmlEncode + String.fromCharCode(c);
       }
       else {
        HtmlEncode = HtmlEncode + '&#' + c + ';';
      }
     }

     return HtmlEncode;
    }


    Jrokita
    miércoles, 27 de julio de 2011 13:39
  • Hola Jrokita,

    Te explico un poco:
    La variable results contiene un conunto de nodos (imagina cada nodo como una fila de una tabla) que forman los registros resultantes de tu consulta. En ti caso sería un conjunto de filas con las columnas "accountid" y "new_accountnumber"

    Revisando un poco el código que has colocado, observo que has colocado valores como: [account],[accountid], [new_accountnumber], [new_prueba] y es por ello que no está entrando al "for", ya que el resultado de la consulta no te está devolviendo valor alfuno (El valor de results.length seguro es 0) No deberías utilizar "[" ni "]". Yo sólo los coloque para indicar queesos valores los deberías reemplazar por los valores que necesites.

     

    Realiza dichos cambios y nos comentas que tal te fue.


    Julio
    miércoles, 27 de julio de 2011 14:34
  • Hola Julio una pregunta yo tengo necesito hacer algo muy parecido tengo una entidad llamada códigos, en la que tengo un campo llamado código postal y otro llamado estado, y lo que quiero hacer es desde la entidad clientes potenciales ya modifique el campo código postal para que sea lookup, entonces al seleccionar el código postal quiero que el campo de estado se llene automáticamente con los datos de la entidad códigos , mi pregunta es la solución de arriba me sirve y podrías indicarme que cambiar pues soy nueva en esto y aun no entiendo bien tu código, de antemano muchas gracias me sacas de un aprieto
    miércoles, 27 de julio de 2011 16:06
  • Hola Jrokita,

    Te explico un poco:
    La variable results contiene un conunto de nodos (imagina cada nodo como una fila de una tabla) que forman los registros resultantes de tu consulta. En ti caso sería un conjunto de filas con las columnas "accountid" y "new_accountnumber"

    Revisando un poco el código que has colocado, observo que has colocado valores como: [account],[accountid], [new_accountnumber], [new_prueba] y es por ello que no está entrando al "for", ya que el resultado de la consulta no te está devolviendo valor alfuno (El valor de results.length seguro es 0) No deberías utilizar "[" ni "]". Yo sólo los coloque para indicar queesos valores los deberías reemplazar por los valores que necesites.

     

    Realiza dichos cambios y nos comentas que tal te fue.


    Julio
    Hola Julio una pregunta yo tengo necesito hacer algo muy parecido tengo una entidad llamada códigos, en la que tengo un campo llamado código postal y otro llamado estado, y lo que quiero hacer es desde la entidad clientes potenciales ya modifique el campo código postal para que sea lookup, entonces al seleccionar el código postal quiero que el campo de estado se llene automáticamente con los datos de la entidad códigos , mi pregunta es la solución de arriba me sirve y podrías indicarme que cambiar pues soy nueva en esto y aun no entiendo bien tu código, de antemano muchas gracias me sacas de un aprieto
    miércoles, 27 de julio de 2011 17:26
  • Hola julio como te dije ya lo intente hacer para mi caso este es mi código pero no funciona creo que mi problema esta a la hora de obtener el valor a buscar, te agradecería que lo revisaras y me ayudaras plis

     

     var bus = new Array;

    bus = Xrm.Page.getAttribute('new_codigopostal').getValue();

    var vbuscar=bus.name;

     

    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+

     "<entity name='new_codigo'>"+

        "<attribute name='new_estadooprovincia' />"+

          "<filter type='and'>"+

        "  <condition attribute='new_name' operator='eq' value='" + vbuscar+ "' />"+

        "</filter>"+

     "</entity>"+

     "</fetch>";

     

    //3.una vez que tengo el fetch en una variable, coloco el siguiente código:

     

    var XmlDoc = Fetch(FXML); 

     var results = XmlDoc.getElementsByTagName('result');   

     var estado= "";

        for (i=0;i < results.length;i++)

        {

      if(results[i].selectSingleNode('./new_name') != null) 

       esatdo= results[i].selectSingleNode('./new_estadooprovincia').nodeTypedValue;

        }

     

    //Al final pudieras crear una funcion similar a esta:

     

    function ObtenerDatos(){

     var lookupitem = new Array;

     lookupitem = Xrm.Page.getAttribute('new_codigopostal').getValue();

     if(lookupitem!=null){

    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+

     "<entity name='new_codigo'>"+

        "<attribute name='new_estadooprovincia' />"+

        "<filter type='and'>"+

        "  <condition attribute='new_name' operator='eq' value='" +vbuscar+ "' />"+

        "</filter>"+

     "</entity>"+

     "</fetch>";

     var XmlDoc = Fetch(FXML); 

     var results = XmlDoc.getElementsByTagName('result');   

     var estado= "";

     

        for (i=0;i < results.length;i++)

        {

      if(results[i].selectSingleNode('./new_estadooprovincia') != null) 

       estado= results[i].selectSingleNode('./new_estadooprovincia').nodeTypedValue;

        }

     Xrm.Page.getAttribute('address1_stateorprovince').setValue(estado);

    }

    }

     

    //4. Copiar las siguientes funciones:

     

    function Fetch(xml) 

    {

     var Xml = "<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\">"

     Xml += GenerateAuthenticationHeader()

     Xml += "<soap:Body>";

     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";

     Xml += "<fetchXml>";

     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function  

     Xml += "</fetchXml>";

     Xml += "</Fetch>";

     Xml += "</soap:Body>";

     Xml += "</soap:Envelope>";

     

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function  

     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request  

     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");

     XmlHttp.send(Xml);

     

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");

     XmlDoc.async = false;

     XmlDoc.resolveExternals = false;                    

     XmlDoc.loadXML(XmlHttp.responseXML.text);

     return XmlDoc;

     

    }

     

    function CreateXmlHttpObject() //CreateXmlHttp  

    {

     var oXmlHttp = null;

     if (window.XMLHttpRequest) {

      oXmlHttp = new XMLHttpRequest();

     }

     else {

       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];

       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {

        try {

         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);

         break;

        }

        catch (e) { }

       }

     }

     return oXmlHttp;

    }

     

    function FetchEncode(strInput) //_HtmlEncode  

    {

     var c;

     var HtmlEncode = '';

     if (strInput == null) {

       return null;

     }

     if (strInput == '') {

       return '';

     }

     for (var cnt = 0; cnt < strInput.length; cnt++) {

       c = strInput.charCodeAt(cnt);

       if (((c > 96) && (c < 123)) ||

      ((c > 64) && (c < 91)) ||

      (c == 32) ||

      ((c > 47) && (c < 58)) ||

      (c == 46) ||

      (c == 44) ||

      (c == 45) ||

      (c == 95)) {

        HtmlEncode = HtmlEncode + String.fromCharCode(c);

       }

       else {

        HtmlEncode = HtmlEncode + '&#' + c + ';';

      }

     }

     

     return HtmlEncode;

    }

    miércoles, 27 de julio de 2011 17:58
  • Hola Jrokita,

    Te explico un poco:
    La variable results contiene un conunto de nodos (imagina cada nodo como una fila de una tabla) que forman los registros resultantes de tu consulta. En ti caso sería un conjunto de filas con las columnas "accountid" y "new_accountnumber"

    Revisando un poco el código que has colocado, observo que has colocado valores como: [account],[accountid], [new_accountnumber], [new_prueba] y es por ello que no está entrando al "for", ya que el resultado de la consulta no te está devolviendo valor alfuno (El valor de results.length seguro es 0) No deberías utilizar "[" ni "]". Yo sólo los coloque para indicar queesos valores los deberías reemplazar por los valores que necesites.

     

    Realiza dichos cambios y nos comentas que tal te fue.


    Julio

    Hola Julio probe lo que me dijistes y si me funciono GRACIAS  te muestro como me quedo pero ahora tengo otro delalle cuando selecciono un cliente en el formulario de casos cuando me trae el valor del [campo new_accountnumber] para colocarlo en el [campo new_prueba], siempre me trae el mismo valor nose como hacer para que se blanquee si seleciono otro cliente o si creo un caso nuevo bueno espero que me puedas hechar otra manito de verdad muchas muchas gracias 

     

    function ObtenerDatos(){
     var lookupitem = new Array;
     lookupitem = Xrm.Page.getAttribute('customerid').getValue();

    if(lookupitem!=null){
    alert ( lookupitem [0].name );

      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='account'>"+
     " <attribute name='accountid' /> "+
      "<attribute name='new_accountnumber' /> "+
      "<order attribute='new_accountnumber' descending='false' />" +
     "<filter type='and'>"+
      "<condition attribute='new_accountnumber' operator='not-null' />"+
      "</filter>"+
      "</entity>"+
      "</fetch>";

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result'); 
     var historia= "";
        for (i=0;i < results.length;i++)
        {
      if(results[i].selectSingleNode('./new_accountnumber') != null)
       hisoria= results[i].selectSingleNode('./new_accountnumber').nodeTypedValue;
        Xrm.Page.getAttribute('new_prueba').setValue(historia); //AQUI ME SIGUE MOSTRANDO EL MISMO VALOR NO CAMBIA COMO HAGO PARA QUE BLANQUEE
     }
        alert ( hisoria);

    }

    function Fetch(xml)
    {
     var Xml = "<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\">"
     Xml += GenerateAuthenticationHeader()
     Xml += "<soap:Body>";
     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";
     Xml += "<fetchXml>";
     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function
     Xml += "</fetchXml>";
     Xml += "</Fetch>";
     Xml += "</soap:Body>";
     Xml += "</soap:Envelope>";

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function
     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request
     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
     XmlHttp.send(Xml);

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     XmlDoc.async = false;
     XmlDoc.resolveExternals = false;                  
     XmlDoc.loadXML(XmlHttp.responseXML.text);
     return XmlDoc;

    }

    function CreateXmlHttpObject() //CreateXmlHttp
    {
     var oXmlHttp = null;
     if (window.XMLHttpRequest) {
      oXmlHttp = new XMLHttpRequest();
     }
     else {
       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {
        try {
         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);
         break;
        }
        catch (e) { }
       }
     }
     return oXmlHttp;
    }

    function FetchEncode(strInput) //_HtmlEncode
    {
     var c;
     var HtmlEncode = '';
     if (strInput == null) {
       return null;
     }
     if (strInput == '') {
       return '';
     }
     for (var cnt = 0; cnt < strInput.length; cnt++) {
       c = strInput.charCodeAt(cnt);
       if (((c > 96) && (c < 123)) ||
      ((c > 64) && (c < 91)) ||
      (c == 32) ||
      ((c > 47) && (c < 58)) ||
      (c == 46) ||
      (c == 44) ||
      (c == 45) ||
      (c == 95)) {
        HtmlEncode = HtmlEncode + String.fromCharCode(c);
       }
       else {
        HtmlEncode = HtmlEncode + '&#' + c + ';';
      }
     }

     return HtmlEncode;
    }
    }

     


    Jrokita
    miércoles, 27 de julio de 2011 20:58
  • hola Mlp24,

    segun lo que me explico Julio lo primero que debes hacer es descargar la funcion fetch de tu entidad codigo parece que te falta algo aqui, yo lo que hice fue desde busqueda avanzada crearme una vista y la descargue y eso fue lo copie en esta funcion fetch. trata de hacerlo y colocale un aler para que veas q te esta mostrando..Saludos bueno yo tambien quede con una dudita y le escribi a Julio pero ami si me funciona..

     

    var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+

     "<entity name='new_codigo'>"+

        "<attribute name='new_estadooprovincia' />"+

          "<filter type='and'>"+

        "  <condition attribute='new_name' operator='eq' value='" + vbuscar+ "' />"+

        "</filter>"+

     "</entity>"+

     "</fetch>";


    Jrokita
    jueves, 28 de julio de 2011 13:50
  • hola muchas gracias si me ayudo ahora solo tengo el mismo problema que tu que el dato no se cambia se queda fijo
    jueves, 28 de julio de 2011 14:23
  • ya me quedo muchas gracias aquí les dejo mi código por si a alguien le sirve:

     

    function toogle(){

     var lookupitem = new Array;

     lookupitem = Xrm.Page.getAttribute('new_codigopostal').getValue();

     

    if(lookupitem!=null){

    alert ( lookupitem [0].name );

     

    var vbuscar =  lookupitem [0].name;

     

      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+

     "<entity name='new_codigo'>"+

     " <attribute name='new_estadooprovincia'  /> "+

      "<order attribute='new_estadooprovincia' descending='false' />" +

     "<filter type='and'>"+

     "<condition attribute='new_name' operator='eq' value='" + vbuscar+ "' />"+

      "</filter>"+

      "</entity>"+

      "</fetch>";

     

    var XmlDoc = Fetch(FXML);

     var results = XmlDoc.getElementsByTagName('result');  

    var historia= "";

     

        for (i=0;i < results.length;i++)

        {

    historia= "";

      if(results[i].selectSingleNode('./new_estadooprovincia' ) != null ) 

       historia= results[i].selectSingleNode('./new_estadooprovincia' ).nodeTypedValue;

        Xrm.Page.getAttribute("address1_stateorprovince").setValue(historia); //AQUI ME SIGUE MOSTRANDO EL MISMO VALOR NO CAMBIA COMO HAGO PARA QUE BLANQUEE

     }

        alert ( historia);

     

    }

     

    function Fetch(xml)

    {

     var Xml = "<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\">"

     Xml += GenerateAuthenticationHeader()

     Xml += "<soap:Body>";

     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";

     Xml += "<fetchXml>";

     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function 

     Xml += "</fetchXml>";

     Xml += "</Fetch>";

     Xml += "</soap:Body>";

     Xml += "</soap:Envelope>";

     

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function 

     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request 

     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");

     XmlHttp.send(Xml);

     

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");

     XmlDoc.async = false;

     XmlDoc.resolveExternals = false;                   

     XmlDoc.loadXML(XmlHttp.responseXML.text);

     return XmlDoc;

     

    }

     

    function CreateXmlHttpObject() //CreateXmlHttp 

    {

     var oXmlHttp = null;

     if (window.XMLHttpRequest) {

      oXmlHttp = new XMLHttpRequest();

     }

     else {

       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];

       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {

        try {

         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);

         break;

        }

        catch (e) { }

       }

     }

     return oXmlHttp;

    }

     

    function FetchEncode(strInput) //_HtmlEncode 

    {

     var c;

     var HtmlEncode = '';

     if (strInput == null) {

       return null;

     }

     if (strInput == '') {

       return '';

     }

     for (var cnt = 0; cnt < strInput.length; cnt++) {

       c = strInput.charCodeAt(cnt);

       if (((c > 96) && (c < 123)) ||

      ((c > 64) && (c < 91)) ||

      (c == 32) ||

      ((c > 47) && (c < 58)) ||

      (c == 46) ||

      (c == 44) ||

      (c == 45) ||

      (c == 95)) {

        HtmlEncode = HtmlEncode + String.fromCharCode(c);

       }

       else {

        HtmlEncode = HtmlEncode + '&#' + c + ';';

      }

     }

     

     return HtmlEncode;

    }

    }

    jueves, 28 de julio de 2011 16:39
  • Hola MLP24, me da gusto que hayas logrado tu objetivo.
    Jokrita, creo tu problema es con tu variable "historia" ya que a veces utilizas "hisoria":
    var historia= "";
    for (i=0;i < results.length;i++)
    {
    if(results[i].selectSingleNode('./new_accountnumber') != null)
    hisoria= results[i].selectSingleNode('./new_accountnumber').nodeTypedValue;
    Xrm.Page.getAttribute('new_prueba').setValue(historia); //AQUI ME SIGUE MOSTRANDO EL MISMO VALOR NO CAMBIA COMO HAGO PARA QUE BLANQUEE
    }
    alert ( hisoria);

    Julio
    jueves, 28 de julio de 2011 17:41
  • hola Julio ya revise y en efecto ya lo arregle pero me pasa lo siguiente

    fijate el entra al for y obtengo el valor de la lista pero que me esta pasando justo aqui entrea en [i] el cual me muestra la posicion las posiones que va rrecorriendo, entra y va pasado por todos los elemtos de la lista y cuando llega al ultimo registro ese es el valor que me trae de la lista como hago para validar la pocision en la que esta ubicado el puntero.

    for (i=0;i < results.length;i++)
    {
    if(results[i].selectSingleNode('./new_accountnumber') != null)
    historia= results[i].selectSingleNode('./new_accountnumber').nodeTypedValue;
    Xrm.Page.getAttribute('new_prueba').setValue(historia);
    }
    alert ( historia);

     

    yo hice esto para probar la pero igualaqui lo que quise ver era como tomaba el valor i, pero lo que quiero comparar es algo como

    si results[i].selectSingleNode('./new_accountnumber') corresponda a la posicion que estoy ubicada.

     

     

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result'); 
     var historia= "";
     var i= 0;

     while ( i< results.length)
        {
     var historia= "";

     if(results[i].selectSingleNode('./new_accountnumber') != null) {
             alert(i);

                historia= results[i].selectSingleNode('./new_accountnumber').nodeTypedValue;
              Xrm.Page.getAttribute('new_prueba').setValue(historia);
              i= results.length;
    alert(i);
     
    }
      }

    bueno espero me puedas aclarar esta duda igual gracias porque ha sido de gran utilidad todo lo que me haz enviado..Saludos espero tu respuesta


    Jrokita
    viernes, 29 de julio de 2011 16:11
  • Hola Jokrita,

    Ahora si creo que no te entendí, jejeje.
    Si no mal recuerdo, tu querías obtener un valor de un campo de una entidad para colocarlo en otro campo de otra entidad. Bueno, espero estar en lo correcto. Si es así, se supone que el resultado de tu fetch, sólo te debería devolver un resultado, es decir: results.length=1.

    Al parecer te está devolviendo más de un valor ya que en tu fetch has colocado lo siguiente:
     "<condition attribute='new_accountnumber' operator='not-null' />"
    Esto sería lo más similar a un where de sql, y lo que te está trayendo es todos aquello registros que contengan valor en el campo new_accountnumber. Lo que deberías hacer es colocar una condición similar a la que menciona Mlp24:

    "<condition attribute='new_name' operator='eq' value='" + vbuscar+ "' />"

    Donde el valor vbuscar lo obtiene de la siguiente manera:

    var lookupitem = new Array;

    lookupitem = Xrm.Page.getAttribute('new_codigopostal').getValue();
    if(lookupitem!=null){
    alert ( lookupitem [0].name );
    var vbuscar = lookupitem [0].name;
    }

    De esta manera su fetch le va a devolver un solo valor.

    Recuerda que en el código que coloque puse lo siguiente:
    " <condition attribute='[atributo_parametro_de_busqueda]' operator='eq' value='" +[valor_para_buscar]+ "' />"

    Espero haberte ayudado, sino ya sabes que con toda confianza nos puedes preguntar.

     

     


    Julio
    viernes, 29 de julio de 2011 16:25
  • hola Julio bueno creo que no me explique bien en la pregunta de arriba lo que qiero hacer es que si selecciono en mi customerid al Sr. PEDRO PEREZ, me traiga el valor que tiene en su campo 'new_accountnumber' y que me lo muestre en el campo new_prueba, coloque lo que me indicastes pero ahora no hace nada ya no se que hacerrrrrr te muestro lo que hice nuevamente, lo deje como estaba. porfa dime q hago... 

     

    function ObtenerDatos(){

    var lookupitem = new Array;
     lookupitem = Xrm.Page.getAttribute('customerid').getValue();

      if(lookupitem!=null){
     var vbuscar= lookupitem [0].name;
     alert (vbuscar);


      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='account'>"+
     " <attribute name='accountid' /> "+
      "<attribute name='new_accountnumber' /> "+
      "<order attribute='new_accountnumber' descending='false' />" +
     "<filter type='and'>"+
      "<condition attribute='new_accountnumber' operator='eq' value='" +vbuscar+ "' />"+
      "</filter>"+
      "</entity>"+
      "</fetch>";

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result'); 
     var historia= "";
        for (i=0;i < results.length;i++)
        {
    alert(i);
         if(results[i].selectSingleNode('./new_accountnumber') != null)
        historia= results[i].selectSingleNode('./new_accountnumber').nodeTypedValue;
        Xrm.Page.getAttribute('new_prueba').setValue(historia);
    alert(i);   
     }




    function Fetch(xml)
    {
     var Xml = "<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\">"
     Xml += GenerateAuthenticationHeader()
     Xml += "<soap:Body>";
     Xml += "<Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">";
     Xml += "<fetchXml>";
     Xml += FetchEncode(xml); // Microsoft _HtmlEncode function
     Xml += "</fetchXml>";
     Xml += "</Fetch>";
     Xml += "</soap:Body>";
     Xml += "</soap:Envelope>";

     var XmlHttp = CreateXmlHttpObject(); // Microsot CreateXmlHttp function
     XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request
     XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
     XmlHttp.send(Xml);

     var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     XmlDoc.async = false;
     XmlDoc.resolveExternals = false;                  
     XmlDoc.loadXML(XmlHttp.responseXML.text);
     return XmlDoc;

    }

    function CreateXmlHttpObject() //CreateXmlHttp
    {
     var oXmlHttp = null;
     if (window.XMLHttpRequest) {
      oXmlHttp = new XMLHttpRequest();
     }
     else {
       var arrProgIds = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
       for (var iCount = 0; iCount < arrProgIds.length; iCount++) {
        try {
         oXmlHttp = new ActiveXObject(arrProgIds[iCount]);
         break;
        }
        catch (e) { }
       }
     }
     return oXmlHttp;
    }

    function FetchEncode(strInput) //_HtmlEncode
    {
     var c;
     var HtmlEncode = '';
     if (strInput == null) {
       return null;
     }
     if (strInput == '') {
       return '';
     }
     for (var cnt = 0; cnt < strInput.length; cnt++) {
       c = strInput.charCodeAt(cnt);
       if (((c > 96) && (c < 123)) ||
      ((c > 64) && (c < 91)) ||
      (c == 32) ||
      ((c > 47) && (c < 58)) ||
      (c == 46) ||
      (c == 44) ||
      (c == 45) ||
      (c == 95)) {
        HtmlEncode = HtmlEncode + String.fromCharCode(c);
       }
       else {
        HtmlEncode = HtmlEncode + '&#' + c + ';';
      }
     }

     return HtmlEncode;
    }
    }
    }


    Jrokita
    viernes, 29 de julio de 2011 20:26
  • Hola Jokrita,

    Me parece que tu error es en el parámetro por el cual vas a buscar y en el fetch, prueba o siguiente:
    Por lo general, deberías buscar por el GUID del registro, en este caso cambia esto:
    var vbuscar= lookupitem [0].name;
    Por esto:
    var vbuscar= lookupitem [0].id;

    Ahora, en tu fetch tu vas a buscar por ese GUID de la entidad contacto, entonces en el condition attribute debes hacer referencia al campo accountid. Cambia esto:

      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
    "<entity name='account'>"+
    " <attribute name='accountid' /> "+
    "<attribute name='new_accountnumber' /> "+
    "<order attribute='new_accountnumber' descending='false' />" +
    "<filter type='and'>"+
    "<condition attribute='new_accountnumber' operator='eq' value='" +vbuscar+ "' />"+
    "</filter>"+
    "</entity>"+
    "</fetch>";

    Por esto:
      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
    "<entity name='account'>"+
    " <attribute name='accountid' /> "+
    "<attribute name='new_accountnumber' /> "+
    "<order attribute='new_accountnumber' descending='false' />" +
    "<filter type='and'>"+
    "<condition attribute='accountid' operator='eq' value='" +vbuscar+ "' />"+
    "</filter>"+
    "</entity>"+
    "</fetch>";

    El resto debe permanecer igual. Éxitos


    Julio
    viernes, 29 de julio de 2011 20:35
  • Hola Jokrita,

    Me parece que tu error es en el parámetro por el cual vas a buscar y en el fetch, prueba o siguiente:
    Por lo general, deberías buscar por el GUID del registro, en este caso cambia esto:
    var vbuscar= lookupitem [0].name;
    Por esto:
    var vbuscar= lookupitem [0].id;

    Ahora, en tu fetch tu vas a buscar por ese GUID de la entidad contacto, entonces en el condition attribute debes hacer referencia al campo accountid. Cambia esto:

      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
    "<entity name='account'>"+
    " <attribute name='accountid' /> "+
    "<attribute name='new_accountnumber' /> "+
    "<order attribute='new_accountnumber' descending='false' />" +
    "<filter type='and'>"+
    "<condition attribute='new_accountnumber' operator='eq' value='" +vbuscar+ "' />"+
    "</filter>"+
    "</entity>"+
    "</fetch>";

    Por esto:
      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
    "<entity name='account'>"+
    " <attribute name='accountid' /> "+
    "<attribute name='new_accountnumber' /> "+
    "<order attribute='new_accountnumber' descending='false' />" +
    "<filter type='and'>"+
    "<condition attribute='accountid' operator='eq' value='" +vbuscar+ "' />"+
    "</filter>"+
    "</entity>"+
    "</fetch>";

    El resto debe permanecer igual. Éxitos


    Julio
    Julio Muchas Gracias ya me funcionooooooo, Graciassssssss. de verdad me ayudastes fulll

    Jrokita
    viernes, 29 de julio de 2011 22:24
  • Hola!!

    Estoy haciendo una consulta con fetch, guiándome en lo que han publicado, pero tengo un problema, al querer mostrar el resultado de la consulta me muestra el id y no el nombre (quiero consultar el valor de un campo lookup).

    La entidad "new_informacion" contiene datos de un contacto, 

    Este es parte del código:

    function toggle(){
     vbuscar = Xrm.Page.getAttribute('new_name').getValue();  //busco la matricula para la consulta

      var FXML = " <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
     "<entity name='new_informacion'>"+
     " <attribute name='new_usuario'  /> "+
      "<filter type='and'>"+
          "<condition attribute='new_matricula' operator='eq' value='" + vbuscar+ "' />"+
      "</filter>"+
      "</entity>"+
      "</fetch>";

    var XmlDoc = Fetch(FXML);
     var results = XmlDoc.getElementsByTagName('result');  
    var historia= "";

    for (i=0;i < results.length;i++)
    {

      if(results[i].selectSingleNode('./new_usuario' ) != null ) 
       historia= results[i].selectSingleNode('./new_usuario' ).nodeTypedValue;
       alert (historia);
     }
        var lookup=new Array();
        lookup[0]=new Object();
        //lookup[0].id="";
        lookup[0].name=historia;
        lookup[0].entityType="new_informacion";
        Xrm.Page.getAttribute("new_nombre").setValue(lookup);  
    }

    Como mencione en la parte superior, sólo me retorna el id del campo lookup y no el nombre, y no se a que se deba.

    Espero me puedan ayudar.

    Saludos!!

    martes, 17 de abril de 2012 18:41