作为Dynamics CRM的开发来说,对BPF一定不陌生,BPF是好几年前推出的功能,UI是下图这样的
在进行BPF的开发时,我们会遇到这样的需求,对于当前Stage的移动进行一些校验,只有满足条件时才能继续move to next stage,这个需求应该来说是非常普遍的
实现上述需求的方式有两种,一种简单的是通过On-demand的Workflow来进行配置实现, 不需要进行代码的开发,但这种配置的前提是校验条件能够用Workflow里的condition配出来,比如上述截图中Account Number等于某个值时,就不能移动到下一个stage
设置完WorkFlow后在BPF的stage中选择这个WorkFlow就行了
注意下右侧的Trigger那栏,是何时触发这个WorkFlow,Stage Entry就是move to previous stage, Stage Exit就是move to next stage
下图就是点击next stage后触发WorkFlow的效果,BPF还是停留在当前stage
那如果是WorkFlow无法实现的场景就需要使用JS来写, 这里用都一个API叫做addOnPreStageChange, 文档中的说明是该API仅在UCI下有效,但我在9.0的OP中试了没法用,所以只能是9.1以后的版本支持,下面是示例代码
-
function OnLoad(ExecutionContext) {
-
var objFormContext = ExecutionContext.getFormContext();
-
objFormContext.data.process.addOnPreStageChange(
function (ExecutionContext) {
-
var BPFArgs = ExecutionContext.getEventArgs();
-
if (BPFArgs.getDirection() ===
"Next") {
-
var objFormContext = ExecutionContext.getFormContext();
-
var accountNumber = objFormContext.getAttribute(
'accountnumber').getValue();
-
if (accountNumber !=
'123') {
-
BPFArgs.preventDefault();
-
Xrm.Navigation.openAlertDialog(
'test');
-
}
-
}
-
}
-
);
-
}
下图是切换到JavaScript后的效果,stage未动并且弹出提示信息,当然这个提示的内容和形式你可以自定义。上述的示例代码只用了move to next 也就是direction是"Next", 如果是move to previous direction就是"Previous"
上文提到的是两种UI层面的控制办法,当然也可以从后台Plugin中进行校验
转载:https://blog.csdn.net/woniu1104913/article/details/116267562