Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于多对多关系的Dynamics crm rest builder查询_Javascript_Dynamics Crm_Crm_Microsoft Dynamics - Fatal编程技术网

Javascript 用于多对多关系的Dynamics crm rest builder查询

Javascript 用于多对多关系的Dynamics crm rest builder查询,javascript,dynamics-crm,crm,microsoft-dynamics,Javascript,Dynamics Crm,Crm,Microsoft Dynamics,我需要根据所选帐户和业务单位在crm中设置合同查找字段。这是crm中的多对多关系。我认为最好的方法是创建2个查询/api调用(使用crm rest builder),以便能够根据条件执行此操作。第一个查询访问intersect表(account contract table),以返回基于帐户的所有合同,秒需要通过循环第一个查询的所有结果进一步过滤结果,并对与所选业务单元匹配的所有合同进行计数。我现在遇到的问题是,我使用一个数组来推送第一个查询中的所有值,以便能够在第二个查询中循环。但是,我创建的

我需要根据所选帐户和业务单位在crm中设置合同查找字段。这是crm中的多对多关系。我认为最好的方法是创建2个查询/api调用(使用crm rest builder),以便能够根据条件执行此操作。第一个查询访问intersect表(account contract table),以返回基于帐户的所有合同,秒需要通过循环第一个查询的所有结果进一步过滤结果,并对与所选业务单元匹配的所有合同进行计数。我现在遇到的问题是,我使用一个数组来推送第一个查询中的所有值,以便能够在第二个查询中循环。但是,我创建的数组没有到达for循环,因此第二个查询没有执行

函数populateContractLookup(){
var buisnssunitid=getFieldValue(“hc_业务单元”);
var worksiteId=getFieldValue(“hc_工作站点”)[0].id;
工作站点ID=条带卷曲(工作站点ID);
if(buisnssunitid!=null){
buisnsunitid=stripcullies(buisnsunitid[0].id);
var条件=“\u hc\u businessunit\u value eq”+业务假设+”和”;
}
否则{
条件=”;
}//能够计算将填充到合同查找字段的合同数量
var有效浓度;
var contractCount=0;
var contractArray=[];
//此查询获取基于帐户的所有合同
var req=新的XMLHttpRequest();
请求打开(“GET”,Xrm.Page.context.getClientUrl()+”/api/data/v8.2/hc\u account\u contractset?$select=constractd&$filter=accountid eq“+工作站点ID,true);
请求setRequestHeader(“OData MaxVersion”,“4.0”);
请求setRequestHeader(“OData版本”、“4.0”);
请求setRequestHeader(“接受”、“应用程序/json”);
setRequestHeader(“内容类型”,“应用程序/json;字符集=utf-8”);
req.setRequestHeader(“首选”、“odata.include注释=\”*\”);
req.onreadystatechange=函数(){
if(this.readyState==4){
req.onreadystatechange=null;
如果(this.status==200){
var results=JSON.parse(this.response);
//Xrm.Utility.alertDialog(results.value.length);
对于(var i=0;i}
您的第一个请求是异步的。第一个
req.send()
之后的代码将立即执行,而您需要在执行任何其他代码之前返回第一个请求的结果

因此,您需要将依赖于第一个请求结果的第二个请求包装到回调函数中。然后在第一个请求的成功回调中调用此回调函数

有关回调函数的信息,请参阅

顺便说一句,你的第二个请求不起作用。您正在尝试对检索到的每个合同执行一次请求。您要做的是通过迭代
contractary
array并写入
'(contractedeq'+contractary[i]+')或'/…

另一方面,考虑使用A来计算记录。


您的代码可能如下所示:

var buisnessUnitId = getFieldValue("hc_businessunit");
var worksiteId = getFieldValue("hc_worksite")[0].id;

function populateContractLookup() {        
    worksiteId = stripCurlies(worksiteId);

    if (buisnessUnitId != null) {
        buisnessUnitId = stripCurlies(buisnessUnitId[0].id);
        var condition = "_hc_businessunit_value eq " + buisnessUnitId + " and";
    }
    else {
        condition = "";
    }//to be able to count the how many contracts that would hav gotten populated to contract lookup field
    var validcontractid;
    var contractCount = 0;
    var contractArray = [];
    //this query gets all contracts based on account
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/hc_account_contractset?$select=contractid&$filter=accountid eq " + worksiteId, true);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
    req.onreadystatechange = function () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200) {
                var results = JSON.parse(this.response);
               // Xrm.Utility.alertDialog(results.value.length);

                for (var i = 0; i < results.value.length; i++) {
                    var contractid = results.value[i]["contractid"];
                    // Xrm.Utility.alertDialog(contractid);
                    contractArray.push(contractid);                        
                }
                // Call your callback function.
                countContracts(contractArray);
            } else {
                Xrm.Utility.alertDialog(this.statusText);
            }
        }// Xrm.Utility.alertDialog(contractArray.length) prints to the screen here
    };
    req.send();
}    
var buisnessUnitId=getFieldValue(“hc_业务单元”);
var worksiteId=getFieldValue(“hc_工作站点”)[0].id;
函数populateContractLookup(){
工作站点ID=条带卷曲(工作站点ID);
if(buisnssunitid!=null){
buisnsunitid=stripcullies(buisnsunitid[0].id);
var条件=“\u hc\u businessunit\u value eq”+业务假设+”和”;
}
否则{
条件=”;
}//能够计算将填充到合同查找字段的合同数量
var有效浓度;
var contractCount=0;
var contractArray=[];
//此查询获取基于帐户的所有合同
var req=新的XMLHttpRequest();
请求打开(“GET”,Xrm.Page.context.getClientUrl()+”/api/data/v8.2/hc\u account\u contractset?$select=constractd&$filter=accountid eq“+work
function countContracts(contractArray) {
    for (var i = 0; i < contractArray.length; i++) {
        Xrm.Utility.alertDialog("were in the loop"); //not reaching this loop
        var req = new XMLHttpRequest();
        req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/contracts?$select=contractid&$filter=contractid eq " + contractArray[i] + " and  _hc_businessunit_value eq " + buisnessUnitId, true);
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 200) {
                    var results = JSON.parse(this.response);
                    Xrm.Utility.alertDialog(results.value.length);
                    for (var i = 0; i < results.value.length; i++) {
                        contractCount++;
                    }
                } else {
                    Xrm.Utility.alertDialog(this.statusText);
                }
            }
        };
        req.send();
    }
}
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/hc_account_contractset?$select=contractid&$filter=accountid eq " + worksiteId, false);