最近有个特殊的需求,客户想做二次审批,就是审批通过后,再走一次审批流程。最开始一想,这还不简单,审批通过后,直接把状态改成draft就完了,后来一试,发现一堆问题,比如第一次审批完后,界面是不允许修改的,直接改成draft就又可以修改了;再比如审批活动记录的查找以及死循环的问题等等。于是自己动手单独写了一个公用的再审批插件,下面介绍详细的实现步骤:

 

一、添加字段以控制再审批的次数

添加一个字段 new_approval_count, 再审批一次就把它加1。如果只要再审批一次,那么大于1就退出。

 

二、获取模板
                    ApproveTempleteHelper templetehelper = new ApproveTempleteHelper();
                    Entity approveTempleteEntity = templetehelper.GetApproveTemplete(service, importCurrentEntity.LogicalName);

+ ex.Message);
}
}

 

三、获取节点
                   ApproveTempleteNodeHelper nodehelper = new ApproveTempleteNodeHelper();
                    Entity approveNode = nodehelper.GetBeginNodeEntity(service, (Guid)approveTempleteEntity["crm_approve_templeteid"]);

 + ex.Message);
}
}

 

四、创建Instance
                    ApproveInstanceHelper instanceHelper = new ApproveInstanceHelper();
                    Guid instanceId = instanceHelper.CreateApproveInstance(service, approveTempleteEntity, billEntityReference);
                    EntityReference instanceReference = new EntityReference(ApproveInstanceSchemaName, instanceId);

 + ex.Message);
}
}

 

五、更新业务表Instance
                    BillHelper billHelper = new BillHelper();
                    billHelper.SetBillWFInstance(service, importCurrentEntity, instanceReference, (string)approveTempleteEntity["crm_wf_instanceid_field"], "new_approval_count", iCount);

 + ex.Message);
}
}

 

六、创建审批活动
                    CreateApproveActivityHelper helper = new CreateApproveActivityHelper();
                    helper.CreateBeginApproveActivity(service, approveTempleteEntity, approveNode, currentEntity, instanceReference, context.UserId, owner);

 + ex.Message);
}
}

 

最后记得注册这个插件时,要在step里加上一个image:Dynamic CRM 2013学习笔记(三十五)自定义审批流6 - 审批通过后,再审批 - 二次审批

 

 

[置顶]Dynamic CRM 2013学习笔记 系列汇总 -- 持续更新中

相关文章: