飞道的博客

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

500人阅读  评论(0)

    作为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以后的版本支持,下面是示例代码


  
  1. function OnLoad(ExecutionContext) {
  2. var objFormContext = ExecutionContext.getFormContext();
  3. objFormContext.data.process.addOnPreStageChange( function (ExecutionContext) {
  4. var BPFArgs = ExecutionContext.getEventArgs();
  5. if (BPFArgs.getDirection() === "Next") {
  6. var objFormContext = ExecutionContext.getFormContext();
  7. var accountNumber = objFormContext.getAttribute( 'accountnumber').getValue();
  8. if (accountNumber != '123') {
  9. BPFArgs.preventDefault();
  10. Xrm.Navigation.openAlertDialog( 'test');
  11. }
  12. }
  13. }
  14. );
  15. }

    下图是切换到JavaScript后的效果,stage未动并且弹出提示信息,当然这个提示的内容和形式你可以自定义。上述的示例代码只用了move to next 也就是direction是"Next", 如果是move to previous direction就是"Previous"

  

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

 

 


转载:https://blog.csdn.net/woniu1104913/article/details/116267562
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场