/// <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; }
/// <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; }