dynamics-crm - executionContext 与 primaryControl
问题描述
我在两种情况下使用相同的代码时遇到问题:
- 从功能区按钮调用revisionRequested依次调用removeOptions和
- 从 OnLoad 表单中,仅调用removeOptions。
下面的代码是我的工作,但我最初尝试的是将primaryControl
参数从我制作的formContext = primaryControlrevisionRequested
传递给我得到了一个错误。removeOptions
function revisionRequested(primaryControl) {
var formContext = primaryControl;
formContext.getAttribute("statuscode").setValue(100000009); // Revision Requested
removeOptions(0, primaryControl);
Xrm.Navigation.openAlertDialog('Your revision request has been been submitted');
}
function removeOptions(executionContext, primaryControl) {
var formContext = null;
executionContext == 0 ? formContext = primaryControl : formContext = executionContext.getFormContext();
var statusCode = formContext.getAttribute("statuscode").getText();
var statusControl = formContext.getControl("header_statuscode");
if (Xrm.Page.ui.getFormType() !== 1 && statusCode.includes('Revision')) {
statusControl.removeOption(1);
statusControl.removeOption(100000000);
statusControl.removeOption(100000001);
statusControl.removeOption(100000002);
statusControl.removeOption(100000003);
statusControl.removeOption(100000003);
statusControl.removeOption(100000004);
statusControl.removeOption(100000005);
statusControl.removeOption(100000006);
statusControl.removeOption(100000007);
statusControl.removeOption(100000008);
}
}
解决方案
我相信您想要的是 JavaScript 中removeOptions
方法的多态性,一个带有executionContext
从表单加载使用的签名,另一个带有primaryControl
从功能区使用的签名。这两个签名当然不相同,并且在注册事件处理程序时从表单传递执行上下文只能选择将其作为第一个参数发送。
您所做的是有效的解决方法,可以在两个不同的地方使用可重用方法,并考虑所有限制和平台设计。
阅读此讨论以获得更多理解。
推荐阅读
- ruby-on-rails-5 - Rspec 应该 AttributeDoesNotExistError
- yammer - Yammer API 根据组 ID #yammer 仅获取我的消息
- vb.net - 部分类继承基类
- javascript - 如何在非 Promise 函数中测试 Promise 回调?
- jenkins - 减少 Jenkinsfile 的缩进级别
- c++ - “程序以退出代码结束:0”出现在我的输出开头?
- php - 使用传入对象更新时出现重复条目错误
- apache-camel - 使用并行处理的路由异常
- javascript - 服务器/客户端如何知道对方已断开连接
- google-cloud-vision - 如何强制谷歌云视觉使用特定的字符集?