Dynamics 365 CRM:根据来自不同实体的状态显示/隐藏表单

时间:2018-11-27 12:42:10

标签: javascript dynamics-crm crm dynamics-crm-365

我正在使用CRM,并且为Win创建了两个新的Qualify状态。第一个状态为“已完成约会”,第二个状态为“硬件报价”。当您选择其中一项并限定销售线索时,销售线索的状态将更改为您选择的选项。

在“商机”表单中,我有一个带有部分和字段的选项卡,其中包括如果选择了“进行约会”和“引用的硬件”相同的字段。

我需要帮助的是JavaScript代码,我希望可以将其插入到表单/字段属性中的事件中,以在最初选择一个选项卡时隐藏另一个选项卡。

这是我一直在处理的粗略代码:

function showHideTabAndSection() {
    var statuscode = $("#statuscode").val();
    var showTab = false;
    var showSection = false;

    if (statuscode = 100000004) {
        showTab = true;
        showSection = true;
    }
    Xrm.Page.ui.tabs.get("TestTab1").setVisible(showTab);
    Xrm.Page.ui.tabs.get("TestTab1").sections.get("TestSection1").setVisible(showSection);
}

有人可以帮忙吗?谢谢。

4 个答案:

答案 0 :(得分:0)

确保“状态代码”与“ TestTab1”具有相同的格式或另一种形式。如果它们的格式不同,则必须检索它的值。

看到:JavaScript – OData Query

答案 1 :(得分:0)

在机会表单加载中,从当前机会记录中获取originatingleadid字段值,并使用它来检索statuscode以控制标签/部分的可见性。

建议您使用CRM REST Builder,然后从此处生成以下代码。如果您使用的是V9,则可以use web api进行同样的操作。

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/leads(<<originatingleadid of opportunity>>)?$select=statecode,statuscode", 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 result = JSON.parse(this.response);
            var statecode = result["statecode"];
            var statecode_formatted = result["statecode@OData.Community.Display.V1.FormattedValue"];
            var statuscode = result["statuscode"];
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send();

答案 2 :(得分:0)

让我们说,进行约会的值为1,引用的硬件的值为2。

function showHideTabAndSection() {
    var statuscode = Xrm.Page.getAttribute("statuscode").getValue();
    switch (statuscode) {
        case 1:
            Xrm.Page.ui.tabs.get("appointMadeTab").setVisible(true);
            Xrm.Page.ui.tabs.get("hardwareQuotedTab").setVisible(false);
            break;
        case 2:
            Xrm.Page.ui.tabs.get("appointMadeTab").setVisible(false);
            Xrm.Page.ui.tabs.get("hardwareQuotedTab").setVisible(true);
            break;
    }
}

希望有帮助。

答案 3 :(得分:0)

抱歉,很抱歉,您刚刚输入了一个简单的错字

if (statuscode = 100000004) {
   

如您所见,运算符应为'=='而不是'='

我想,这就是您的代码不起作用的原因。

要在运行时查找此类问题,请始终将此行添加到代码中 调试器;

如果您打开了Chrome的检查元素窗口,这将停止代码执行并调试代码。