///******************************************************************************* /// MODULE NAME : 遷移画面No取得処理 /// MODULE ID : GetSeniGamenNo /// /// PARAMETER IN : /// <param name="seniSign">(in)遷移先(enum SENISIGNを参照)</param> /// <param name="gamenKind">(in)画面種別(詳細はCDrawKukanMngのenum EDISPKINDを参照)</param> /// <param name="strSeniGamen">(in)遷移先画面(画面No/基本ファイル名)</param> /// PARAMETER OUT : /// <param>(out)なし</param> /// /// RETURN VALUE : /// <returns>遷移先画面No(取得不能時は-1を返す)</returns> /// /// FUNCTION : /// <summary> /// 指定された遷移先,画面種別,遷移先画面に該当する遷移先画面Noを取得して返す。 /// </summary> /// ///******************************************************************************* public static Int32 GetSeniGamenNo(UInt16 seniSign, UInt16 gamenKind, String strSeniGamen) { bool blRet = false; // 戻り値取得用 bool isFind = false; // 該当情報有無フラグ Int32 senisakiGamenNo = -1; // 遷移先画面No Int32 kobetuGameNo1 = -1; // 個別画面1の画面No Int32 zentaiGameNo1 = -1; // 全体画面1の画面No Int32 value = 0; // 計算値 Int32 signGamenNo = -1; // 遷移先指定画面No UInt16 kind = 0; // 基本ファイル名 String strBaseFile = String.Empty; // 基本ファイル名 String strAppLog = String.Empty; // ログメッセージ String syncErrorMsg = String.Empty; // 同期エラーメッセージ senisakiGamenNo = -1; // 遷移先画面Noになしを設定 kobetuGameNo1 = -1; // 個別画面1の画面Noに保存済みではないを設定 zentaiGameNo1 = -1; // 全体画面1の画面Noに保存済みではないを設定 try { // 遷移先として個別画面1または全体画面1を指定した場合 if (((UInt16)SENISIGN.KOBETU1 == seniSign) || ((UInt16)SENISIGN.ZENTAI1 == seniSign)) { foreach (UInt16 drawkeys in CAppDat.DrawSectionF.Keys) { // 描画区間情報の画面種別が個別画面の場合 if ((UInt16)CDrawKukanMng.EDISPKIND.KOBETUGAMEN == CAppDat.DrawSectionF[drawkeys].DispKind) { if (kobetuGameNo1 < 0) // 個別画面の画面Noが保存済みではない場合 { kobetuGameNo1 = (Int32)CAppDat.DrawSectionF[drawkeys].Crno[0]; // 描画区間情報の画面No(画面Noリスト内の先頭の画面No)を保存する } else // 画面Noが保存済みの場合 { // 処理なし } } // 描画区間情報の画面種別が全体画面の場合 else if ((UInt16)CDrawKukanMng.EDISPKIND.ZENTAIGAMEN == CAppDat.DrawSectionF[drawkeys].DispKind) { if (zentaiGameNo1 < 0) // 全体画面の画面Noが保存済みではない場合 { zentaiGameNo1 = (Int32)CAppDat.DrawSectionF[drawkeys].Crno[0]; // 描画区間情報の画面No(画面Noリスト内の先頭の画面No)を保存する } else // 画面Noが保存済みの場合 { // 処理なし } } // 上記以外の場合 else { // 処理なし } } // 画面種別として個別画面を指定した場合 if ((UInt16)CDrawKukanMng.EDISPKIND.KOBETUGAMEN == gamenKind) { if (0 <= kobetuGameNo1) // 個別画面の画面Noが保存済み(保存できた)の場合 { senisakiGamenNo = kobetuGameNo1; // 個別画面1の画面Noを遷移先画面Noとする } else // 個別画面の画面Noが保存済みではない場合 { // 処理なし } } // 画面種別として全体画面を指定した場合 else if ((UInt16)CDrawKukanMng.EDISPKIND.ZENTAIGAMEN == gamenKind) { if (0 <= zentaiGameNo1) // 全体画面の画面Noが保存済み(保存できた)の場合 { senisakiGamenNo = zentaiGameNo1; // 全体画面1の画面Noを遷移先画面Noとする } else // 全体画面の画面Noが保存済みではない場合 { // 処理なし } } // 画面種別として分割画面1または分割画面2を指定した場合 else if (((UInt16)CDrawKukanMng.EDISPKIND.BUNKATSUGAMEN1 == gamenKind) || ((UInt16)CDrawKukanMng.EDISPKIND.BUNKATSUGAMEN2 == gamenKind)) { if (0 <= kobetuGameNo1) // 個別画面の画面Noが保存済み(保存できた)の場合 { foreach (UInt16 drawkeys in CAppDat.DrawSectionF.Keys) { // 描画区間情報の画面種別と指定された画面種別が一致した場合 if (gamenKind == CAppDat.DrawSectionF[drawkeys].DispKind) { for (UInt16 iCnt = 0; iCnt < CAppDat.DrawSectionF[drawkeys].Crno.Count; iCnt++) { // 描画区間情報内の画面Noと個別画面1の画面Noが一致した場合 if (kobetuGameNo1 == CAppDat.DrawSectionF[drawkeys].Crno[iCnt]) { senisakiGamenNo = CAppDat.DrawSectionF[drawkeys].Crno[0]; // 描画区間情報の画面No(画面Noリスト内の先頭の画面No)を遷移先画面Noとする break; } // 描画区間情報内の画面Noと個別画面1の画面Noが一致しない場合 else { // 処理なし } } // 遷移先画面Noが保存できた場合 if (0 <= senisakiGamenNo) { break; } // 遷移先画面Noが保存されていない場合 else { // 処理なし } } // 描画区間情報の画面種別と指定された画面種別が一致しない場合 else { // 処理なし } } } else // 個別画面の画面Noが保存済みではない場合 { // 処理なし } } // 上記以外 else { // 処理なし } } // 遷移先として指定画面移動を指定した場合 else if ((UInt16)SENISIGN.SITEI == seniSign) { signGamenNo = -1; // 遷移先指定画面Noになしを設定 try { blRet = CCommon.IsNumeric(strSeniGamen); // 数値かどうかをチェック if (true == blRet) // 数値の場合 { value = Convert.ToInt32(strSeniGamen, 10); // 遷移先画面指定を数値に変換する signGamenNo = value; // 遷移先指定画面Noを保存する } else // 数値ではない場合 { // 処理なし } } catch (Exception ex) { // デバッグ用出力 CCommon.WriteDebugLog(MethodBase.GetCurrentMethod(), ex.Message); // 変換できなかった場合は、画面の基本ファイル名なので後で処理する } if (0 <= signGamenNo) // 遷移先画面指定が画面Noの場合 { senisakiGamenNo = signGamenNo; // 指定された画面Noを遷移先画面Noとする } else // 遷移先画面指定が画面Noではない場合 { // 画面種別として全体画面を指定した場合 if ((UInt16)CDrawKukanMng.EDISPKIND.ZENTAIGAMEN == gamenKind) { kind = 1; // 種別に全体画面を設定 } // 画面種別として全体画面以外を指定した場合 else { kind = 0; // 種別に個別画面を設定 } foreach (UInt16 drawkeys in CAppDat.DrawSectionF.Keys) { for (UInt16 iCnt = 0; iCnt < CAppDat.DrawSectionF[drawkeys].Crno.Count; iCnt++) { isFind = CCommon.GetBaseFileName(kind, CAppDat.DrawSectionF[drawkeys].Crno[iCnt], ref strBaseFile); // 描画区間情報の画面Noに該当する基本ファイル名を取得する // 基本ファイル名と遷移先画面指定が一致する場合 if ((true == isFind) && (strSeniGamen == strBaseFile)) { senisakiGamenNo = CAppDat.DrawSectionF[drawkeys].Crno[0]; // 描画区間情報の画面No(画面Noリスト内の先頭の画面No)を遷移先画面Noとする break; } // 基本ファイル名と遷移先画面指定が一致しない場合 else { // 処理なし } } // 遷移先画面Noが保存できた場合 if (0 <= senisakiGamenNo) { break; } // 遷移先画面Noが保存されていない場合 else { // 処理なし } } } } // 上記以外の場合 else { // 遷移先として前画面/次画面移動を指定した場合 if (((UInt16)SENISIGN.PREV == seniSign) || ((UInt16)SENISIGN.NEXT == seniSign)) { // 処理なし } // 上記以外の場合 else { strAppLog = String.Format("同一画面遷移:seniSign={0:D} gamenKind={1:D} strSeniGamen={2}", seniSign, gamenKind, strSeniGamen); CAppDat.AppLog.Output(CLogCtrl.LOGTYPE.WARNING, MethodBase.GetCurrentMethod(), strAppLog); } // 表示画面情報テーブル排他制御開始 CAppDat.MutexCtrl[(ushort)CAppDat.MUTEXID.GAMENINFO].WaitOne(); try { // 表示画面情報テーブルの画面No(現在表示中の画面Noリスト内の先頭の画面No)を遷移先画面Noとする senisakiGamenNo = CAppDat.GamenInfoT.Crno[0]; } catch (Exception ex) { // ミューテックス取得中に発生した例外の捕捉 syncErrorMsg = "〇 同期中エラー発生 " + ex.Message; CAppDat.AppLog.Output(CLogCtrl.LOGTYPE.FATALERROR, MethodBase.GetCurrentMethod(), syncErrorMsg); } finally { // 表示画面情報テーブル排他制御終了 CAppDat.MutexCtrl[(ushort)CAppDat.MUTEXID.GAMENINFO].ReleaseMutex(); } } } catch (Exception ex) { CAppDat.AppLog.Output(CLogCtrl.LOGTYPE.FATALERROR, MethodBase.GetCurrentMethod(), ex.Message); } return(senisakiGamenNo); }