Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动

    作为Dynamics CRM的开发来说,对BPF一定不陌生,BPF是好几年前推出的功能,UI是下图这样的

Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动_第1张图片

   在进行BPF的开发时,我们会遇到这样的需求,对于当前Stage的移动进行一些校验,只有满足条件时才能继续move to next stage,这个需求应该来说是非常普遍的

   实现上述需求的方式有两种,一种简单的是通过On-demand的Workflow来进行配置实现, 不需要进行代码的开发,但这种配置的前提是校验条件能够用Workflow里的condition配出来,比如上述截图中Account Number等于某个值时,就不能移动到下一个stage

Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动_第2张图片

   设置完WorkFlow后在BPF的stage中选择这个WorkFlow就行了

Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动_第3张图片

  注意下右侧的Trigger那栏,是何时触发这个WorkFlow,Stage Entry就是move to previous stage, Stage Exit就是move to next stage

Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动_第4张图片

  下图就是点击next stage后触发WorkFlow的效果,BPF还是停留在当前stage

Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动_第5张图片

    那如果是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"

Dynamics 365 如何阻止BusineeeProcessFlow向下一个或者上一个Stage移动_第6张图片  

  上文提到的是两种UI层面的控制办法,当然也可以从后台Plugin中进行校验

 

 

你可能感兴趣的:(Microsoft,Dynamics,365,Dynamics,365,BPF,Stage)