Javascript 从实体主页(网格视图)检索实体属性

Javascript 从实体主页(网格视图)检索实体属性,javascript,dynamics-crm-2011,Javascript,Dynamics Crm 2011,我构建了一个进程,该进程将由功能区中的按钮调用。 我已经将它添加到表单视图中,没有问题,我希望它也能从网格视图中工作 问题是我在实际流程开始之前验证了一些数据。 在可视功能区中,我将SelectedControlSelectedEmids作为参数传递,并且我仅在仅选择一条记录时启用该按钮 调用的JS如下所示: function AutoQualify(dialogId, typeName, recordId, width, heigth) { retrieveLeadRecord(r

我构建了一个进程,该进程将由功能区中的按钮调用。 我已经将它添加到表单视图中,没有问题,我希望它也能从网格视图中工作

问题是我在实际流程开始之前验证了一些数据。 在可视功能区中,我将SelectedControlSelectedEmids作为参数传递,并且我仅在仅选择一条记录时启用该按钮

调用的JS如下所示:

function AutoQualify(dialogId, typeName, recordId, width, heigth) {


    retrieveLeadRecord(recordId);

    var stateCode = getLeadStateCode(recordId)
    if ((stateCode === null) || (stateCode === undefined) || (stateCode === "")) {
        alert("status Code fält kan inte vara tömt");
        return;
    }
    if ((stateCode != 0)) {
        alert("Man kan inte köra Quicksale från ett kvalificerat Lead");
        return;
    }

    var firstName = GetAttributeValue('firstname');
    if ((firstName === null) || (firstName === undefined) || (firstName === "")) {
        alert("Förstanamn fält kan inte vara tömt");
        return;
    }

    var lastName = GetAttributeValue('lastname');
    if ((lastName === null) || (lastName === undefined) || (lastName === "")){
        alert("Efternamn fält kan inte vara tömt");
        return; 
    }

    var companyName = GetAttributeValue('companyname');
    if ((companyName === null) || (companyName === undefined) || (companyName === "")) {
        alert("Företagsnamn fält kan inte vara tömt");
        return;
    }

    var orgNummer = GetAttributeValue('custom_corporateidentificationnumber');
    if ((orgNummer === null) || (orgNummer === undefined) || (orgNummer === "")) {
        alert("Organisationsnummer fält kan inte vara tömt");
        return;
    }

    var leadSourceCode = GetAttributeValue('leadsourcecode');
    if ((leadSourceCode === null) || (leadSourceCode === undefined) || (leadSourceCode === "")) {
        alert("Leadskälla fält kan inte vara tömt");
        return;
    }

    var mailAddress = GetAttributeValue('emailaddress1');
    var telephone = GetAttributeValue('telephone1');

    if (((mailAddress === null) || (mailAddress === undefined) || (mailAddress === "")) && ((telephone === null) || (telephone === undefined) || (telephone === ""))) {
        alert("Man måste ange e-post adress eller telefonnummer");
        return;
    }

    if (confirm("Vill du kvalificera leadet?")) {
        LaunchModalDialogChangeSize(dialogId, typeName, recordId, width, heigth, Xrm.Page.context.getServerUrl() );
    }
}
function AutoQualifyMultiple(dialogId, typeName, recordIds, width, heigth)
{
  AutoQualify(dialogId, typeName, recordIds[0], width, heigth);
}
retrieveUserRecord函数:

function retrieveLeadRecord(Id) {
    var serverUrl = Xrm.Page.context.getServerUrl();
    var GlobalODataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
    var select = "/LeadSet?$select=StateCode,StatusCode&$filter=LeadId eq guid'" + Id + "'";
    showMessage("retrieveLead function START");
    var retrieveLeadReq = new XMLHttpRequest();
    retrieveLeadReq.open("GET", GlobalODataPath + select, true);
    retrieveLeadReq.setRequestHeader("Accept", "application/json");
    retrieveLeadReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    alert("3");
    retrieveLeadReq.onreadystatechange = function () {
        retrieveLeadReqCallBack(this);
};
    retrieveLeadReq.send();
    showMessage("retrieveLead function END.");
}
但实际上,它从未通过XMLHttpRequest声明。
是否缺少一个库?

虽然我已经发表了评论,但现在我重新阅读了它,您的代码看起来不正确。即使您只在网格中选择了一行,ID仍然会以数组的形式出现(如果您的属性设置正确,我想可以通过
recordId
。但您将遇到的问题是,您需要同时处理表单和网格。因为表单只会给您一个ID,而网格视图将以数组形式传递(或者可能是逗号分隔的字符串,我不记得是哪个)/

因此,实际上,您需要做两件事中的一件:

  • 选项1在JavaScript中,检查变量“recordId”以查看它是仅为1个id还是多个id。根据它是一个数组还是一个分隔字符串,代码可能会有所不同,所以我没有一个现成的例子

  • 选项2是创建第二个函数,该函数接受recordId并通过第一个元素传递给另一个函数。然后您可以设置网格按钮来调用此函数。函数将如下所示:

    function AutoQualify(dialogId, typeName, recordId, width, heigth) {
    
    
        retrieveLeadRecord(recordId);
    
        var stateCode = getLeadStateCode(recordId)
        if ((stateCode === null) || (stateCode === undefined) || (stateCode === "")) {
            alert("status Code fält kan inte vara tömt");
            return;
        }
        if ((stateCode != 0)) {
            alert("Man kan inte köra Quicksale från ett kvalificerat Lead");
            return;
        }
    
        var firstName = GetAttributeValue('firstname');
        if ((firstName === null) || (firstName === undefined) || (firstName === "")) {
            alert("Förstanamn fält kan inte vara tömt");
            return;
        }
    
        var lastName = GetAttributeValue('lastname');
        if ((lastName === null) || (lastName === undefined) || (lastName === "")){
            alert("Efternamn fält kan inte vara tömt");
            return; 
        }
    
        var companyName = GetAttributeValue('companyname');
        if ((companyName === null) || (companyName === undefined) || (companyName === "")) {
            alert("Företagsnamn fält kan inte vara tömt");
            return;
        }
    
        var orgNummer = GetAttributeValue('custom_corporateidentificationnumber');
        if ((orgNummer === null) || (orgNummer === undefined) || (orgNummer === "")) {
            alert("Organisationsnummer fält kan inte vara tömt");
            return;
        }
    
        var leadSourceCode = GetAttributeValue('leadsourcecode');
        if ((leadSourceCode === null) || (leadSourceCode === undefined) || (leadSourceCode === "")) {
            alert("Leadskälla fält kan inte vara tömt");
            return;
        }
    
        var mailAddress = GetAttributeValue('emailaddress1');
        var telephone = GetAttributeValue('telephone1');
    
        if (((mailAddress === null) || (mailAddress === undefined) || (mailAddress === "")) && ((telephone === null) || (telephone === undefined) || (telephone === ""))) {
            alert("Man måste ange e-post adress eller telefonnummer");
            return;
        }
    
        if (confirm("Vill du kvalificera leadet?")) {
            LaunchModalDialogChangeSize(dialogId, typeName, recordId, width, heigth, Xrm.Page.context.getServerUrl() );
        }
    }
    
    function AutoQualifyMultiple(dialogId, typeName, recordIds, width, heigth)
    {
      AutoQualify(dialogId, typeName, recordIds[0], width, heigth);
    }

  • 我设法把它修好了。在VisualRibbon编辑器中,我有一个启用规则,仅当选择了一条记录时才启用按钮。 如果调用activateQuicksaleForLead,并使用SelectedControlSelectedItemId作为参数,则为另一个激活规则。 该按钮需要函数返回true才能启用

    function activateQuicksaleForLead(recordId) {
        function myBool() {
            this.value = true;
        }
        var active = new myBool();
        retrieveLeadStatus(recordId, active);
        return active.value;
    }
    
    retrieveLeadStatus通过对oData CRM Web服务进行同步调用来检索该值

    function retrieveLeadStatus(Id, active) {
        var serverUrl = Xrm.Page.context.getServerUrl();
        var GlobalODataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
        var select = "/LeadSet?$filter=LeadId eq guid'" + Id + "'";
        var retrieveLeadReq = new XMLHttpRequest();
        retrieveLeadReq.open("GET", GlobalODataPath + select, false);
        retrieveLeadReq.setRequestHeader("Accept", "application/json");
        retrieveLeadReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    
        retrieveLeadReq.send(null);
        var records = JSON.parse(retrieveLeadReq.responseText).d;
        var stateCode = records.results[0].StateCode.Value;
        if ((stateCode === null) || (stateCode === undefined) || (stateCode === "")) {
            alert("Det går inte att hitta posten. Kontakta din system admininistrator.");
            activateQuickSaleLead = false;
            return;
        }
        if ((stateCode != 0)) {
            active.value = false;
            return;
        }
        else {
            active.value = true;
            return;
        }
    }
    

    如果打开开发人员工具,您是否在
    var retrieveLeadReq=new-XMLHttpRequest()
    行中遇到错误?如果是这样的话,这个错误是什么?我想我遇到的主要问题是关于请求的类型。正在实时评估该条件,因此异步请求不合适