小编Paw*_*cki的帖子

如何在Dynamics 365 9.0的Ribbon命令中获取formContext

在Dynamics 365 9.0中,关于如何访问表单属性和控件(而不是Xrm.Page命名空间)有很大的变化,我们应该传递executionContext给函数并formContext使用getFormContext()函数.这工作正常,我使用这种方法从来没有问题.

但是我还没想出如何正确访问formContext从Ribbon调用的函数.文档说这应该是非常简单的:

https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/customize-dev/pass-dynamics-365-data-page-parameter-ribbon-actions

function myFunction(executionContext) {
    var formContext = executionContext.getFormContext();
    var focusFieldValue = formContext.ui.controls.get(PrimaryControlId).getAttribute().getValue();
}
Run Code Online (Sandbox Code Playgroud)

但它没有说如何传递executionContext给Ribbon功能.在普通函数中有一个复选框"将执行上下文作为第一个参数"但是功能区呢?我们可以将这些参数传递给这些函数,但它们只是所选记录的GUID,或所选记录的类型,甚至是对象列表,但如果参数等于,我在文档中找不到executionContext.有人已经解决了这个问题吗?

另外我知道我可以使用Xrm.Page并且它可以工作(至少现在......)但是我想知道如何使用版本9.0中的最新指南来完成它

更新1:

根据Scott的建议和本文,我将PrimaryControl传递给我的Ribbon命令但不幸的是,参数是类型的Mscrm.FormControlLite,它没有getAttribute函数或任何允许访问formContext的函数(至少我没有看到任何有用的东西).Developer工具的一些截图: 在此输入图像描述

因此它看起来像某种形式的表单,但可能与formContext无关(我假设如果从记录列表中调用Ribbon,则此项可以是网格类型或类似的东西)

dynamics-crm dynamics-crm-online dynamics-crm-365-v9

13
推荐指数
2
解决办法
1万
查看次数

Dynamics CRM 2013 Javascript升级

我们正在测试2013年至2016年Dynamics CRM的升级,以了解CRM升级后需要升级的自定义项.

我们有以下用于特定情况的Javascript网络资源.

function MyOnLoad()
{
   var pickListValue = Xrm.Page.getAttribute("field1").getValue();
   if (Xrm.Page.ui.getFormType() == 2 && pickListValue == 100000006)
   {
      var ddlNewField1 = document.getElementById("field1");
      if (ddlNewField1.addEventListener) { 
         ddlNewField1.addEventListener ("change", function () {MyOnChange();}, false);  
      }
      else {
         ddlNewField1.attachEvent('onchange',MyOnChange);
      }
   }
}

function MyOnChange()
{
   if (Xrm.Page.getAttribute("field1").getValue() == "100000006") {    
       Xrm.Page.getControl("field2").setVisible(false);     
       Xrm.Page.getAttribute("field2").setRequiredLevel("none");    
   }

// If the selected value is not Other, hide Specify, and set requirement to Not Required    
   else {    
        Xrm.Page.getControl("field2").setVisible(true);  
        Xrm.Page.getAttribute("field2").setRequiredLevel("required");
   }
}
Run Code Online (Sandbox Code Playgroud)

此代码在我们的Dynamics CRM 2013中运行良好,它旨在执行以下操作:

加载Lead表单时,如果FIELD1的值设置为特定值,它将显示第二个字段FIELD2并使其成为必需的业务.

这里棘手的部分是,如果第一个字段在表单加载时包含该特定值,则第二个字段仅可见.如果由于某种原因,表单加载期间第一个字段的值不同,即使您选择该特定值,第二个字段也不会显示.

所以要恢复:

  • 在Form Load上永远不会显示FIELD2 …

javascript microsoft-dynamics dynamics-crm dynamics-crm-2013 dynamics-crm-2016

1
推荐指数
1
解决办法
122
查看次数