executionContext 与 primaryControl

executionContext vs primaryControl

我在两种情况下使用相同的代码时遇到问题:

  1. 从功能区按钮调用 revisionRequested,后者又调用 removeOptions
  2. 从 OnLoad 表单中,仅调用 removeOptions

下面的代码是我的解决方法,但我最初尝试的是将 primaryControl 参数从 revisionRequested 传递到 removeOptions,我在其中制作了 formContext = primaryControl 我得到一个错误。

    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 签名以用于从功能区使用。这两个签名当然不相同,并且在注册事件处理程序时从表单传递执行上下文只能选择将其作为第一个参数发送。

您所做的是在两个不同的地方使用可重用方法的有效解决方法,同时考虑了所有限制和平台设计。

讨论以加深理解。