public string CreateActivityDetinations(string activityXML, string userID, string account, string userName, string email, string userType) { ApprovalChainActivity activity = SerializationHelper.Deserialize <ApprovalChainActivity>(activityXML); ApprovalChainDestination originator = new ApprovalChainDestination(userID, account, userName, email, userType); activity.AddDestination(originator); return(SerializationHelper.Serialize(activity)); }
public void AddActivity(ApprovalChainActivity acivity) { if (ApprovalChainActivitys == null) { this.ApprovalChainActivitys = new List <ApprovalChainActivity>(); } acivity.Sequence = ApprovalChainActivitys.Count + 1; ApprovalChainActivitys.Add(acivity); }
public bool RemoveActivity(ApprovalChainActivity acivity) { //TODO:activity后续节点的Sequence依次减1 //int seq = acivity.Sequence; //foreach (ApprovalChainActivity app in ApprovalChainActivitys) //{ // if (app.Sequence > seq) // { // app.Sequence--; // } //} //ApprovalChainActivitys.Sort(Sort); return(ApprovalChainActivitys.Remove(acivity)); }
public string GetCurrentActivityInfo(string sn, string currentUser) { try { //更新用以标识用户是否可以取回任务的DataField int parentProcInstID = K2DBHelper.GetRootParentsID(Convert.ToInt32(sn.Split('_')[0])); K2Helper.UpdateProcessDataFields(parentProcInstID, new CDataFields("CallBackProcInstID", "0", "DF")); //获取Approve流程中的节点信息 CDataFields dataFieldLists = new CDataFields("SubApprovalChain", "", "DF"); K2Helper.GetProcessDataFields(sn, currentUser, dataFieldLists); ApprovalChainActivity activity = SerializationHelper.Deserialize <ApprovalChainActivity>(dataFieldLists.DataFieldLists[0].Value); activity.ApprovalChainDestination = null; return(SerializationHelper.Serialize(activity)); } catch (Exception ex) { K2DBHelper.RecoreErrorProfile(ex, "K2HelperWS.GetCurrentActivityInfo", currentUser); return(null); } }
public string CreateActivity(string activityName, bool order, string webUrl, string type, string actionWeightType, string actionWeight) { ApprovalChainActivity activity = new ApprovalChainActivity(Guid.NewGuid().ToString(), activityName, order, webUrl, type, actionWeightType, actionWeight); return(SerializationHelper.Serialize(activity)); }
public string ExecuteProcess(string sn, string action, string currentUser, string activityXML) { try { int parentProcInstID = K2DBHelper.GetRootParentsID(Convert.ToInt32(sn.Split('_')[0])); //获取Approve流程中的Destinations CDataFields dataFieldDestinations = new CDataFields("Destinations", "", "DF"); //获取Approve流程中的节点信息 dataFieldDestinations.AddDataField(new CDataField("SubApprovalChain", "", "DF")); K2Helper.GetProcessDataFields(sn, currentUser, dataFieldDestinations); string xmlDestination = dataFieldDestinations.DataFieldLists[0].Value; string xmlActivity = dataFieldDestinations.DataFieldLists[1].Value; ApprovalChainDestination destinations = SerializationHelper.Deserialize <ApprovalChainDestination>(xmlDestination); ApprovalChainActivity activity = SerializationHelper.Deserialize <ApprovalChainActivity>(xmlActivity); //权重类型 string actionWeightType = activity.ActionWeightType; if (actionWeightType == "") { actionWeightType = "N"; } //如果权重类型是百分比的情况下并且执行的操作不是Approve,则默认操作为Decline if (actionWeightType.Equals(EnumActionWeightType.P.ToString(), StringComparison.CurrentCultureIgnoreCase) && !action.Equals("Approve", StringComparison.CurrentCultureIgnoreCase)) { action = "Decline"; } #region 如果执行的是退回到某个节点的操作 if (action.Equals("GoBack", StringComparison.CurrentCultureIgnoreCase)) { //当前审批节点ID string currentActivityID = destinations.ActivityID; //要退回到的节点ID并且是没有权重控制的情况下 string targetActivityID = K2DBHelper.GetTargetActivityID(currentActivityID); if (!string.IsNullOrEmpty(targetActivityID) && (actionWeightType.Equals(EnumActionWeightType.N.ToString()) || actionWeightType.Equals(EnumActionWeightType.R.ToString()))) { //获取原始审批链 string originalProcessApproveChain = K2DBHelper.GetProcessOriginalXMLValue(parentProcInstID); XmlDocument xmlProcess = new XmlDocument(); xmlProcess.LoadXml(originalProcessApproveChain); //获取要退回到的节点 XmlNode nodeActivity = xmlProcess.SelectSingleNode("/Process/Activity[ID='" + targetActivityID + "' and Status='Completed']"); if (nodeActivity != null) { while (true) { nodeActivity.SelectSingleNode("./Status").InnerText = "Available"; nodeActivity.SelectSingleNode("./ActionResult").InnerText = ""; XmlNodeList nodeListDestinations = nodeActivity.SelectNodes("./Destination"); foreach (XmlNode des in nodeListDestinations) { des.SelectSingleNode("./Status").InnerText = "Available"; des.SelectSingleNode("./ActionResult").InnerText = ""; des.SelectSingleNode("./ActualActionResult").InnerText = ""; //删除加签\会签信息 XmlNode nodeDestinationActivity = des.SelectSingleNode("./Activity"); if (nodeDestinationActivity != null) { des.RemoveChild(nodeDestinationActivity); } } if (nodeActivity.NextSibling != null && nodeActivity.NextSibling.Name.Equals("Activity", StringComparison.CurrentCultureIgnoreCase)) { nodeActivity = nodeActivity.NextSibling; } else { break; } } //更新原始审批链的状态 K2Helper.UpdateProcessDataFields(parentProcInstID, new CDataFields("ProcessApprovalChain", xmlProcess.OuterXml, "XF")); } else { //如果执行的是退回到某个节点的操作,但是没有配置退回到哪个节点,则退回到发起人 action = "Decline"; } } else { //如果执行的是退回到某个节点的操作,但是没有配置退回到哪个节点,则退回到发起人 action = "Decline"; } } #endregion //只有在执行同意操作并且(没有权重控制或在权重控制类型为R时)的前提下传递过来的activityXML才做为有效的加签、会签信息 if (action.Equals("Approve", StringComparison.CurrentCultureIgnoreCase) && !string.IsNullOrEmpty(activityXML) && (actionWeightType.Equals(EnumActionWeightType.N.ToString()) || actionWeightType.Equals(EnumActionWeightType.R.ToString()))) { destinations.AddActivity(SerializationHelper.Deserialize <ApprovalChainActivity>(activityXML)); } //只有在执行同意操作并且(没有权重控制或在权重控制类型为R时)的前提下传递过来的activityXML才做为有效的加签、会签信息 //if (action.Equals("Approve", StringComparison.CurrentCultureIgnoreCase) // && !string.IsNullOrEmpty(activityXML) // ) //{ // destinations.AddActivity(SerializationHelper.Deserialize<ApprovalChainActivity>(activityXML)); //} //修改User节点的状态,记录User的Action ApprovalChainDestinationUser user = destinations.ApproveChainDestinationUsers.Find(d => d.Account.Equals(currentUser, StringComparison.CurrentCultureIgnoreCase)); if (user != null) { user.Executed = true; user.ActionResult = action; } destinations.ActionResult = action; destinations.ActualUserID += ";" + currentUser; dataFieldDestinations = new CDataFields("Destinations", "", "DF"); dataFieldDestinations.DataFieldLists[0].Value = SerializationHelper.Serialize(destinations); // K2Helper.ExecuteProcess(sn, "", "", currentUser, dataFieldDestinations); //更新用以标识用户是否可以取回任务的DataField K2Helper.UpdateProcessDataFields(parentProcInstID, new CDataFields("CallBackProcInstID", sn.Split('_')[0], "DF")); //edit by lee K2Helper.ExecuteProcess(sn, "", "", currentUser, dataFieldDestinations); K2DBHelper.AddApproveLog(parentProcInstID, Convert.ToInt32(sn.Split('_')[0]), action, activityXML, currentUser); K2DBHelper.AddActSlot(Convert.ToInt32(sn.Split('_')[0]), parentProcInstID, activity.ID, activity.Name, currentUser, activity.Type); } catch (Exception ex) { K2DBHelper.RecoreErrorProfile(ex, "K2HelperWS.ExecuteProcess(SN=" + sn + ";action=" + action + ";currentUser="******";activityXML=" + activityXML + ")", currentUser); return(ex.Message); } return("Success"); }
private int Sort(ApprovalChainActivity a1, ApprovalChainActivity a2) { return(a1.Sequence.CompareTo(a2.Sequence)); }
/// <summary> /// 通过节点与人员对应关系生成审批XML /// </summary> /// <param name="pairList"></param> /// <returns></returns> private static string CreateApproveXML(string requestor, List <Triplet> pairList, string xml, string infoSource) { ApprovalChainProcess process = new ApprovalChainProcess("自定义流程", ""); process.DefinitionType = infoSource; ApprovalChainData data = new ApprovalChainData(); process.AddData(data); //发起人节点 ApprovalChainActivity activity = new ApprovalChainActivity(Guid.NewGuid().ToString(), "发起人", true, "http://localhost:3373/Resubmit.aspx?SN=", EnumActivityType.SP.ToString()); activity.Status = EnumStatus.Completed.ToString(); activity.ActionWeightType = EnumActionWeightType.N.ToString(); ApprovalChainDestination originator = new ApprovalChainDestination("", requestor, "", "", EnumDestinationUserType.User.ToString()); originator.Status = EnumStatus.Completed.ToString(); activity.AddDestination(originator); process.AddActivity(activity); foreach (Triplet tl in pairList) { //string nodeName = K2DBHelper.GetProcessNodeName(tl.First.ToString()); DataSet ds = K2DBHelper.GetProcessNodeByNodeID(tl.First.ToString()); if (ds != null) { string nodeName = ds.Tables[0].Rows[0]["NodeName"].ToString(); string weightedType = ds.Tables[0].Rows[0]["WeightedType"].ToString(); string samplingRate = string.Empty; if (ds.Tables[0].Rows[0]["SamplingRate"] != DBNull.Value) { samplingRate = ds.Tables[0].Rows[0]["SamplingRate"].ToString(); } activity = new ApprovalChainActivity(tl.First.ToString(), nodeName, true, tl.Third.ToString(), EnumActivityType.SP.ToString()); string[] users = tl.Second.ToString().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); ApprovalChainDestination des = new ApprovalChainDestination(); if (weightedType == EnumActionWeightType.P.ToString()) { activity.ActionWeightType = weightedType; activity.ActionWeight = samplingRate; foreach (string user in users) { ds = K2DBHelper.GetEmployeeInfoByUserAd(user); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { string Id = ds.Tables[0].Rows[0]["EmployeeCode"].ToString(); string email = ds.Tables[0].Rows[0]["Email"].ToString(); string name = ds.Tables[0].Rows[0]["EmployeeName"].ToString(); des.AddDestinationUser(new ApprovalChainDestinationUser(Id, user, name, email, EnumDestinationUserType.User.ToString())); } } activity.AddDestination(des); } else if (weightedType == EnumActionWeightType.R.ToString()) { activity.ActionWeightType = weightedType; activity.ActionWeight = "1"; foreach (string user in users) { ds = K2DBHelper.GetEmployeeInfoByUserAd(user); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { string Id = ds.Tables[0].Rows[0]["EmployeeCode"].ToString(); string email = ds.Tables[0].Rows[0]["Email"].ToString(); string name = ds.Tables[0].Rows[0]["EmployeeName"].ToString(); des.AddDestinationUser(new ApprovalChainDestinationUser(Id, user, name, email, EnumDestinationUserType.User.ToString())); } } activity.AddDestination(des); } else { activity.ActionWeightType = weightedType; foreach (string user in users) { ds = K2DBHelper.GetEmployeeInfoByUserAd(user); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { string Id = ds.Tables[0].Rows[0]["EmployeeCode"].ToString(); string email = ds.Tables[0].Rows[0]["Email"].ToString(); string name = ds.Tables[0].Rows[0]["EmployeeName"].ToString(); activity.AddDestination(new ApprovalChainDestination(Id, user, name, email, EnumDestinationUserType.User.ToString())); } } } process.AddActivity(activity); } } string processApprovalChain = SerializationHelper.Serialize(process); return(processApprovalChain); }
public bool RemoveActivity(ApprovalChainActivity acivity) { return(ApprovalChainActivitys.Remove(acivity)); }