【轉】【金蝶K3Cloud】 在插件中調用工作流


在插件中可以調用ApprovalAssignmentServiceHelper.SubmitApprovalItems()進行工作流審批。SubmitApprovalItems()需要一個AssignmentContext參數,而AssignmentContext屬性非常多,構造起來很麻煩。
因此我寫了兩個方法,將SubmitApprovalItems()再次封裝,傳入幾個簡單參數,就能完成審批。

 

  1   /// <summary>
  2         /// 審批單據,actionName為空時,自動尋找第一個同意審批項;
  3         /// 有多個類型為通過的審批項時,可用actionName指定審批項,如actionName="審批通過"
  4         /// </summary>
  5         /// <param name="formId">單據FormId</param>
  6         /// <param name="pKValue">單據主鍵</param>
  7         /// <param name="receiverName">處理人</param>
  8         /// <param name="disposition">審批意見</param>
  9         /// <param name="isApprovalFlow">是否為審批流</param>
 10         public void ApproveBill(string formId, string pKValue, string receiverName, string disposition, bool isApprovalFlow = false, string actionName = null)
 11         {
 12             List<AssignResult> 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         /// <summary>
 19         /// 駁回單據,actionName為空時,自動尋找一個駁回審批項;
 20         /// 有多個類型為駁回的審批項時(如駁回、打回發起人),可用actionName指定審批項,如actionName="打回發起人"
 21         /// </summary>
 22         public void RejectBill(string formId, string pKValue, string receiverName, string disposition, bool isApprovalFlow = false, string actionName = null)
 23         {
 24             List<AssignResult> 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<AssignResult> 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<SqlParam>
 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<DataRow>().FirstOrDefault();
 48             if (row == null) return new List<AssignResult> { };
 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<SqlParam>
 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<DataRow>().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>() { _approvalItem },
104                     Info = businessInfo,
105                     Option = option
106                 };
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             else
121             {
122                 ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext()
123                 {
124                     ApprovalItems = new List<ApprovalItem>() { _approvalItem },
125                     Info = businessInfo,
126                     Option = option
127                 };
128                 assignCtx.NextActHandler = null;
129                 assignCtx.RejectReturn = false;
130                 assignCtx.ActivityInstance = _activityInstance;
131                 AssignmentServiceHelper.SubmitApprovalItem(Context, assignCtx);
132             }
133         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM