public RestfulResult StartWorkflow_Base(string USER_CODE, string WORKFLOW_CODE, bool FINISH_START, string INSTANCE_ID, string PARAM_VALUES) { Engine.LogWriter.Write("Restful 服务,方法:StartWorkflow,参数:USER_CODE-->" + USER_CODE + ",WORKFLOW_CODE-->" + WORKFLOW_CODE + ",FINISH_START-->" + FINISH_START + ",INSTANCE_ID-->" + INSTANCE_ID + ",PARAM_VALUES-->" + JsonConvert.SerializeObject(PARAM_VALUES)); RestfulResult result = new RestfulResult(); Dictionary <string, object> listParams = JsonConvert.DeserializeObject <Dictionary <string, object> >(PARAM_VALUES); string workItemID, keyItem, errorMessage; workItemID = keyItem = errorMessage = string.Empty; try { #region 参数校验 OThinker.H3.WorkflowTemplate.PublishedWorkflowTemplate workflowTemplate = this.Engine.WorkflowManager.GetDefaultWorkflow(WORKFLOW_CODE); if (workflowTemplate == null) { result.INSTANCE_ID = ""; result.MESSAGE = "流程模板不存在,模板编码:" + WORKFLOW_CODE + "。"; result.STATUS = "0"; result.WORKFLOW_CODE = WORKFLOW_CODE; result.USER_CODE = USER_CODE; return(result); } // 查找流程发起人 OThinker.Organization.User user = this.Engine.Organization.GetUserByCode(USER_CODE); if (user == null) { result.INSTANCE_ID = ""; result.MESSAGE = "用户{" + USER_CODE + "}不存在。"; result.STATUS = "0"; result.WORKFLOW_CODE = WORKFLOW_CODE; result.USER_CODE = USER_CODE; return(result); } #endregion #region 流程实例ID为空:发起新流程 if (string.IsNullOrEmpty(INSTANCE_ID)) { OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(workflowTemplate.BizObjectSchemaCode); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject( this.Engine.Organization, this.Engine.MetadataRepository, this.Engine.BizObjectManager, null, schema, user.ObjectID, user.ParentID); if (listParams != null) { // 这里可以在创建流程的时候赋值 foreach (KeyValuePair <string, object> param in listParams) { OThinker.H3.DataModel.PropertySchema property = schema.GetProperty(param.Key); if (property == null) { continue; } SetItemValue(bo, property, param.Value); } } bo.Create(); // 创建流程实例 string InstanceId = this.Engine.InstanceManager.CreateInstance( bo.ObjectID, workflowTemplate.WorkflowCode, workflowTemplate.WorkflowVersion, null, null, user.UnitID, null, false, InstanceContext.UnspecifiedID, null, Token.UnspecifiedID); if (listParams != null) { // 这里可以在创建流程的时候赋值 foreach (KeyValuePair <string, object> param in listParams) { OThinker.H3.DataModel.PropertySchema property = schema.GetProperty(param.Key); if (property == null) { continue; } if (property.LogicType == DataLogicType.Comment) {// 审核意见 CommentParam comment = JsonConvert.DeserializeObject <CommentParam>(JsonConvert.SerializeObject(param.Value)); this.Engine.BizObjectManager.AddComment(new Comment() { BizObjectId = bo.ObjectID, BizObjectSchemaCode = schema.SchemaCode, InstanceId = InstanceId, Activity = workflowTemplate.StartActivityCode, TokenId = 1, Approval = OThinker.Data.BoolMatchValue.True, DataField = property.Name, UserID = user.ObjectID, UserName = user.Name, SignatureId = comment.SignatureId, Text = comment.Text }); } } } // 启动流程的消息 OThinker.H3.Messages.StartInstanceMessage startInstanceMessage = new OThinker.H3.Messages.StartInstanceMessage( MessageEmergencyType.Normal, InstanceId, workItemID, null, PriorityType.Normal, FINISH_START, null, false, OThinker.H3.Instance.Token.UnspecifiedID, null); Engine.InstanceManager.SendMessage(startInstanceMessage); result.INSTANCE_ID = InstanceId; result.MESSAGE = "流程实例启动成功!"; result.BIZOBJECTID = bo.ObjectID; result.STATUS = "2"; result.WORKFLOW_CODE = WORKFLOW_CODE; result.USER_CODE = USER_CODE; } #endregion #region 流程实例ID不为空:更新流程数据; else { InstanceContext ic = this.Engine.InstanceManager.GetInstanceContext(INSTANCE_ID); if (ic == null) { result.INSTANCE_ID = INSTANCE_ID; result.MESSAGE = "InstanceID错误,此ID在H3系统中不存在,请检查"; result.STATUS = "0"; result.WORKFLOW_CODE = WORKFLOW_CODE; result.USER_CODE = USER_CODE; return(result); } OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(workflowTemplate.BizObjectSchemaCode); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject( this.Engine.Organization, this.Engine.MetadataRepository, this.Engine.BizObjectManager, null, schema, user.ObjectID, user.ParentID); bo.ObjectID = ic.BizObjectId; bo.Load();//装载流程数据; if (listParams != null) { // 这里可以在创建流程的时候赋值 foreach (KeyValuePair <string, object> param in listParams) { OThinker.H3.DataModel.PropertySchema property = schema.GetProperty(param.Key); if (property == null) { continue; } SetItemValue(bo, property, param.Value); } } bo.Update(); #region 提交当前任务,往下流转 if (FINISH_START) { string sql = "SELECT ObjectID FROM OT_WorkItem WHERE InstanceId='{0}' ORDER BY TokenId desc"; sql = string.Format(sql, INSTANCE_ID); string workItemId = this.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteScalar(sql) + string.Empty; if (workItemId != "") { // 获取工作项 OThinker.H3.WorkItem.WorkItem item = this.Engine.WorkItemManager.GetWorkItem(workItemId); // 结束工作项 this.Engine.WorkItemManager.FinishWorkItem( item.ObjectID, user.UnitID, OThinker.H3.WorkItem.AccessPoint.ExternalSystem, null, OThinker.Data.BoolMatchValue.True, string.Empty, null, OThinker.H3.WorkItem.ActionEventType.Forward, 11); // 需要通知实例事件管理器结束事件 AsyncEndMessage endMessage = new OThinker.H3.Messages.AsyncEndMessage( MessageEmergencyType.Normal, item.InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.True, false, OThinker.Data.BoolMatchValue.True, true, null); this.Engine.InstanceManager.SendMessage(endMessage); } } #endregion result.INSTANCE_ID = INSTANCE_ID; result.MESSAGE = "流程实例启动成功!(更新数据项的值)"; result.BIZOBJECTID = ic.BizObjectId; result.STATUS = "2"; result.WORKFLOW_CODE = WORKFLOW_CODE; result.USER_CODE = USER_CODE; } #endregion } catch (Exception ex) { result = new RestfulResult(); result.INSTANCE_ID = ""; result.BIZOBJECTID = ""; result.MESSAGE = "接口异常:" + ex.ToString(); result.STATUS = "0"; result.WORKFLOW_CODE = WORKFLOW_CODE; result.USER_CODE = USER_CODE; } return(result); }
public System.Web.Mvc.ActionResult StartWorkflow(string appId, string pwd, string userCode, string workflowCode, bool finishStart, string paramValues) { BPMServiceResult result = new BPMServiceResult(); List<DataItemParam> listParams = JSSerializer.Deserialize<List<DataItemParam>>(paramValues); string workItemID, keyItem, errorMessage; workItemID = keyItem = errorMessage = string.Empty; try { OThinker.H3.WorkflowTemplate.PublishedWorkflowTemplate workflowTemplate = this.Engine.WorkflowManager.GetDefaultWorkflow(workflowCode); if (workflowTemplate == null) { result = new BPMServiceResult(false, "流程模板不存在,模板编码:" + workflowCode + "。"); return Json(result); } // 查找流程发起人 OThinker.Organization.User user = this.Engine.Organization.GetUserByCode(userCode) as OThinker.Organization.User; if (user == null) { result = new BPMServiceResult(false, "用户{" + userCode + "}不存在。"); return Json(result); } OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(workflowTemplate.BizObjectSchemaCode); OThinker.H3.DataModel.BizObject bo = new OThinker.H3.DataModel.BizObject( this.Engine.Organization, this.Engine.MetadataRepository, this.Engine.BizObjectManager, null, schema, user.ObjectID, user.ParentID); if (listParams != null) { // 这里可以在创建流程的时候赋值 foreach (DataItemParam param in listParams) { OThinker.H3.DataModel.PropertySchema property = schema.GetProperty(param.ItemName); if (property == null) continue; SetItemValue(bo, property, param.ItemValue); } } bo.Create(); // 创建流程实例 string InstanceId = this.Engine.InstanceManager.CreateInstance( bo.ObjectID, workflowTemplate.WorkflowCode, workflowTemplate.WorkflowVersion, null, null, user.UnitID, null, false, InstanceContext.UnspecifiedID, null, Token.UnspecifiedID); if (listParams != null) { // 这里可以在创建流程的时候赋值 foreach (DataItemParam param in listParams) { OThinker.H3.DataModel.PropertySchema property = schema.GetProperty(param.ItemName); if (property == null) continue; if (property.LogicType == DataLogicType.Comment) {// 审核意见 CommentParam comment = JSSerializer.Deserialize<CommentParam>(param.ItemValue + string.Empty); this.Engine.BizObjectManager.AddComment(new Comment() { BizObjectId = bo.ObjectID, BizObjectSchemaCode = schema.SchemaCode, InstanceId = InstanceId, Activity = workflowTemplate.StartActivityCode, TokenId = 1, Approval = OThinker.Data.BoolMatchValue.True, DataField = property.Name, UserID = user.ObjectID, SignatureId = comment.SignatureId, Text = comment.Text }); } } } // 启动流程的消息 OThinker.H3.Messages.StartInstanceMessage startInstanceMessage = new OThinker.H3.Messages.StartInstanceMessage( MessageEmergencyType.Normal, InstanceId, workItemID, null, PriorityType.Normal, true, null, false, OThinker.H3.Instance.Token.UnspecifiedID, null); Engine.InstanceManager.SendMessage(startInstanceMessage); result = new BPMServiceResult(true, InstanceId, workItemID, "流程实例启动成功!", string.Empty); } catch (Exception ex) { result = new BPMServiceResult(false, ex.ToString()); } return Json(result, JsonRequestBehavior.AllowGet); }