/// <summary> /// 取得取消通知时要插入ToDoList的SQL语句 /// </summary> /// <param name="flInstance">流程</param> /// <param name="currentFLActivity">当前Activity</param> /// <param name="notifyActivity">通知Activity</param> /// <param name="flInstanceParms">流程参数</param> /// <param name="keyValues">宿主表的筛选条件</param> /// <param name="clientInfo">ClientInfo</param> /// <returns></returns> private static string GetInsertToDoListSQL4RejectNotify(FLInstance flInstance, IEventWaiting currentFLActivity, IFLNotifyActivity notifyActivity, object[] flInstanceParms, object[] keyValues, object[] clientInfo) { Guid flInstanceId = flInstance.FLInstanceId; Guid flDefinitionId = flInstance.FLDefinitionId; string tableName = ((IFLRootActivity)flInstance.RootFLActivity).TableName; string orgKind = ((IFLRootActivity)flInstance.RootFLActivity).OrgKind; List<string> sendToIds = new List<string>(); if (notifyActivity != null) { if (notifyActivity.SendToKind == SendToKind.AllRoles) { List<string> list = new List<string>(); foreach (string q in flInstance.RL) { if (string.IsNullOrEmpty(q)) continue; string[] qq = q.Split(":".ToCharArray()); if (qq[0] == "R") { list.AddRange(Global.GetUsersIdsByRoleId(qq[1].Trim(), clientInfo)); } else { list.Add(qq[1].Trim()); } } list.Add(flInstance.Creator); foreach (string u in list) { if (sendToIds.Contains(u)) { continue; } sendToIds.Add(u); } } } string flowDesc = ((IFLRootActivity)flInstance.RootFLActivity).Description; string sUserId = ((object[])clientInfo[0])[1].ToString(); string sUserName = Global.GetUserName(sUserId, clientInfo); string email = Global.GetUserEmail(((object[])clientInfo[0])[1].ToString(), clientInfo); string sql = string.Empty; string presentFields = ((IFLRootActivity)flInstance.RootFLActivity).PresentFields; string keys = keyValues[0].ToString(); string presenation = keyValues[1].ToString(); string presenationCT = GetFormPresentCT(flInstance, keys, presenation, presentFields, clientInfo); foreach (string id in sendToIds) { string sendToKind = "2"; string status = "F"; string sendToName = Global.GetUserName(id, clientInfo); DateTime now = DateTime.Now; string remark = "Reject(system)"; List<object> list = new List<object>(); list.Add(flInstanceId.ToString()); // LISTID; 0 list.Add(flDefinitionId.ToString()); // FLOW_ID; 1 list.Add(flowDesc); // FLOW_DESC; 2 list.Add(sUserId); // S_USER_ID; 3 list.Add(currentFLActivity == null ? null : currentFLActivity.Name); // S_STEP_ID; 4 list.Add(currentFLActivity == null ? null : currentFLActivity.Description); // S_STEP_DESC; 5 list.Add(notifyActivity.Name); // D_STEP_ID; 6 list.Add(notifyActivity.Description); // D_STEP_DESC; 7 list.Add(notifyActivity.ExpTime); // EXP_TIME; 8 list.Add(notifyActivity.UrgentTime); // URGENT_TIME; 9 list.Add(notifyActivity.TimeUnit); // TIME_UNIT; 10 list.Add(sUserName); // USERNAME list.Add(string.IsNullOrEmpty(notifyActivity.FormName) ? ((IFLRootActivity)flInstance.RootFLActivity).FormName : notifyActivity.FormName); // FORM_NAME; list.Add(0); // NAVIGATOR_MODE; list.Add(3); // FLNAVIGATOR_MODE; list.Add(notifyActivity.Parameters); // PARAMETERS; list.Add(sendToKind); // SENDTO_KIND; list.Add(id); // SENDTO_ID; list.Add(0); // FLOWIMPORTANT; list.Add(0); // FLOWURGENT; list.Add(status); // STATUS; // 先不管 list.Add(tableName); // FORM_TABLE; list.Add(keys); // FORM_KEYS list.Add(presenation); // FORM_PRESENTATION; list.Add(presenationCT); // FORM_PRESENT_CT; list.Add(remark); // REMARK; list.Add(flInstanceParms[3].ToString()); // PROVIDER_NAME; // 先不管 list.Add(null); // VERSION; // 先不管 list.Add(email); // EMAIL_ADD; list.Add(null); // EMAIL_STATUS; list.Add(flInstance.Solution); // VDSNAME; list.Add(null); // SENDBACKSTEP; // 先不管 list.Add(null); // LEVEL_NO list.Add(string.IsNullOrEmpty(notifyActivity.WebFormName) ? ((IFLRootActivity)flInstance.RootFLActivity).WebFormName : notifyActivity.WebFormName); // WEBFORM_NAME; list.Add(flInstance.Creator); // APPLICANT list.Add(Guid.NewGuid().ToString() + ";" + currentFLActivity.Name); // FLOWPATH list.Add(now.ToString("yyyy-MM-dd")); // UPDATE_DATE list.Add(now.ToString("HH:mm:ss")); // UPDATE_TIME list.Add(null); // PLUSAPPROVE list.Add(null); // PLUSROLES list.Add("0"); // MULTISTEPRETURN list.Add(sendToName); // SENDTO_NAME list.Add(null); // ATTACHMENTFILES list.Add(GetNvarcharMark(clientInfo)); #if CreateTime list.Add(flInstance.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss")); #endif string insertSql = string.Format(INSERT_TODOLIST, list.ToArray()); sql = sql + insertSql + ";"; } return sql; }
//接口不统一 private SendTo GetSendTo(IFLNotifyActivity activity, SendTo from) { switch (activity.SendToKind) { //user case SendToKind.Applicate: return new SendTo(string.Empty, Instance.Creator); case SendToKind.User: { string user = string.IsNullOrEmpty(activity.SendToUser) ? string.Empty : activity.SendToUser.Split(';')[0].Trim(); return new SendTo(string.Empty, user); } case SendToKind.RefUser: { string user = Instance._hostDataSet.Tables[0].Rows[0][activity.SendToField].ToString(); return new SendTo(string.Empty, user); } case SendToKind.Role: { string role = string.IsNullOrEmpty(activity.SendToRole) ? string.Empty : activity.SendToRole.Split(';')[0].Trim(); return new SendTo(role, string.Empty); } case SendToKind.RefRole: { string role = Instance._hostDataSet.Tables[0].Rows[0][activity.SendToField].ToString(); return new SendTo(role, string.Empty); } case SendToKind.Manager: { return GetManager(from); } case SendToKind.RefManager: { string role = string.Empty; if (activity is FLApproveBranchActivity && !string.IsNullOrEmpty(Instance.R)) { role = Instance.R; } else { role = Instance._hostDataSet.Tables[0].Rows[0][activity.SendToField].ToString(); } return GetManager(new SendTo(role, string.Empty)); } case SendToKind.ApplicateManager: { return GetManager(new SendTo(Instance.CreateRole, Instance.Creator)); } } return new SendTo(string.Empty, string.Empty); }
/// <summary> /// 取得通知时要插入ToDoList的SQL语句 /// </summary> /// <param name="flInstance">流程</param> /// <param name="currentFLActivity">当前Activity</param> /// <param name="notifyActivity">通知Activity</param> /// <param name="flInstanceParms">流程参数</param> /// <param name="keyValues">宿主表的筛选条件</param> /// <param name="clientInfo">ClientInfo</param> /// <returns></returns> private static string GetInsertToDoListSQL4Notify(FLInstance flInstance, IEventWaiting currentFLActivity, IFLNotifyActivity notifyActivity, object[] flInstanceParms, object[] keyValues, object[] clientInfo) { Guid flInstanceId = flInstance.FLInstanceId; Guid flDefinitionId = flInstance.FLDefinitionId; string tableName = ((IFLRootActivity)flInstance.RootFLActivity).TableName; string orgKind = ((IFLRootActivity)flInstance.RootFLActivity).OrgKind; List<string> sendToIds = new List<string>(); if (notifyActivity != null) { string id = string.Empty; if (notifyActivity.SendToKind == SendToKind.Role) { string q = notifyActivity.SendToRole; if (string.IsNullOrEmpty(q)) { string message = SysMsg.GetSystemMessage((SYS_LANGUAGE)(((object[])(clientInfo[0]))[0]), "FLRuntime", "Logic", "SendToIdNotSet"); throw new FLException(2, message); } string[] qq = q.Split(";".ToCharArray()); id = qq[0].Trim(); sendToIds.AddRange(Global.GetUsersIdsByRoleId(id, clientInfo)); } else if (notifyActivity.SendToKind == SendToKind.RefRole) { string values = keyValues[1].ToString(); string sendToField = notifyActivity.SendToField; id = Global.GetRoleIdByRefRole(flInstance, sendToField, tableName, values, clientInfo); sendToIds.AddRange(Global.GetUsersIdsByRoleId(id, clientInfo)); } else if (notifyActivity.SendToKind == SendToKind.User) { string q = notifyActivity.SendToUser; if (string.IsNullOrEmpty(q)) { string message = SysMsg.GetSystemMessage((SYS_LANGUAGE)(((object[])(clientInfo[0]))[0]), "FLRuntime", "Logic", "SendToIdNotSet"); throw new FLException(2, message); } string[] users = q.Split(';'); foreach (string user in users) { if (user.Trim().Length > 0) { sendToIds.Add(user.Trim()); } } } else if (notifyActivity.SendToKind == SendToKind.RefUser) { string values = keyValues[1].ToString(); string sendToField = notifyActivity.SendToField; id = Global.GetRoleIdByRefRole(flInstance, sendToField, tableName, values, clientInfo, true);//取出RefUser 方法一样就不重写了 if (!string.IsNullOrEmpty(id)) { string[] users = id.Split(';'); foreach (string user in users) { if (user.Trim().Length > 0) { sendToIds.Add(user.Trim()); } } } } else if (notifyActivity.SendToKind == SendToKind.RefManager) { string values = keyValues[1].ToString(); string sendToField = notifyActivity.SendToField; id = Global.GetRoleIdByRefRole(flInstance, sendToField, tableName, values, clientInfo); id = Global.GetManagerRoleId(flInstanceParms[5].ToString(), orgKind, clientInfo); sendToIds.AddRange(Global.GetUsersIdsByRoleId(id, clientInfo)); } else if (notifyActivity.SendToKind == SendToKind.Manager) { if (flInstance.IsReturn) { id = notifyActivity.RoleId; } { id = Global.GetManagerRoleId(flInstanceParms[5].ToString(), orgKind, clientInfo); } sendToIds.AddRange(Global.GetUsersIdsByRoleId(id, clientInfo)); } else if (notifyActivity.SendToKind == SendToKind.Applicate) { sendToIds.Add(flInstance.Creator); } else if (notifyActivity.SendToKind == SendToKind.ApplicateManager) { if (!string.IsNullOrEmpty(flInstance.CreateRole)) { id = Global.GetManagerRoleId(flInstance.CreateRole, orgKind, clientInfo); sendToIds.AddRange(Global.GetUsersIdsByRoleId(id, clientInfo)); } else { List<string> roleIds = Global.GetRoleIdsByUserId(flInstance.Creator, clientInfo); if (roleIds.Count > 0) { id = Global.GetManagerRoleId(roleIds[0], orgKind, clientInfo); sendToIds.AddRange(Global.GetUsersIdsByRoleId(id, clientInfo)); } } } else if (notifyActivity.SendToKind == SendToKind.AllRoles) { List<string> list = new List<string>(); foreach (string q in flInstance.RL) { if (string.IsNullOrEmpty(q)) continue; string[] qq = q.Split(":".ToCharArray()); if (qq[0] == "R") { list.AddRange(Global.GetUsersIdsByRoleId(qq[1].Trim(), clientInfo)); } else { list.Add(qq[1].Trim()); } } list.Add(flInstance.Creator); foreach (string u in list) { if (sendToIds.Contains(u)) { continue; } sendToIds.Add(u); } } else if (notifyActivity.SendToKind == SendToKind.LastUser) { List<string> list = new List<string>(); if (flInstance.RL.Count > 0) { for (int i = flInstance.RL.Count - 1; i >= 0; i--) { string q = flInstance.RL[i]; if (string.IsNullOrEmpty(q)) continue; string[] qq = q.Split(":".ToCharArray()); if (qq[0] == "R") { list.AddRange(Global.GetUsersIdsByRoleId(qq[1].Trim(), clientInfo)); } else { list.Add(qq[1].Trim()); } break; } } else { list.Add(flInstance.Creator); } foreach (string u in list) { if (sendToIds.Contains(u)) { continue; } sendToIds.Add(u); } } } else { string s = flInstanceParms[8].ToString(); string[] ss = s.Split(';'); foreach (string id in ss) { if (id != null && id != string.Empty) { string[] ss1 = id.Split(':'); if (ss1.Length > 1) { if (ss1[ss1.Length - 1].Trim().ToLower() == "userid") { sendToIds.Add(ss1[0]); } else { sendToIds.AddRange(Global.GetUsersIdsByRoleId(ss1[0], clientInfo)); } } else { List<string> userofrole = Global.GetUsersIdsByRoleId(id, clientInfo); if (userofrole.Count > 0) { string agent = Global.GetAgent(id, userofrole[0], flInstance.RootFLActivity.Description, clientInfo); if (!string.IsNullOrEmpty(agent)) { object parAgent = Global.GetPARAGENT(flInstance.RootFLActivity.Description, agent, clientInfo); if (parAgent != null && Convert.ToBoolean(parAgent)) { sendToIds.AddRange(userofrole); } sendToIds.Add(agent); } else { sendToIds.AddRange(userofrole); } } } } } } var flowPath = notifyActivity == null ? Guid.NewGuid().ToString() + ";" + currentFLActivity.Name : currentFLActivity.Name + ";" + notifyActivity.Name; IEventWaiting nextFLActivity = currentFLActivity; string flowDesc = ((IFLRootActivity)flInstance.RootFLActivity).Description; string sUserId = ((object[])clientInfo[0])[1].ToString(); string sUserName = Global.GetUserName(sUserId, clientInfo); string email = Global.GetUserEmail(((object[])clientInfo[0])[1].ToString(), clientInfo); string sql = string.Empty; string presentFields = ((IFLRootActivity)flInstance.RootFLActivity).PresentFields; string keys = keyValues[0].ToString(); string presenation = keyValues[1].ToString(); string presenationCT = GetFormPresentCT(flInstance, keys, presenation, presentFields, clientInfo); int plusApprove = 0; if (nextFLActivity is IFLStandActivity) { plusApprove = Convert.ToInt32(((IFLStandActivity)nextFLActivity).PlusApprove); } else if (nextFLActivity is IFLApproveActivity) { plusApprove = Convert.ToInt32(((IFLApproveActivity)nextFLActivity).PlusApprove); } // scheduling string delayAutoApprove = null; if ((nextFLActivity is IFLStandActivity && ((IFLStandActivity)nextFLActivity).DelayAutoApprove) || (nextFLActivity is IFLApproveActivity && ((IFLApproveActivity)nextFLActivity).DelayAutoApprove)) delayAutoApprove = "AUTO"; foreach (string id in sendToIds) { if (currentFLActivity is IFLApproveBranchActivity) { string parentName = ((IFLApproveBranchActivity)currentFLActivity).ParentActivity; currentFLActivity = (IEventWaiting)flInstance.RootFLActivity.GetFLActivityByName(parentName); } IEventWaiting nextFLActivity2 = null; if (nextFLActivity is IFLApproveBranchActivity) { string parentName = ((IFLApproveBranchActivity)nextFLActivity).ParentActivity; nextFLActivity2 = (IEventWaiting)flInstance.RootFLActivity.GetFLActivityByName(parentName); } else { nextFLActivity2 = nextFLActivity; } string sendToKind = "2"; string status = "F"; string sendToName = Global.GetUserName(id, clientInfo); DateTime now = DateTime.Now; string remark = flInstance.IsReturn == true ? "Return(system)" : (flInstanceParms[4] == null ? string.Empty : flInstanceParms[4].ToString().Replace("'", "''")); List<object> list = new List<object>(); list.Add(flInstanceId.ToString()); // LISTID; 0 list.Add(flDefinitionId.ToString()); // FLOW_ID; 1 list.Add(flowDesc); // FLOW_DESC; 2 list.Add(sUserId); // S_USER_ID; 3 list.Add(currentFLActivity == null ? null : currentFLActivity.Name); // S_STEP_ID; 4 list.Add(currentFLActivity == null ? null : currentFLActivity.Description); // S_STEP_DESC; 5 list.Add(notifyActivity != null ? notifyActivity.Name : nextFLActivity2.Name); // D_STEP_ID; 6 list.Add(notifyActivity != null ? notifyActivity.Description : nextFLActivity2.Description); // D_STEP_DESC; 7 list.Add(notifyActivity != null ? notifyActivity.ExpTime : nextFLActivity2.ExpTime); // EXP_TIME; 8 list.Add(notifyActivity != null ? notifyActivity.UrgentTime : nextFLActivity2.UrgentTime); // URGENT_TIME; 9 list.Add(notifyActivity != null ? notifyActivity.TimeUnit : nextFLActivity2.TimeUnit); // TIME_UNIT; 10 list.Add(sUserName); // USERNAME list.Add(notifyActivity != null && !string.IsNullOrEmpty(notifyActivity.FormName) ? notifyActivity.FormName : ( nextFLActivity2 != null && !string.IsNullOrEmpty(nextFLActivity2.FormName) ? nextFLActivity2.FormName : ((IFLRootActivity)flInstance.RootFLActivity).FormName) ); // FORM_NAME; list.Add(0); // NAVIGATOR_MODE; list.Add(3); // FLNAVIGATOR_MODE; list.Add(notifyActivity != null ? notifyActivity.Parameters : nextFLActivity2.Parameters); // PARAMETERS; list.Add(sendToKind); // SENDTO_KIND; list.Add(id); // SENDTO_ID; list.Add(flInstanceParms[2]); // FLOWIMPORTANT; list.Add(flInstanceParms[3]); // FLOWURGENT; list.Add(status); // STATUS; // 先不管 list.Add(tableName); // FORM_TABLE; list.Add(keys); // FORM_KEYS list.Add(presenation); // FORM_PRESENTATION; list.Add(presenationCT); // FORM_PRESENT_CT; list.Add(remark); // REMARK; list.Add(flInstanceParms[6].ToString()); // PROVIDER_NAME; // 先不管 list.Add(null); // VERSION; // 先不管 list.Add(email); // EMAIL_ADD; list.Add(null); // EMAIL_STATUS; list.Add(flInstance.Solution); // VDSNAME; list.Add(null); // SENDBACKSTEP; // 先不管 list.Add(delayAutoApprove); // LEVEL_NO list.Add(notifyActivity != null && !string.IsNullOrEmpty(notifyActivity.WebFormName) ? notifyActivity.WebFormName : ( nextFLActivity2 != null && !string.IsNullOrEmpty(nextFLActivity2.WebFormName) ? nextFLActivity2.WebFormName : ((IFLRootActivity)flInstance.RootFLActivity).WebFormName) ); // WEBFORM_NAME; list.Add(flInstance.Creator); // APPLICANT list.Add(flowPath); // FLOWPATH list.Add(now.ToString("yyyy-MM-dd")); // UPDATE_DATE list.Add(now.ToString("HH:mm:ss")); // UPDATE_TIME list.Add(plusApprove); // PLUSAPPROVE list.Add(null); // PLUSROLES list.Add(flInstance.GetMultiStepReturn((FLActivity)nextFLActivity2) ? "1" : "0"); // MULTISTEPRETURN list.Add(sendToName); // SENDTO_NAME list.Add(flInstanceParms[9] == null ? null : flInstanceParms[9].ToString()); // ATTACHMENTFILES list.Add(GetNvarcharMark(clientInfo)); #if CreateTime list.Add(flInstance.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss")); #endif string insertSql = string.Format(INSERT_TODOLIST, list.ToArray()); sql = sql + insertSql + ";"; } return sql; }