public static bool UpdateDataFieldsByWorkflowId(int wfId, NameValueCollection nvcDataFields) { using (Connection conn = new Connection()) { bool result = false; try { conn.Open(K2ServerName, GetConnString()); conn.RevertUser(); conn.ImpersonateUser(@"Founder\zybpmadmin"); ProcessInstance inst = conn.OpenProcessInstance(wfId); for (int i = 0; i < nvcDataFields.Count; i++) { inst.DataFields[nvcDataFields.GetKey(i)].Value = nvcDataFields[i]; } inst.Update(); result = true; } catch { throw; } finally { conn.Close(); } return(result); } }
/// <summary> /// 更新流程变量 /// </summary> /// <param name="sn">流程实例ID</param> /// <param name="nvcDataFields">要更新的变量</param> public static void UpdateProcessDataFields(int procInstID, CDataFields dataFields) { using (Connection conn = new Connection()) { try { ConnectionSetup conSetup = GetConnectionSetup(); conn.Open(conSetup); ProcessInstance procInst = conn.OpenProcessInstance(procInstID); SetDataFields(procInst, dataFields); procInst.Update(); } catch { throw; } finally { try { conn.RevertUser(); } catch { } if (conn != null) { conn.Close(); } } } }
/// <summary> /// 根据实例ID更新DataField /// </summary> /// <param name="procInst"></param> /// <param name="nvcDataFields"></param> /// <returns></returns> public static bool UpdataField(ProcessInstance procInst, NameValueCollection nvcDataFields) { if (nvcDataFields != null) { for (int i = 0; i < nvcDataFields.Count; i++) { procInst.DataFields[nvcDataFields.GetKey(i)].Value = nvcDataFields[i]; } procInst.Update(); } return(true); }
public void MoveWorkItem(WorkGroup fromWorkGroup, WorkGroup toWorkGroup, Organization oe) { Util.WriteMethodInfoToConsole(); ProcessInstance PI = null; List <AccessRule> Rules = new List <AccessRule>(); AccessRule arRead = new AccessRule(session, CCD.Domea.Fw.Base.AccessType.Read, RuleType.SpecificOrganization, oe); AccessRule arWrite = new AccessRule(session, CCD.Domea.Fw.Base.AccessType.Write, RuleType.SpecificOrganization, oe); //Rules.Add(new AccessRule(session, CCD.Domea.Fw.Base.AccessType.Read, RuleType.SpecificOrganization, oe)); //Rules.Add(new AccessRule(session, CCD.Domea.Fw.Base.AccessType.Write, RuleType.SpecificOrganization, oe)); counter = 0; sWatchMovePI = new Stopwatch(); foreach (WorkItem wi in fromWorkGroup.GetWorkItems()) { try { sWatchMovePI.Reset(); sWatchMovePI.Start(); counter = counter + 1; PI = wi.GetProcessInstance(); HConsole.WriteLine(">> Verschieben des Aktes " + PI.Name + " beginnt..."); Rules.Clear(); Rules.AddRange(PI.GetAccessRules(CCD.Domea.Fw.Base.AccessType.Read)); Rules.Add(arRead); Rules.AddRange(PI.GetAccessRules(CCD.Domea.Fw.Base.AccessType.Write)); Rules.Add(arWrite); PI.SetActiveWorkItem(wi); PI.SetLock(ProcessInstanceLockLevel.Whole); wi.WriteHistoryLogEvent(30, "Start BIG Changes 2.0", new HistoryLogEventType(session, 99)); PI.SetCustomAttribute("CSVERANTWOE", oe.Id.ToString()); PI.AssignAccessRules(Rules.ToArray(), true); PI.Update(); wi.SetLock(WorkItemLockLevel.WorkItem); wi.DelegateTo(toWorkGroup); wi.ReleaseLock(WorkItemLockLevel.WorkItem); wi.WriteHistoryLogEvent(30, "BIG Changes 2.0 erfolgreich durchgeführt", new HistoryLogEventType(session, 99)); PI.ReleaseLock(ProcessInstanceLockLevel.Whole); sWatchMovePI.Stop(); HConsole.WriteLine(">> Verschieben des Aktes " + PI.Name + " abgeschlossen... (Zähler: " + counter + " / Stopwatch: " + sWatchMovePI.Elapsed.ToString("ss\\.ff") + ")"); } catch (Exception ex) { HConsole.WriteError(ex); } } }
/// <summary> /// update some data field of the current process /// </summary> /// <param name="sm">update some data field</param> /// <param name="list">new data field value</param> /// <returns>is success</returns> public static bool UpdateDataFields(string sn, NameValueCollection nvcDataFields, string currentUser) { using (Connection conn = new Connection()) { bool result = false; try { conn.Open(K2ServerName, GetConnString()); conn.RevertUser(); if (currentUser == "") { conn.ImpersonateUser(CurrentUser); } else { conn.ImpersonateUser(currentUser); } //WorklistItem wlItem = wlItem = conn.OpenWorklistItem(sn); //for (int i = 0; i < nvcDataFields.Count; i++) //{ // wlItem.ProcessInstance.DataFields[nvcDataFields.GetKey(i)].Value = nvcDataFields[i]; //} //wlItem.ProcessInstance.Update(); ProcessInstance inst = conn.OpenProcessInstance(Convert.ToInt32(sn.Split('_')[0])); for (int i = 0; i < nvcDataFields.Count; i++) { inst.DataFields[nvcDataFields.GetKey(i)].Value = nvcDataFields[i]; } inst.Update(); result = true; } catch { throw; } finally { conn.Close(); } return(result); } }
/// <summary> /// 审批流程 /// </summary> /// <param name="userName"></param> /// <param name="sn"></param> /// <param name="actionString"></param> /// <param name="memo"></param> /// <param name="dataFields"></param> public WorklistItem ApprovalProcess(string userName, string sn, string actionString, string memo, Dictionary <string, string> dataFields) { Connection k2Connection = new Connection(); try { k2Connection.Open(ConfigurationBase.Web.K2Server, ConfigurationBase.Web.K2LoginString); k2Connection.ImpersonateUser(userName); //根据SN打开工作项 WorklistItem workList = k2Connection.OpenWorklistItem(sn); if (workList != null) { #region 更新Datafield if (dataFields != null && dataFields.Count > 0) { ProcessInstance currentProcessInst = k2Connection.OpenProcessInstance(workList.ProcessInstance.ID); //更新Datafields foreach (string key in dataFields.Keys) { if (currentProcessInst.DataFields[key] != null) { if (currentProcessInst.DataFields[key].Value != dataFields[key]) { currentProcessInst.DataFields[key].Value = dataFields[key]; } } } currentProcessInst.Update(); } #endregion #region 审批任务 //批量审批没有actionString,默认第一个操作 if (string.IsNullOrEmpty(actionString)) { if (workList.Actions[0].Name == REJECTACTION) { workList.GotoActivity("流程未通过"); } else if (workList.Actions[0].Name == UNDOACTION) { workList.GotoActivity("流程撤销"); } else { workList.Actions[0].Execute(); } } else { //执行匹配的操作 if (actionString == UNDOACTION) { workList.GotoActivity("流程撤销"); } else if (actionString == REJECTACTION) { workList.GotoActivity("流程未通过"); } else { bool isExcuted = false; for (int i = 0; i < workList.Actions.Count; i++) { if (workList.Actions[i].Name == actionString) { workList.Actions[i].Execute(); isExcuted = true; break; } } } } #endregion } return(workList); } catch (Exception) { return(null); } finally { if (k2Connection != null) { k2Connection.Close(); } } }