在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的函数(至少我没有看不到任何有用的信息)。开发者工具的一些屏幕截图:因此,它看起来像某种形式的表示形式,但可能与formContext不相关(我假设如果从记录列表中调用功能区,则该项目可以是网格类型或类似的类型)
最佳答案
按照https://docs.microsoft.com/en-us/dynamics365/get-started/whats-new/customer-engagement/important-changes-coming#some-client-apis-are-deprecated,将其作为PrimaryControl参数传递。
因此,如果将PrimaryControl作为第二个参数传递给这样的命令函数,则可以使用
arguments[1].getAttribute(…)