Obtener datos de una entidad relacionada
-
2012年2月23日 16:49
Hola buenos dias, me encuentro enfrentando un problema en crm 2011, el escenario es el siguiente, en la entidad oportunidades hay un campo lookup relacionado a la entidad contacto (v5_contactoid), sucede que deseo obtener el email de dicho contacto y con el llenar un campo en la entidad oportunidades, este es mi codigo, pero me marca un valor nulo y si existe un correo.
function email(){
var lookupItem = new Array;
lookupItem = Xrm.Page.getAttribute("v5_contactoid").getValue();
var contacto = lookupItem[0].id;
var FXML ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
"<entity name='contact'>"+
"<attribute name='emailaddress1' />"+
"<filter type='and'>"+
" <condition attribute='fullname' operator='eq' value='" + contacto+ "' />"+
"</filter>"+
"</entity>"+
"</fetch>";
var XmlDoc = Fetch(FXML);
var results = XmlDoc.getElementsByTagName('result');
var cod = "";
for (i=0;i < results.length;i++)
{
if(results[i].selectSingleNode('./emailaddress1') != null)
cod = results[i].selectSingleNode('./emailaddress1').nodeTypedValue;
}
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 me puedan ayudar, por favor, se los agradecere.
所有回覆
-
2012年2月23日 22:42
Estimado la comparacion es incorrecta esta comparando un string y un lookup
<condition attribute='fullname' operator='eq' value='" + contacto+ "' />
deberia colocar algo como:
<condition attribute='contactid' operator='eq' value='" + contacto+ "' /> para que se puede ejecutar el fetch correctamente y te traiga el e-mail que necesitas........
gracias