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

时间:2013-09-10 08:55:57

标签: javascript dynamics-crm-2011

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

问题是我在实际流程开始之前验证了一些数据。 在Visual Ribbon中,我将SelectedControlSelectedItemIds作为参数传递,并且只在选择了一个记录时才启用该按钮。

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() );
    }
}

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声明。 是否缺少图书馆?

2 个答案:

答案 0 :(得分:1)

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

所以,实际上你需要做两件事之一:

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

  2. 选项2创建第二个函数,该函数接受recordId并将第一个元素传递给另一个函数。然后,您可以设置网格按钮来调用此函数。功能看起来像这样:

    function AutoQualifyMultiple(dialogId, typeName, recordIds, width, heigth)
    {
      AutoQualify(dialogId, typeName, recordIds[0], width, heigth);
    }

答案 1 :(得分:1)

我设法解决了这个问题。在Visual Ribbon编辑器中,我有一个启用规则,只有在选择了一个记录时才启用该按钮。 另一个激活规则,如果调用activateQuicksaleForLead,则SelectedControlSelectedItemIds参数。 该按钮需要该函数返回true才能启用。

function activateQuicksaleForLead(recordId) {
    function myBool() {
        this.value = true;
    }
    var active = new myBool();
    retrieveLeadStatus(recordId, active);
    return active.value;
}

retrieveLeadStatus通过对oData CRM webservice进行同步调用来检索值

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;
    }
}