【问题标题】:Dynamics 365 CRM: Show/Hide in forms based on Status from different EntityDynamics 365 CRM:根据不同实体的状态在表单中显示/隐藏
【发布时间】:2019-04-29 05:05:26
【问题描述】:

我在 CRM 中工作,并创建了两个新的 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);
}

有人可以帮忙吗?谢谢。

【问题讨论】:

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


    【解决方案1】:

    确保“statuscode”与“TestTab1”在同一表格中或在另一个表格中。如果它们采用不同的形式,您必须检索它的值。

    看到那个:JavaScript – OData Query

    【讨论】:

    • 是的,它们采用不同的形式。我想要的状态代码来自 Lead 实体,而我希望隐藏字段的表单位于 Opportunity 实体中。
    • 因此您需要使用 OData 从潜在客户实体中检索状态代码的值。
    【解决方案2】:

    在机会表单加载中,从当前机会记录中获取 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();
    

    【讨论】:

      【解决方案3】:

      假设,Appointment Made 的值为 1,Hardware Quoted 的值为 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;
          }
      }
      

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        兄弟,很抱歉告诉你,你只是打错字了

        if (statuscode = 100000004) {
           
        

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

        我猜,这就是你的代码不起作用的原因。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-21
          • 1970-01-01
          • 2021-03-18
          • 2019-02-17
          • 2018-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多