根据关系1:N检索其他实体的记录

时间:2015-01-18 20:57:26

标签: javascript web-services dynamics-crm-2011 dynamics-crm dynamics-crm-4

以下代码有助于将accout实体的查询cs24_erpaccounttomergeid中的数据检索到我们刚刚创建的帐户。 我的问题是如何根据与同一查找cs24_erpaccounttomergeid相关的关系1:N检索其他实体的记录?

    if (crmForm.all.cs24_erpaccounttomergeid.DataValue != null)
{
  var l = crmForm.GetLookup('cs24_erpaccounttomergeid');
  var  ERPS = GetERPSourceName(l.id);
  if (ERPS == null)
  {

     crmForm.all.cs24_erpaccounttomergeid.DataValue = null;
  } 
}

// ERP SrourceName retrieve ==============
function GetERPSourceName(Act) {
    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\">" +
 GenerateAuthenticationHeader() +
 "<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>cs_erpsourcename</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"<q1:Criteria>" +
"<q1:FilterOperator>And</q1:FilterOperator>" +
"<q1:Conditions>" +
"<q1:Condition>" +
"<q1:AttributeName>accountid</q1:AttributeName>" +
"<q1:Operator>Equal</q1:Operator>" +
"<q1:Values>" +
"<q1:Value xsi:type='xsd:string'>" + Act + "</q1:Value>" +
"</q1:Values>" +
"</q1:Condition>" +
"</q1:Conditions>" +
"</q1:Criteria>" +
"</query>" +
"</RetrieveMultiple>" +
"</soap:Body>" +
"</soap:Envelope>" +
 "";

    var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

    xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xmlHttpRequest.setRequestHeader("SOAPAction", " http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
    xmlHttpRequest.send(xml);

    var resultXml = xmlHttpRequest.responseXML;
    var Request = resultXml.getElementsByTagName("BusinessEntity");
if (Request.length == 0)   return null;
else
{
  if (Request[0].getElementsByTagName("q1:cs_erpsourcename")[0] != null)
   {
      var ERPSourceName = resultXml.selectNodes("//BusinessEntity/q1:cs_erpsourcename");
       return ERPSourceName[0].text;
    }
    else return null;

 }
}

有人可以帮我实现这个目标吗? 谢谢你的时间

1 个答案:

答案 0 :(得分:0)

我建议首先迁移您的代码以使用公共库来生成XML请求。 XrmServiceToolkit是一个常用的。一旦你使用它,做一个RetrieveMultiple调用要简单得多。

https://xrmservicetoolkit.codeplex.com/