/// <summary> /// 提交工作项 /// </summary> /// <param name="workItemId">工作项ID</param> /// <param name="approval">审批结果</param> /// <param name="commentText">审批意见</param> /// <param name="userId">处理人</param> public void SubmitItem(string workItemId, OThinker.Data.BoolMatchValue approval, string commentText, string userId) { //Console.Write("开始提交工作项"); // 获取工作项 OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(workItemId); OThinker.H3.Instance.InstanceContext instance = this.Engine.InstanceManager.GetInstanceContext(item.InstanceId); // 添加意见 this.AppendComment(instance, item, OThinker.Data.BoolMatchValue.Unspecified, commentText); // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( item.ObjectID, userId, OThinker.H3.WorkItem.AccessPoint.ExternalSystem, null, approval, commentText, null, OThinker.H3.WorkItem.ActionEventType.Forward, (int)OThinker.H3.Controllers.SheetButtonType.Submit); // 需要通知实例事件管理器结束事件 OThinker.H3.Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, approval, false, approval, true, null); this.Engine.InstanceManager.SendMessage(endMessage); }
/// <summary> /// 结束工作任务 /// </summary> /// <param name="MvcPost">MVC表单传递过来的值</param> /// <param name="Approval">审核结果</param> /// <param name="ActionEventType">事件类型</param> /// <param name="ActionButtonType">按钮类型</param> public void ForwardWorkItem( List <DataItemParam> paramList, string code, string schemaCode, string instanceId, string workItemCode) { OThinker.H3.Instance.InstanceContext ic = this.Engine.InstanceManager.GetInstanceContext(instanceId); OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(schemaCode); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject(Engine, schema, code); OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(workItemCode); bo.ObjectID = ic.BizObjectId; bo.Load();//装载流程数据; if (paramList != null) { // 这里可以在创建流程的时候赋值 foreach (DataItemParam param in paramList) { if (bo.Schema.ContainsField(param.ItemName)) { bo[param.ItemName] = param.ItemValue; } } } bo.Update(); if (!string.IsNullOrEmpty(workItemCode)) { // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( workItemCode, code, OThinker.H3.WorkItem.AccessPoint.ExternalSystem, null, OThinker.Data.BoolMatchValue.True, string.Empty, null, OThinker.H3.WorkItem.ActionEventType.Forward, (int)OThinker.H3.Controllers.SheetButtonType.Submit); // 需要通知实例事件管理器结束事件 Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( Messages.MessageEmergencyType.Normal, instanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.True, false, OThinker.Data.BoolMatchValue.True, true, null); this.Engine.InstanceManager.SendMessage(endMessage); } }
/// <summary> /// 批量通过 /// </summary> /// <param name="WorkItemIDs"></param> /// <param name="CommentText"></param> /// <returns></returns> private string SubmitWorkItems(string[] WorkItemIDs, string CommentText) { string errors = null; foreach (string itemId in WorkItemIDs) { OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(itemId); if (item == null || !item.IsUnfinished) { continue; } if (item.BatchProcessing == false) { errors += item.DisplayName + ";"; continue; } // 添加意见 this.AppendComment(item, OThinker.Data.BoolMatchValue.True, CommentText); // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( itemId, this.UserValidator.UserID, WorkItem.AccessPoint.Batch, //null, null, OThinker.Data.BoolMatchValue.True, CommentText, null, WorkItem.ActionEventType.Forward, (int)SheetButtonType.Submit); // 需要通知实例事件管理器结束事件 Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.True, false, OThinker.Data.BoolMatchValue.True, true, null); this.Engine.InstanceManager.SendMessage(endMessage); } return(errors); }
/// <summary> /// 提交工作项 /// </summary> /// <param name="workflowCode"></param> /// <param name="instanceId"></param> /// <param name="workItemId"></param> /// <param name="approval"></param> /// <param name="commentText"></param> /// <param name="userId"></param> /// <param name="values"></param> /// <returns></returns> private BPMServiceResult SubmitItem(string workflowCode, string instanceId, string workItemId, OThinker.Data.BoolMatchValue approval, string commentText, string userId, List <DataItemParam> values) { BPMServiceResult result = new BPMServiceResult(); try { string user = GetUserIDByCode(userId); if (user == null) { return(new BPMServiceResult(false, "流程启动失败,用户{" + userId + "}不存在。")); } OThinker.H3.WorkflowTemplate.PublishedWorkflowTemplate workflowTemplate = Engine.WorkflowManager.GetDefaultWorkflow(workflowCode); InstanceContext ic = Engine.InstanceManager.GetInstanceContext(instanceId); if (ic == null) { return(new BPMServiceResult(false, "InstanceID错误,此ID在H3系统中不存在,请检查")); } OThinker.H3.DataModel.BizObjectSchema schema = Engine.BizObjectManager.GetPublishedSchema(workflowTemplate.BizObjectSchemaCode); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject(Engine.Organization, Engine.MetadataRepository, Engine.BizObjectManager, null, schema, user); bo.ObjectID = ic.BizObjectId; bo.Load(); foreach (DataItemParam value in values) { OThinker.H3.DataModel.PropertySchema property = schema.GetProperty(value.ItemName); if (property.LogicType == OThinker.H3.Data.DataLogicType.BizObjectArray) { var t = new List <OThinker.H3.DataModel.BizObject>(); foreach (List <DataItemParam> list in (IEnumerable)value.ItemValue) { var m = new OThinker.H3.DataModel.BizObject(Engine.Organization, Engine.MetadataRepository, Engine.BizObjectManager, null, property.ChildSchema, bo.OwnerId); foreach (DataItemParam dataItem in list) { if (m.Schema.ContainsField(dataItem.ItemName)) { m.SetValue(dataItem.ItemName, dataItem.ItemValue); } } t.Add(m); } bo[value.ItemName] = t.ToArray(); } else if (bo.Schema.ContainsField(value.ItemName)) { bo[value.ItemName] = value.ItemValue; } } bo.Update(); // 获取工作项 OThinker.H3.WorkItem.WorkItem item = Engine.WorkItemManager.GetWorkItem(workItemId); OThinker.H3.Instance.InstanceContext instance = Engine.InstanceManager.GetInstanceContext(item.InstanceId); // 结束工作项 Engine.WorkItemManager.FinishWorkItem(item.ObjectID, userId, OThinker.H3.WorkItem.AccessPoint.ExternalSystem, null, approval, commentText, null, OThinker.H3.WorkItem.ActionEventType.Forward, (int)OThinker.H3.Controllers.SheetButtonType.Submit); // 需要通知实例事件管理器结束事件 OThinker.H3.Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage(OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, approval, false, approval, true, null); Engine.InstanceManager.SendMessage(endMessage); result = new BPMServiceResult(true, "", null, "流程实例启动成功!", ""); } catch (Exception ex) { result = new BPMServiceResult(false, "流程实例启动失败!错误:" + ex.Message); } return(result); }
/// <summary> /// 驳回工作任务 /// </summary> /// <param name="userId"></param> /// <param name="workItemId"></param> /// <param name="commentText"></param> /// <returns></returns> public bool ReturnItem(string userId, string workItemId, string commentText) { //Console.Write("不回"); OThinker.Organization.User user = this.Engine.Organization.GetUnit(userId) as OThinker.Organization.User; if (user == null) { return(false); } // 获取工作项 OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(workItemId); OThinker.H3.Instance.InstanceContext context = this.Engine.InstanceManager.GetInstanceContext(item.InstanceId); // ToKen OThinker.H3.Instance.IToken Token = context.GetToken(item.TokenId); if (Token.PreTokens == null) { return(false); } int PreToken = int.Parse(Token.PreTokens[0].ToString()); OThinker.H3.Instance.IToken PreToken1 = context.GetToken(PreToken); string activityName = PreToken1.Activity; // 添加意见 this.AppendComment(context, item, OThinker.Data.BoolMatchValue.False, commentText); // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( item.ObjectID, user.ObjectID, OThinker.H3.WorkItem.AccessPoint.ExternalSystem, null, OThinker.Data.BoolMatchValue.False, commentText, null, OThinker.H3.WorkItem.ActionEventType.Backward, (int)OThinker.H3.Controllers.SheetButtonType.Return); // 准备触发后面Activity的消息 OThinker.H3.Messages.ActivateActivityMessage activateMessage = new OThinker.H3.Messages.ActivateActivityMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, activityName, OThinker.H3.Instance.Token.UnspecifiedID, null, new int[] { item.TokenId }, false, OThinker.H3.WorkItem.ActionEventType.Backward); // 通知该Activity已经完成 OThinker.H3.Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.False, true, OThinker.Data.BoolMatchValue.False, false, activateMessage); this.Engine.InstanceManager.SendMessage(endMessage); return(true); }
/// <summary> /// 批量拒绝 /// </summary> /// <param name="WorkItemIDs"></param> /// <param name="CommentText"></param> /// <returns></returns> private string ReturnWorkItems(string[] WorkItemIDs, string CommentText) { string errors = null; foreach (string itemId in WorkItemIDs) { WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(itemId); if (item == null || !item.IsUnfinished) { continue; } if (item.BatchProcessing == false) { errors += item.DisplayName + ";"; continue; } WorkflowTemplate.PublishedWorkflowTemplate workflow = GetWorkflowTemplate(item.WorkflowCode, item.WorkflowVersion); // 添加意见 this.AppendComment(item, OThinker.Data.BoolMatchValue.True, CommentText); // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( item.ObjectID, this.UserValidator.UserID, H3.WorkItem.AccessPoint.ExternalSystem, //null, null, OThinker.Data.BoolMatchValue.False, CommentText, null, H3.WorkItem.ActionEventType.Backward, (int)SheetButtonType.Return); // 准备触发后面Activity的消息 OThinker.H3.Messages.ActivateActivityMessage activateMessage = new OThinker.H3.Messages.ActivateActivityMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, workflow.StartActivityCode, OThinker.H3.Instance.Token.UnspecifiedID, null, new int[] { item.TokenId }, false, H3.WorkItem.ActionEventType.Backward); // 通知该Activity已经完成 OThinker.H3.Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.False, true, OThinker.Data.BoolMatchValue.False, false, activateMessage); this.Engine.InstanceManager.SendMessage(endMessage); } return(errors); }
public bool ReturnItem(string userId, string workItemId, string activityCode, string SchemaCode, double xbzjye, string state, DateTime bzjyedysj, string userName, string PassState, double yzzfbzj) { Organization.User user = this.Engine.Organization.GetUnit(userId) as Organization.User; if (user == null) { return(false); } // 获取工作项 OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(SchemaCode); OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(workItemId); OThinker.H3.Instance.InstanceContext context = this.Engine.InstanceManager.GetInstanceContext(item.InstanceId); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject(Engine, schema, userId); bo.ObjectID = context.BizObjectId; bo.Load(); //装载流程数据; if (bo.Schema.ContainsField("BZJYE")) //保证金余额 { bo["BZJYE"] = xbzjye; } if (bo.Schema.ContainsField("LCZT")) { bo["LCZT"] = state; } if (bo.Schema.ContainsField("BZJYEDYSJ")) { bo["BZJYEDYSJ"] = bzjyedysj; } if (bo.Schema.ContainsField("CWCLR")) { bo["CWCLR"] = userName; } if (bo.Schema.ContainsField("CWSPRID")) { bo["CWSPRID"] = userId; } //this.AppendComment(item.InstanceId, item, OThinker.Data.BoolMatchValue.Unspecified, "现保证金余额x钱,应再支付X保证金"); // 结束工作项 if (PassState == "TG") {//财务通过 this.Engine.WorkItemManager.FinishWorkItem( item.ObjectID, user.ObjectID, H3.WorkItem.AccessPoint.ExternalSystem, null, OThinker.Data.BoolMatchValue.True, string.Empty, null, H3.WorkItem.ActionEventType.Backward, (int)OThinker.H3.Controllers.SheetButtonType.Return); if (bo.Schema.ContainsField("CWSPYJDX")) { bo["CWSPYJDX"] = "通过"; } this.AppendComment(context, item, OThinker.Data.BoolMatchValue.True, "通过");//财务部通过后,显示通过 } else {//财务驳回 this.Engine.WorkItemManager.FinishWorkItem( item.ObjectID, user.ObjectID, H3.WorkItem.AccessPoint.ExternalSystem, null, OThinker.Data.BoolMatchValue.False, string.Empty, null, H3.WorkItem.ActionEventType.Backward, (int)OThinker.H3.Controllers.SheetButtonType.Return); var info = "现保证金余额" + string.Format("{0:N2}", xbzjye) + "元,应再支付" + string.Format("{0:N2}", yzzfbzj) + "保证金"; this.AppendComment(context, item, OThinker.Data.BoolMatchValue.False, info); if (bo.Schema.ContainsField("CWSPYJDX")) { bo["CWSPYJDX"] = "驳回"; } try { MessageClass ms = new MessageClass(); string sql = @"select distinct a.PARTICIPANT,b.code, d.objectid , d.code jxsuserCode, e.JXS,e.JXSCODE from Ot_Workitemfinished a join Ot_User b on a.PARTICIPANT = b.objectid join Ot_Instancecontext c on c.objectid = a.instanceid join OT_User d on d.objectid = c.ORIGINATOR join I_DealerLoan e on e.objectid = c.bizobjectid where ACTIVITYCODE='Activity3' and c.workFlowCode = 'DealerLoan' and instanceid='" + item.InstanceId + "'"; DataTable dt = OThinker.H3.Controllers.AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable(sql); string msstr1 = dt.Rows[0]["JXS"].ToString() + "(" + dt.Rows[0]["JXSCODE"].ToString() + ") 还需要支付<font color=\"red\">" + string.Format("{0:N2}", yzzfbzj) + "</font> 元 保证金金额才可以进行本次贷款申请,现保证金账户余额 " + string.Format("{0:N2}", xbzjye) + " 元"; string msstr2 = "您的账户还需要支付<font color=\"red\">" + string.Format("{0:N2}", yzzfbzj) + "</font> 元 保证金金额才可以进行本次贷款申请,现保证金账户余额 " + string.Format("{0:N2}", xbzjye) + "元"; if (dt != null && dt.Rows != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { ms.InsertMSG(dt.Rows[i]["PARTICIPANT"].ToString(), dt.Rows[i]["code"].ToString(), msstr1, true, 0, ""); } } ms.InsertMSG(dt.Rows[0]["objectid"].ToString(), dt.Rows[0]["jxsCode"].ToString(), msstr2, false, 0, ""); } catch (Exception e) { } } bo.Update(); // 准备触发后面Activity的消息 OThinker.H3.Messages.ActivateActivityMessage activateMessage = new OThinker.H3.Messages.ActivateActivityMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, activityCode, OThinker.H3.Instance.Token.UnspecifiedID, null, new int[] { item.TokenId }, false, H3.WorkItem.ActionEventType.Backward); // 通知该Activity已经完成 OThinker.H3.Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( OThinker.H3.Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.False, true, OThinker.Data.BoolMatchValue.False, false, activateMessage); this.Engine.InstanceManager.SendMessage(endMessage); return(true); }
/// <summary> /// 结束工作任务 /// </summary> public void ENDWorkItem(string UpdateUserId, string schemaCode, string workItemID, string STATE) { OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(workItemID); if (!string.IsNullOrEmpty(schemaCode)) { OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(schemaCode); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject(Engine, schema, UpdateUserId); OThinker.H3.Instance.InstanceContext ic = this.Engine.InstanceManager.GetInstanceContext(item.InstanceId); if (!string.IsNullOrEmpty(workItemID)) { bo.ObjectID = ic.BizObjectId; bo.Load();//装载流程数据; if (!string.IsNullOrEmpty(STATE)) { if (bo.Schema.ContainsField("LCZT")) { bo["LCZT"] = STATE; } if (bo.Schema.ContainsField("OperationStates")) { bo["OperationStates"] = STATE; } if (bo.Schema.ContainsField("states")) { bo["states"] = STATE; } } bo.Update(); } } // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( workItemID, UpdateUserId, OThinker.H3.WorkItem.AccessPoint.ExternalSystem, null, OThinker.Data.BoolMatchValue.True, string.Empty, null, OThinker.H3.WorkItem.ActionEventType.Forward, (int)OThinker.H3.Controllers.SheetButtonType.Submit); // 需要通知实例事件管理器结束事件 Messages.AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( Messages.MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.True, false, OThinker.Data.BoolMatchValue.True, true, null); this.Engine.InstanceManager.SendMessage(endMessage); }