在表单中,如果选项集字段Decision中的值被选为Reject,我们希望将Reject Reason设置为Required。我编写了一个JS函数,然后将其与字段Decision的OnChange相关联,并将Reject Reason字段设置为Required。
if (decisionOptionSetValue == 100000006 && decisionOptionSetText == "Reject") {
Xrm.Page.getAttribute("new_rejectionreason").setRequiredLevel("required");
}
现在,上述工作正常,没有任何问题。
问题是,如果我打开相同的记录,我可以愉快地从拒绝原因字段(new_rejectionreason)中删除该值,并且它不会抛出错误,因为我的代码仅在我们更改了Decision的值时触发选项集,在这种情况下,没有发生。
现在,在哪里检查以防止这些?
选项1 :我是否在new_rejectionreason字段上有一个OnChange,以便检查该值是否已更改?
选项2 :在保存表单并阻止表单保存(?)并将此字段设置为必需之前,我是否将On Check作为OnSave的一部分进行检查
选项3 :我是否将检查作为OnLoad并将字段new_rejectionreason设置为必需
还有其他选择吗?
答案 0 :(得分:3)
在我看来,最好的选择是选项3.因为你警告用户需要字段new_rejectionreason并且不要等待保存表单警告。对于选项1,您必须在new_rejectionreason中强制进行onchange,这种方式以后不易理解为什么强制onchange。
我不推荐的另一个选项是另一种方法是在插件中执行此验证并启动InvalidPluginExecutionException,这将停止插件的执行并向用户发送消息。这仅适用于您的信息,请不要在这种情况下使用此方法。
答案 1 :(得分: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
字段是必需的,并将其标记为。
然后,您需要修改Decision
的OnChange处理程序,以便在删除值时取消设置所需的值。
if (decisionOptionSetValue === 100000006 && decisionOptionSetText === 'Reject') {
Xrm.Page.getAttribute('new_rejectionreason').setRequiredLevel('required');
}
else {
Xrm.Page.getAttribute("new_rejectionreason").setRequiredLevel('none');
}
答案 2 :(得分:0)
我会在状态设置为被拒绝但条件为空的情况下阻止保存实体。不知何故,我觉得根据另一个领域的价值设置一个字段作为业务需要与否感到不安。