【问题标题】:CRM 2011 - JavaScript - Where to set Business RequiredCRM 2011 - JavaScript - 在哪里设置业务需要
【发布时间】:2013-03-14 04:08:00
【问题描述】:

在表单中,如果选项集字段决策中的值被选择为拒绝,我们希望将拒绝原因设置为必需。我编写了一个 JS 函数,然后将其与字段 Decision 的 OnChange 相关联,并将 Reject Reason 字段设置为必需。

if (decisionOptionSetValue == 100000006 && decisionOptionSetText == "Reject") {
    Xrm.Page.getAttribute("new_rejectionreason").setRequiredLevel("required");
}

现在,上述工作正常,没有问题。

问题是,如果我打开同一条记录,我可以愉快地从拒绝原因字段 (new_rejectionreason) 中删除值,并且它不会引发错误,因为我的代码仅在我们有决定值的更改时才会触发在这种情况下,没有发生的选项集。

现在,在哪里进行检查以防止这些情况发生?

选项 1:我是否在 new_rejectionreason 字段上有一个 OnChange,以便我检查值是否已更改?

选项 2:我是否在保存表单之前将检查作为 OnSave 的一部分并阻止表单保存 (?) 并将此字段设置为必填

选项 3:我是否将检查设置为 OnLoad 并将字段 new_rejectionreason 设置为必填

还有其他选择吗?

【问题讨论】:

  • 如果您喜欢其中一个回复,请不要忘记将其标记为答案。我们喜欢那些绿色的复选标记... :)

标签: javascript dynamics-crm-2011


【解决方案1】:

在我看来,最好的选择是选项 3。因为您警告用户字段 new_rejectionreason 是必需的,并且不要等待保存表单来警告该字段。对于选项 1,您必须在 new_rejectionreason 中强制 onchange,这种方式并不容易理解为什么要强制 onchange。

另一个我不推荐但另一种方法是在插件中进行此验证并启动 InvalidPluginExecutionException 这会停止插件的执行并向用户发送消息。这仅供您参考,请勿在这种情况下使用此方法。

【讨论】:

    【解决方案2】:

    如果您不想让用户设置值,为什么不将该字段设为只读?因此,当他们更改决策字段的值时,请添加以下内容:

    Xrm.Page.ui.controls.get('new_rejectionreason').setDisabled(true);
    

    所以现在用户不能在不再次更改决策字段的情况下编辑值。

    编辑:我认为现在根据您的评论理解。我认为最简单的方法是添加额外的负载检查。

    function OnLoad() {
        var decisionValue = Xrm.Page.getAttribute('new_decision').getValue();
        if (decisionValue !== null) {
            Xrm.Page.getAttribute('new_rejectionreason').setRequiredLevel('required');
        }
    }
    

    因此,当您的页面加载时,它会检查 Decision 字段。如果它找到一个值,它就知道Reject Reason 字段是必需的,并将其标记为这样。

    然后,您需要做的就是修改 Decision 的 OnChange 处理程序,以便在删除值时取消设置所需的值。

    if (decisionOptionSetValue === 100000006 && decisionOptionSetText === 'Reject') {
        Xrm.Page.getAttribute('new_rejectionreason').setRequiredLevel('required');
    }
    else {
        Xrm.Page.getAttribute("new_rejectionreason").setRequiredLevel('none');
    }
    

    【讨论】:

    • 不能这样做,因为 new_rejectionreason 是一个选项集字段,因此,Decision 可以是 Reject 但用户始终可以将 Reject Reason 的值从值 1 更改为值 2 到 ...,他们只是不能将其设置回 NULL,除非他们将 Decision 字段的值更改为不等于 Reject 的值。
    • 谢谢,做了一个小的修改几乎相同 - 应该检查 decisionValue 的值 Reject 作为 OnLoad() 函数的一部分,如果是,请设置 Rejection Reason 为必需的。
    【解决方案3】:

    在状态设置为 rejected 但原因为空的情况下,我会简单地阻止保存实体。不知何故,我觉得根据另一个字段的值来设置一个字段是否为业务需要。

    【讨论】:

    • 最终是一样的,不是吗? 1)当字段 A 为空时,如果字段 B 设置为 X,则防止保存(实现您自己的、未标记的、自定义的必需逻辑)。 2)如果字段 B 设置为 X,则将字段 A 设置为必需
    • @glosrob 我猜是这样。但是我不愿意根据外部情况将字段同时作为业务必需和不必需的想法。感觉并不完全正确,但除了它让我的皮肤爬行之外,我无法争辩这一点。我将与我的 MVP 核实他认为最佳实践是什么。不过,使用其他方法令人耳目一新 - 这是肯定的。
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2017-08-11
    • 2011-08-18
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2015-08-15
    • 2011-08-02
    相关资源
    最近更新 更多