Пример #1
0
        /// <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;
        }
Пример #2
0
 //接口不统一
 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);
 }
Пример #3
0
        /// <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;
        }