예제 #1
0
        /// <summary>新しいワークフローを準備します。</summary>
        /// <param name="subSystemId">サブシステムID(必須)</param>
        /// <param name="workflowName">ワークフロー名(必須)</param>
        /// <param name="fromUserId">FromユーザID(必須)</param>
        /// <returns>新規ワークフロー</returns>
        /// <remarks>
        /// fromUsersId
        ///  御中IDでの呼び出しと、ユーザIDでの呼び出しは2回に分ける。
        /// </remarks>
        public DataTable PreStartWorkflow(
            string subSystemId, string workflowName, decimal fromUserId)
        {
            #region チェック処理を実装

            if (string.IsNullOrEmpty(subSystemId))
            {
                throw new BusinessSystemException(
                          MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0],
                          String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1],
                                        String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "subSystemId")));
            }
            else if (string.IsNullOrEmpty(workflowName))
            {
                throw new BusinessSystemException(
                          MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0],
                          String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1],
                                        String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "workflowName")));
            }

            #endregion

            // --------------------------------------------------
            // 新しいワークフローを準備
            // --------------------------------------------------
            // M_WorkflowのSELECT
            // --------------------------------------------------
            DataTable     dt            = new DataTable();
            DaoM_Workflow daoM_Workflow = new DaoM_Workflow(this.Dam);

            // 検索条件
            daoM_Workflow.SubSystemId  = subSystemId;
            daoM_Workflow.WorkflowName = workflowName;
            //daoM_Workflow.WorkflowNo = 1; // スタートなので「1」固定
            daoM_Workflow.ActionType = "Start"; // スタートなので"Start"
            daoM_Workflow.FromUserId = fromUserId;

            // ワークフローの取得
            daoM_Workflow.D2_Select(dt);
            return(dt);
        }
예제 #2
0
        /// <summary>次のワークフロー依頼を取得します。</summary>
        /// <param name="processingWfReq">選択した処理中ワークフロー依頼</param>
        /// <param name="fromUserId">FromユーザID(必須)</param>
        /// <returns>次のワークフロー</returns>
        /// <remarks>
        /// fromUsersId
        ///  御中IDでの呼び出しと、ユーザIDでの呼び出しは2回に分ける。
        /// </remarks>
        public DataTable GetNextWfRequest(DataRow processingWfReq, decimal fromUserId)
        {
            #region チェック処理を実装

            if (processingWfReq == null)
            {
                throw new BusinessSystemException(
                          MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0],
                          String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1],
                                        String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "processingWfReq")));
            }
            else if (!processingWfReq.Table.Columns.Contains("SubSystemId"))
            {
                throw new BusinessSystemException(
                          MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0],
                          String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1],
                                        String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_FIELD_ISNT_CONTAINED,
                                                      "SubSystemId", "processingWfReq")));
            }

            #endregion

            // --------------------------------------------------
            // 次のワークフロー依頼を取得
            // --------------------------------------------------
            // M_WorkflowのSELECT
            // --------------------------------------------------
            DataTable     dt            = new DataTable();
            DaoM_Workflow daoM_Workflow = new DaoM_Workflow(this.Dam);

            // 検索条件
            daoM_Workflow.SubSystemId  = processingWfReq["SubSystemId"];
            daoM_Workflow.WorkflowName = processingWfReq["WorkflowName"];
            daoM_Workflow.WorkflowNo   = processingWfReq["NextWorkflowNo"];
            daoM_Workflow.FromUserId   = fromUserId;

            // ワークフローの取得
            daoM_Workflow.D2_Select(dt);

            // --------------------------------------------------
            // TurnBack, Replyワークフローのフィルタ
            // --------------------------------------------------
            // T_WorkflowHistoryのSELECT
            // --------------------------------------------------
            CmnDao dao = new CmnDao(this.Dam);

            // 次のワークフロー依頼 = TurnBackの場合のフィルタ処理
            DataRow[] drs = dt.Select("ActionType = 'TurnBack'");

            if (drs.Length > 1)
            {
                // GetTurnBackWorkflow
                // 連続TurnBack場合の対応
                dao.SQLFileName = "GetTurnBackWorkflow.sql";
                dao.SetParameter("WorkflowControlNo", processingWfReq["WorkflowControlNo"]);
                dao.SetParameter("NextWorkflowNo", processingWfReq["NextWorkflowNo"]);
                object temp = dao.ExecSelectScalar();

                // GetTurnBackWorkflow2
                // Start直後にTurnBack場合の対応
                if (temp == null)
                {
                    dao.SQLFileName = "GetTurnBackWorkflow2.sql";
                    dao.SetParameter("WorkflowControlNo", processingWfReq["WorkflowControlNo"]);
                    dao.SetParameter("NextWorkflowNo", processingWfReq["NextWorkflowNo"]);
                    temp = dao.ExecSelectScalar();
                }

                string wfPositionId = (string)temp;

                foreach (DataRow dr in drs)
                {
                    if ((string)dr["NextWfPositionId"] == wfPositionId)
                    {
                        // 対象
                    }
                    else
                    {
                        // 対象外(削除)
                        dr.Delete();
                    }
                }

                // 削除処理の受け入れ
                dt.AcceptChanges();
            }

            // 次のワークフロー依頼 = Replyの場合のフィルタ処理
            drs = dt.Select("ActionType = 'Reply'");

            if (drs.Length > 1)
            {
                dao.SQLFileName = "GetReplyWorkflow.xml";
                dao.SetParameter("WorkflowControlNo", processingWfReq["WorkflowControlNo"]);

                #region CorrespondOfReplyWorkflow

                ArrayList alCorrespondOfReplyWorkflow = new ArrayList();

                foreach (DataRow dr in drs)
                {
                    alCorrespondOfReplyWorkflow.Add(dr["CorrespondOfReplyWorkflow"]);
                }

                dao.SetParameter("CorrespondOfReplyWorkflow", alCorrespondOfReplyWorkflow);

                #endregion

                int workflowNo = (int)dao.ExecSelectScalar();

                foreach (DataRow dr in drs)
                {
                    if ((int)dr["CorrespondOfReplyWorkflow"] == workflowNo)
                    {
                        // これ
                    }
                    else
                    {
                        // 削除
                        dr.Delete();
                    }
                }

                // 削除処理の受け入れ
                dt.AcceptChanges();
            }

            // リターン
            return(dt);
        }