3

在表单中,如果选项集字段决策中的值被选择为拒绝,我们希望将拒绝原因设置为必需。我编写了一个 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 设置为必需

还有其他选择吗?

4

3 回答 3

3

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

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

于 2013-03-13T15:45:13.390 回答
3

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

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字段是必需的并将其标记为必需字段。

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

if (decisionOptionSetValue === 100000006 && decisionOptionSetText === 'Reject') {
    Xrm.Page.getAttribute('new_rejectionreason').setRequiredLevel('required');
}
else {
    Xrm.Page.getAttribute("new_rejectionreason").setRequiredLevel('none');
}
于 2013-03-13T16:03:29.987 回答
0

在状态设置为拒绝但原因为空的情况下,我只会阻止保存实体。不知何故,我感到不安将一个字段设置为业务需要或不取决于另一个字段中的值。

于 2013-03-13T20:08:00.210 回答