예제 #1
0
        ///*******************************************************************************
        /// 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);
        }