在Dynamics 365 9.0中,有关如何访问表单属性和控件进行了很大的更改-代替Xrm.Page命名空间,我们应该将executionContext传递给函数,并使用formContext函数获取getFormContext()。一切正常,使用此方法我从未遇到任何问题。

但是,我还没有弄清楚如何正确访问功能区中调用的formContext。该文档说,这应该非常简单:

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


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

我也知道我可以使用Xrm.Page,并且它可以工作(至少目前为止……),但是我想知道,如何使用9.0版中的最新指南来做到这一点。

更新1:

根据Scott的建议和this article,我将PrimaryControl传递给了Ribbon命令,但不幸的是,该参数的类型为Mscrm.FormControlLite,并且没有getAttribute函数或任何允许访问formContext的函数(至少我没有看不到任何有用的信息)。开发者工具的一些屏幕截图:
dynamics-crm - 如何在Dynamics 365 9.0的Ribbon命令中获取formContext-LMLPHP

因此,它看起来像某种形式的表示形式,但可能与formContext不相关(我假设如果从记录列表中调用功能区,则该项目可以是网格类型或类似的类型)

最佳答案

按照https://docs.microsoft.com/en-us/dynamics365/get-started/whats-new/customer-engagement/important-changes-coming#some-client-apis-are-deprecated,将其作为PrimaryControl参数传递。

dynamics-crm - 如何在Dynamics 365 9.0的Ribbon命令中获取formContext-LMLPHP

因此,如果将PrimaryControl作为第二个参数传递给这样的命令函数,则可以使用

arguments[1].getAttribute(…)

08-19 23:43