博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】【金蝶K3Cloud】 在插件中调用工作流
阅读量:4628 次
发布时间:2019-06-09

本文共 7330 字,大约阅读时间需要 24 分钟。

在插件中可以调用ApprovalAssignmentServiceHelper.SubmitApprovalItems()进行工作流审批。SubmitApprovalItems()需要一个AssignmentContext参数,而AssignmentContext属性非常多,构造起来很麻烦。

因此我写了两个方法,将SubmitApprovalItems()再次封装,传入几个简单参数,就能完成审批。

 

1   ///   2         /// 审批单据,actionName为空时,自动寻找第一个同意审批项;  3         /// 有多个类型为通过的审批项时,可用actionName指定审批项,如actionName="审批通过"  4         ///   5         /// 单据FormId  6         /// 单据主键  7         /// 处理人  8         /// 审批意见  9         /// 是否为审批流 10         public void ApproveBill(string formId, string pKValue, string receiverName, string disposition, bool isApprovalFlow = false, string actionName = null) 11         { 12             List
assignResults = GetApproveActions(formId, pKValue, receiverName); 13 AssignResult approvalAssignResults = assignResults.FirstOrDefault(r => r.ApprovalType == AssignResultApprovalType.Forward); 14 if (approvalAssignResults == null) throw new Exception("未找到审批项。"); 15 SubmitWorkflow(formId, pKValue, receiverName, approvalAssignResults.Id, disposition, isApprovalFlow); 16 } 17 18 ///
19 /// 驳回单据,actionName为空时,自动寻找一个驳回审批项; 20 /// 有多个类型为驳回的审批项时(如驳回、打回发起人),可用actionName指定审批项,如actionName="打回发起人" 21 /// 22 public void RejectBill(string formId, string pKValue, string receiverName, string disposition, bool isApprovalFlow = false, string actionName = null) 23 { 24 List
assignResults = GetApproveActions(formId, pKValue, receiverName); 25 if (!string.IsNullOrEmpty(actionName)) 26 assignResults = assignResults.Where(r => r.Name.Any(p => p.Value == actionName)).ToList(); 27 else 28 assignResults = assignResults.OrderBy(r => r.Name.Any(p => p.Value == "打回发起人")).ToList(); 29 AssignResult rejectAssignResults = assignResults.FirstOrDefault(r => r.ApprovalType == AssignResultApprovalType.Reject); 30 if (rejectAssignResults == null) throw new Exception("未找到驳回审批项。"); 31 SubmitWorkflow(formId, pKValue, receiverName, rejectAssignResults.Id, disposition, isApprovalFlow); 32 } 33 34 private List
GetApproveActions(string formId, string pKValue, string receiverName) 35 { 36 DataSet ds = DBUtils.ExecuteDataSet(this.Context, @"select b.FASSIGNID,b.FAPPROVALASSIGNID 37 from t_wf_assign a 38 join T_WF_APPROVALASSIGN b on a.fassignid=b.fassignid 39 where b.Fobjecttypeid=@FormID 40 and b.Fkeyvalue=@pKValue and a.FSTATUS=0 and a.FRECEIVERNAMES=@FRECEIVERNAMES", 41 new List
42 { 43 new SqlParam("@FormID", DbType.String, formId), 44 new SqlParam("@pKValue", DbType.String, pKValue), 45 new SqlParam("@FRECEIVERNAMES", DbType.String, receiverName) 46 }); 47 DataRow row = ds.Tables[0].Rows.Cast
().FirstOrDefault(); 48 if (row == null) return new List
{ }; 49 50 string assignId = row["FASSIGNID"].ToString(); 51 string approvalAssignId = row["FAPPROVALASSIGNID"].ToString(); 52 string _approvalItemId = AssignmentServiceHelper.OpenApprovalItem(this.Context, this.Context.UserId, assignId, false); 53 var _approvalItem = AssignmentServiceHelper.GetApprovalItemById(this.View.Context, _approvalItemId); 54 return _approvalItem.Actions.ToList(); 55 } 56 57 58 private void SubmitWorkflow(string formId, string pKValue, string receiverName, string actionResult, string disposition, bool isApprovalFlow) 59 { 60 DataSet ds = DBUtils.ExecuteDataSet(this.Context, @"select b.FASSIGNID,b.FAPPROVALASSIGNID,a.FACTINSTID 61 from t_wf_assign a 62 join T_WF_APPROVALASSIGN b on a.fassignid=b.fassignid 63 where b.Fobjecttypeid=@FormID 64 and b.Fkeyvalue=@pKValue and a.FSTATUS=0 and a.FRECEIVERNAMES=@FRECEIVERNAMES", 65 new List
66 { 67 new SqlParam("@FormID", DbType.String, formId), 68 new SqlParam("@pKValue", DbType.String, pKValue), 69 new SqlParam("@FRECEIVERNAMES", DbType.String, receiverName) 70 }); 71 DataRow row = ds.Tables[0].Rows.Cast
().FirstOrDefault(); 72 if (row == null) throw new Exception("未找到待办任务"); 73 74 string assignId = row["FASSIGNID"].ToString(); 75 string approvalAssignId = row["FAPPROVALASSIGNID"].ToString(); 76 string _approvalItemId = AssignmentServiceHelper.OpenApprovalItem(this.Context, this.Context.UserId, assignId, false); 77 FormMetadata formMetadata = MetaDataServiceHelper.GetFormMetaData(this.Context, formId); 78 DynamicObject ObjData = BusinessDataServiceHelper.LoadSingle(this.Context, pKValue, formMetadata.BusinessInfo.GetDynamicObjectType()); 79 BusinessInfo businessInfo = formMetadata.BusinessInfo; 80 81 var _approvalItem = AssignmentServiceHelper.GetApprovalItemById(this.View.Context, _approvalItemId); 82 if (_approvalItem == null) throw new Exception("待办任务所在的流程实例不在运行中,不能进行处理!"); 83 _approvalItem.ObjData = ObjData; 84 _approvalItem.ReceiverPostId = 0; 85 _approvalItem.ActionResult = actionResult; 86 _approvalItem.Disposition = disposition.ToString(); 87 AssignResult assignResult = _approvalItem.Actions != null ? _approvalItem.Actions.FirstOrDefault(i => i.Id == actionResult) : null; 88 AssignResultApprovalType approvalType = assignResult != null ? assignResult.ApprovalType : AssignResultApprovalType.None; 89 _approvalItem.ActionResultType = approvalType; 90 _approvalItem.Status = ApprovalItemStatus.Completed; 91 DateTime timeNow = TimeServiceHelper.GetSystemDateTime(this.Context); 92 _approvalItem.CompletedTime = timeNow; 93 94 ObjectActivityInstance _activityInstance = AssignmentServiceHelper.ConvertActivityModel( 95 this.Context, businessInfo, approvalAssignId, _approvalItem); 96 97 var option = OperateOption.Create(); 98 99 if (isApprovalFlow)100 {101 ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext()102 {103 ApprovalItems = new List
() { _approvalItem },104 Info = businessInfo,105 Option = option106 };107 assignCtx.NextActHandler = null;108 assignCtx.RejectReturn = false;109 assignCtx.ActivityInstance = _activityInstance;110 if (actionResult == AssignResultApprovalType.Reject.ToString())111 {112 string actInstId = row["FACTINSTID"].ToString();113 Kingdee.BOS.Workflow.App.Core.ProcInstService procInstService = new Kingdee.BOS.Workflow.App.Core.ProcInstService();114 var rejectActivityIds = procInstService.GetBackActInstList(this.Context, actInstId, true).Select(r => r.ActivityId);115 if (!rejectActivityIds.Any()) throw new Exception("无驳回节点");116 assignCtx.Target = rejectActivityIds.FirstOrDefault();117 }118 ApprovalAssignmentServiceHelper.SubmitApprovalItem(Context, assignCtx);119 }120 else121 {122 ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext()123 {124 ApprovalItems = new List
() { _approvalItem },125 Info = businessInfo,126 Option = option127 };128 assignCtx.NextActHandler = null;129 assignCtx.RejectReturn = false;130 assignCtx.ActivityInstance = _activityInstance;131 AssignmentServiceHelper.SubmitApprovalItem(Context, assignCtx);132 }133 }

 

转载于:https://www.cnblogs.com/jlz-s/p/9834866.html

你可能感兴趣的文章
mysql性能优化
查看>>
【SqlServer系列】语法定义符号解析
查看>>
Color Length UVA - 1625
查看>>
TLS/SSL
查看>>
zoj2319Beautiful People Dp
查看>>
图片加载 背景色块问题
查看>>
Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
查看>>
搭建git服务器
查看>>
iOS之UIDynamic UI动力学使用步骤
查看>>
poj 2498 动态规划
查看>>
Windows Phone 7中使用PhoneApplicationService类保存应用程序状态
查看>>
MySql数据库的下载和安装卸载
查看>>
JDBC接口核心的API
查看>>
双缓冲技术局部更新原理之派生自View
查看>>
删与改
查看>>
spi驱动无法建立spidev问题
查看>>
详解如何让Android UI设计性能更高效
查看>>
Django模板语言
查看>>
使用ssh和putty操控远程的linux server
查看>>
JavaScript 学习总结
查看>>