ホームページ >バックエンド開発 >PHPチュートリアル >AS400銀行基幹システム開発における技術概要 - トランザクションとコンポーネントの作成_PHPチュートリアル

AS400銀行基幹システム開発における技術概要 - トランザクションとコンポーネントの作成_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:54:381148ブラウズ

AS400銀行基幹システム開発における技術概要 - トランザクションとコンポーネントの記述方法

* トランザクションとコンポーネントの記述方法


Firebird基幹システムの全体構造は、メインコントロール-トランザクション-コンポーネントで構成されています層の。オンライントランザクションマスタコントロールはCプログラムで記述し、非同期トランザクションマスタコントロールと終日バッチマスタコントロールはCLおよびRPGLEプログラムで記述します。メイン コントロールはトランザクション コードを介して対応するトランザクション RPGLE プログラムを呼び出し、トランザクション プログラムは CALLP を介してさまざまなモジュールのコンポーネント RPGLE プログラムを呼び出し、処理ロジック全体を完了します。トランザクション プログラムとコンポーネント プログラムの両方で、一連のテンプレート サンプルがまとめられています。サンプル プログラムの作成方法を次に示します。


トランザクションとコンポーネントプログラムの記述方法を紹介する前に、まず、/COPY によって導入される統合共通プログラムを紹介します。プログラムのこの部分は DSCPPGM に配置されます。 /COPY は乱用すべきではなく、命名規則と組み合わせる必要があることに注意してください。そうしないと、プログラムの可読性が低下しやすくなります。
まずはHEADです。このファイルは、著作権といくつかの日付 fmt ルールを定義します。

  1. **始まり******************************************* **** *******************
  2. **プログラム名: プログラム公開制御ヘッダー*
  3. **機能説明: プログラム公開制御ヘッダー*
  4. * * *
  5. **バージョン: 2014-10-21_1 *
  6. ** *
  7. ** デザイナー: PACMAN 開発者: AUTOGEN *
  8. ** 設計日: 2011-08-30 開発日: 2011-08-30 *
  9. ** *
  10. **終了************************************** ********* *************************
  11. **
  12. HCOPYRIGHT('Firebird V2.1 コアバンキング システム、CSW SHANGHAI')
  13. HDATFMT(*ISO ) TIMFMT(*ISO) DATEDIT(*YMD)
その後、ENUM、このファイルは列挙定数の定義を導入します。これはデータ ディクショナリと列挙値の部分に導入されているため、ここで繰り返します。
次のステップは PGDS です。このファイルは、PSDS および INFDS 構造定義、エラー構造定義、エラー メッセージ配列、インターフェイス配列番号、および各プログラムによって導入される特殊目的の変数を定義します。
  1. **始まり******************************************** *******************
  2. **プログラム名: プログラム公開制御ヘッダー*
  3. **機能説明: プログラム公開制御ヘッダー*
  4. ** *
  5. * *バージョン: 2014-11-23_1 *
  6. ** *
  7. ** デザイナー: PACMAN 開発者: AUTOGEN *
  8. ** 設計日: 2011-08-30 開発日: 2011-08-30 *
  9. ** *
  10. **終了**************************************** * *************************
  11. **
  12. **公開定数
  13. **出力チケット配列の数
  14. DC_NBOTVC C CONST (100)
  15. **クーポン配列の個数を入力
  16. DC_NBINCS C CONST(30)
  17. **料金配列の個数を入力
  18. DC_NBINFE C CONST(30)
  19. **手数料の個数を出力配列項目
  20. DC_NBOTFE C CONST( 30)
  21. **間違ったパラメータの数を置き換えます
  22. DC_NBMSDS C CONST(9)
  23. **レコードがロックされているというエラーメッセージ
  24. DC_MGLOCK C CONST ('レコードはロックされています')
  25. ************ ************************************ *************** ************
  26. **エラー処理構造体
  27. **プログラムステータス構造体
  28. DRPGPSDS SDS
  29. D PG_MAINPROC 1 10A
  30. D PG_STATUS 11 15A
  31. D PG_PRVSTAT 16 20A
  32. D PG_SRCLINE 21 28A
  33. D PG_ROUTINE 29 36A
  34. D PG_PARMNUM 37 39S 0
  35. D PG_MSID 40 46A
  36. D PG_PGMLIB 81 90A
  37. D PG_EXCPDT 91 1 70A
  38. D PG_LSERRFL 175 184A
  39. D PG_JOBDATE 191 198A
  40. D PG_FLINFO 209 243A
  41. D PG_JOBNAME 244 253A
  42. D PG_JOBUSER 254 63A
  43. D PG_JOBNUM 264 269S 0
  44. D PG_RUNDATE 276 281S 0
  45. D PG_RUNTIME 282 287S 0
  46. D PG_SRCFILE 304 313A
  47. D PG_SRCLIB 314 323A
  48. D PG_SRCMBR 324 333A
  49. D PG_PGMNAME 334 343A
  50. D PG_MODNAME 344 353A
  51. D PG_SRCLNADD 354 355B 0
  52. D PG_FLILNADD 356 357B 0
  53. D PG_USRPRF 358 367A
  54. D PG_EXTERR 368 371I 0
  55. **ファイルステータス構造体
  56. DFILESDS DS BASED(FILEDSP)
  57. D FL_FILE 1 8A
  58. D FL_OPNIND 9 9A
  59. D FL_EOFIND 10 10A
  60. D FL_STATUS 11 15S 0
  61. D FL_OPCODE 16 21 A
  62. D FL_ROUTINE 22 29A
  63. D FL_SRCLINE 30 37A
  64. D FL_RECORD 38 45A
  65. D FL_MSID 46 52A
  66. D FL_SRCLNADD 77 78B 0
  67. D FL_ODPTYPE 81 82A
  68. D FL_FILENAME 83 92A
  69. D FL_LIBRARY 93 102A
  70. D FL_SPLFILE 103 112A
  71. D FL_SPLLIB 113 122A
  72. D FL_RCDLEN 125 126I 0
  73. D FL_KEYLEN 127 128I 0
  74. D FL_MEMBER 129 138A
  75. D FL_TYPE 147 148I 0
  76. D FL_RCDNUM 156 159I 0
  77. D FL_SPLNUM 160 163I 0
  78. D FL_OVERFLOW 188 189I 0
  79. D FL_BASEDMBRS 211 212I 0
  80. D FL_OPENID 214 215B 0
  81. D FL_RCDFMTL EN 216 217I 0
  82. D FL_CCSID 218 219I 0
  83. D FL_FBSIZE 367 370I 0
  84. D FL_KEYNUM 387 388I 0
  85. D FL_FBKEYLEN 393 394I 0
  86. D FL_MBRNUM 395 396I 0
  87. D FL_RRN 397 400I 0
  88. D FL_KEY 240 0A
  89. **ファイルステータス構造体ポインタ
  90. DFILEDSP S *
  91. ****************** ******************************* ******************* **
  92. **パブリック構造
  93. **データディクショナリの導入
  94. DDICT E DS EXTNAME(DICT) QUALIFIED TEMPLATE
  95. **パブリック エラー メッセージ インターフェイス
  96. DPMG E DS EXTNAME(MESG) QUALIFIED
  97. **エラー メッセージ 配列を置き換えます
  98. DA_MSDS S DIM(C_NBMSDS) LIKE(DICT.@@MSDS)
  99. ********** ******************** ***************************** ************
  100. **特殊変数
  101. **エラー処理プログラムが実行されているかどうか
  102. DPG_ERYNFG S LIKE(DICT.@@YNFG) INZ(YNFG_NO)
  103. **プログラムが初期化されているかどうか
  104. DPG_FRYNFG S LIKE(DICT.@@YNFG) INZ (YNFG_YES)
最後は、一般処理プロセスPGCMです。このプログラムは、エラーをキャッチするプログラムや、チェックや終了などの共通処理を定義します。これは、通常の@で始まるプロセス名と区別するためです。取引。
  1. **始まり******************************************** *** ******************
  2. **プログラム名: プログラム公開サブルーチン*
  3. **機能説明: プログラム公開サブルーチン*
  4. ** *
  5. * *バージョン: 2014-10-21_1 *
  6. ** *
  7. ** デザイナー: PACMAN 開発者: AUTOGEN *
  8. ** 設計日: 2011-08-30 開発日: 2011-08-30 *
  9. * * *
  10. **終了***************************************** * **************************
  11. **
  12. ***************** ****** ******************************************* *****
  13. ** #EXIT リターン
  14. ************************************ ****** **************************************
  15. C #EXIT BEGSR
  16. **
  17. C EVAL PG_FRYNFG = YNFG_NO
  18. C/IF DEFINED(USELR)
  19. C EVAL *INLR = *ON
  20. C/ENDIF
  21. C RETURN
  22. **
  23. C ENDSR
  24. ********** ******** ***************************************** ********* **
  25. ** #ERR エラーメッセージを取得
  26. **************************** ************ **********************************
  27. C #ERR BEGSR
  28. **
  29. C EVAL PMG.MSFLNM +
  30. * ********************************* *************************************
  31. ** #CHKMSGチェッカー返却情報
  32. *** ********************* ***************************** ********************** *
  33. C #CHKMSG BEGSR
  34. **
  35. C IF PMG.BKMSID
  36. *BLANKS
  37. C EXSR #EXIT
  38. C ENDIF
  39. **
  40. C ENDSR
  41. ********* *************************** *********************** ***********
  42. ** *PSSRプログラム例外処理
  43. ***** ************************* ************************ *****************
  44. C *PSSR BEGSR
  45. **
  46. C IF PG_ERYNFG = YNFG_NO
  47. C EVAL PG_ERYNFG = YNFG_YES
  48. C EVAL PMG.MSFLNM = PG_SRCMBR
  49. C EVAL PMG.MSCDLN = PG_SRCLINE
  50. C EVAL PMG.BKMSID = 'F' + PG _MSID
  51. C EVAL PMG.BKMSDS = PG_EXCPDT
  52. C Eval PMG.OTMSDS = PG_STATUS+'+PG_PGMLIB+'+
  53. PGMNAMNAME
  54. EXIT
  55. C ENDIF
  56. **
  57. *** * **************************** ********************* ****************
  58. ** #FLEX ファイル例外処理
  59. ** ************************** *********************** *************************
  60. C #FLEX BEGSR
  61. **
  62. C EVAL PMG.MSFLNM = PG_SRCMBR
  63. C EVAL PMG。 MSCDLN = FL_SRCLINE
  64. C EVAL PMG.BKMSID = 'F' + FL_MSID
  65. C IF FL_STATUS = 1218
  66. C CALL ' GETOBJTXT'
  67. C PARM FL_LIBRARY V_FLEXLIB 10
  68. C PARM FL_FILENAME EXOBJ 10
  69. C PARM '*ファイル' V_FLEXTYP 7
  70. C PARM *BLANKS V_FLEXTEXT 50
  71. C EVAL PMG.BKMSDS = %TRIM(V_FLEXTEXT) +
  72. C %TRIM(FL_FILENAME) + '.' +
  73. C %TRIM(FL_MEMBER) + C_MGLOCK +
  74. C ',​​' + PG_EXCPDT
  75. C ELSE
  76. C EVAL PMG.BKMSDS = PG_EXCPDT
  77. C ENDIF
  78. C EVAL PMG.OTMSDS = PG_FLINFO
  79. C EXSR #EXIT
  80. **
  81. CエンドSR
  82. トランザクション プログラムの例では、6 桁のトランザクション コード 000000 を例に挙げています。トランザクション プログラムの名前は T000000A で、2 つの入力 T000000I1 と T000000I2 と 2 つの出力 T000000O1 と T00000O2 があります。ここで、I2 と O2 は配列です。
    T000000I1のプログラムは以下の通りです。

    1. A REF(DICT)
    2. A R RT000000I1
    3. A BKBRNO R REFFLD(@@BRNO)
    4. A COLHDG('organization')
    5. A TEXT('organization')
    T000000I2 手順は次のとおりです。
    1. A REF(DICT)
    2. A R RT000000I2
    3. A BKTLNO R REFFLD(@@TLNO)
    4. A COLHDG('Teller')
    5. A TEXT('Teller')
    T000000O1 手順は次のとおりです。
    1. A REF(DICT)
    2. A R RT000000O1
    3. A BKTRWB R REFFLD(@@TRWB)
    4. A COLHDG('トランザクションシリアル番号')
    5. A TEXT('トランザクションシリアル番号')
    T0000 00O1プログラム次のように。
    1. A REF(DICT)
    2. A R RT000000O2
    3. A BKACNO R REFFLD(@@ACNO)
    4. A COLHDG('account')
    5. A TEXT('account')
    トランザクション プログラム T000000Aのようなものですが続きます。
    1. **始まり******************************************** *******************
    2. **プログラム名:取引プログラムテンプレート*
    3. **機能説明:取引プログラム開発仕様書*
    4. ** *
    5. ** デザイナー: CSWWM 開発者: CSWWM *
    6. ** 設計日: 2011-08-30 開発日: 2011-08-30 *
    7. **-------------- -------------------------------------------------- - -*
    8. **メンテ者:CSWYJ *
    9. **メンテ日:2014-10-17 *
    10. **メンテ内容:新仕様に合わせて書き換え*
    11. ** *
    12. **END*** * ************************************************ ** *************
    13. H/COPY DSCPPGM,HEAD
    14. ************************* ***** ********************************************
    15. ** データディクショナリ列挙型定数の導入
    16. D/COPY DSCPPGM,ENUM
    17. **パブリックプログラム本体の導入
    18. D/COPY DSCPPGM,PGDS
    19. ************** ********** *************************************** *********
    20. * **LR=*ON で終了するかどうかを決定し、活性化グループ管理を一律に使用してコメントを保持する
    21. D*/DEFINE USELR
    22. **定数を定義する
    23. DC_I1 C CONST('取引プログラムテンプレート')
    24. DC_MGBRNO C CONST('組織番号')
    25. DC_NBI2 C CONST(20)
    26. DC_NBO2 C CONST(20)
    27. ************* *****************
    28. **呼び出しサービスのプロトタイプの紹介
    29. D/COPY CETPEXP、SCETPSVP
    30. D/COPY CNCMSVC、SCNCMTAP
    31. ** 構造体と配列を定義する外部構造を参照する
    32. DT_INHD E DS EXTNAME(INHD) QUALIFIED TEMPLATE
    33. DT_INFE E DS EXTNAME(INFE) QUALIFIED TEMPLATE
    34. DT_INCS E DS EXTNAME(INCS) QUALIFIED TEMPLATE
    35. DT_OTHD E DS EXTNAME(OTHD) QUALIFIED TEMプレート
    36. DT_OTVC E DS EXTNAME(T000000I1) 修飾されたテンプレート
    37. DT_I2 E DS EXTNAME(T000000I2) 修飾されたテンプレート
    38. DT_O1 E DS EXTNAME(T000000O1) 修飾されたテンプレート
    39. DT_O2 E EXTNAME(T000000O2) 修飾されたテンプレート
    40. ***** ********** **********
    41. ** 内部構造体と変数を参照する構造体と配列を定義する (LIKE)
    42. DPIN DS QUALIFIED
    43. D INHD LIKEDS(T_INHD) )dim(c_nbinfe)likeds(t_infe)
    44. dincs dim(c_nbincs)likeds(t_i1)likeds(t_i1)
    45. di2 dim(c_nbi2)likeds(t_i2)
    46. **
    47. DPOT DS 認定済み
    48. D OTHD LIKE DS(T_OTHD )
    49. D OTVC DIM(C_NBOTVC) LIKEDS(T_OTVC)
    50. D O1 LIKEDS(T_O1)
    51. D O2 DIM(C_NBO2) LIKEDS(T_O2)
    52. * ** ************ **********
    53. **一時変数の構造(参照定義不可)
    54. DD_VARS DS
    55. **参照する変数の定義データ辞書へ(LIKE)
    56. D V_BKTRWB LIKE(DICT.@ @TRWB)
    57. **参照できない一時変数を定義(カスタマイズ)
    58. D V_NUM 5P 0
    59. ********* ******************* ****************************** **************
    60. **定義 プログラム入口
    61. C *エントリーリスト
    62. C PARM PMG
    63. C PARM PIN
    64. C PARM POT
    65. /無料
    66. EXSR @INIT;
    67. EXSR @CHEK;
    68. EXSR @MAIN;
    69. EXSR @RETN;
    70. EXSR #EXIT;
    71. //---------------- ---- ----
    72. //プログラムの初期化
    73. //------ ------------------------- ---
    74. BEGSR @INIT;
    75. //公的に定義された構造体を初期化します
    76. CLEAR PMG;
    77. CLEAR A_MSDS;
    78. //トランザクション自身の出力インターフェイスを初期化します。OTHD と OTVC はオーバーライド メソッドで初期化されていることに注意してください。
    79. CLEAR POT.O1;
    80. CLEAR POT.O2;
    81. //カスタム構造を初期化します
    82. CLEAR D_VARS;
    83. ENDSR;
    84. //---------- ---------------------- ----------
    85. //入力インターフェースの値が正しいことを確認してください
    86. //------ ------- ----------------
    87. BEGSR @CHEK;
    88. //組織番号が失われているはずです
    89. IF PIN.I1.BKBRNO = *BLANKS;
    90. EVAL PMG.BKMSID = 'EIOND';
    91. EVAL A_MSDS(1) = C_I1;
    92. EVAL A_MSDS(2) = C_MGBRNO;
    93. EXSR #ERR;
    94. ENDIF;
    95. //------------------------------------------
    96. / /プログラムの主な流れ
    97. //------------------------------------- -----
    98. BEGSR @MAIN;
    99. //Change
    100. CLEAR TPSVF1;
    101. CLEAR TPSVF2;
    102. EVAL TPSVF1.BKBRNO = PIN.I1.BKBRNO;
    103. CALLP SCETPSV(PMG:TPSVF1:TPSVF2) ;
    104. EXSR #CHKMS G;
    105. //特定のモジュールのアカウンティングサービスを呼び出す
    106. //CALLP SCETPAC(PMG:TPSVF1:POT.OTVC);
    107. //EXSR #CHKMSG;
    108. ENDSR;
    109. //------ ----------------------------------
    110. //プログラムリターン処理中
    111. //------ ----------------------------------
    112. BEGSR @RETN ;
    113. //登録は配列項目の数を返します
    114. CLEAR TPSVF1;
    115. EVAL CMTAF1.RDYNFG = YNFG_NO;
    116. EVAL CMTAF1.WTYNFG = YNFG_YES;
    117. EVAL CMTAF1.FDFLNM = 'O2RECD';
    118. EVAL CMTAF1 .fdsqnu = v_num;モジュール コンポーネントを呼び出す必要がある場合は、/COPY を使用してコンポーネントの宣言とコンポーネントのパラメーター構造定義の PROTOTYPE を導入します。この部分はコンポーネントの例で紹介されています。
    119. トランザクションのパラメータは3つに統一されます。 1 つ目は PMG (エラー メッセージ構造体) で、メイン コントロールにエラー情報を返し、トランザクションが成功したかどうかを判断し、エラー メッセージを整理するために使用されます。次に PIN です。これは入力複合構造であり、INHD 入力アプリケーション ヘッダー、INFE 入力料金配列、INCS 入力クーポン面配列、I1、I2、およびその他のトランザクション構造自体で構成されます。最後は POT で、複合構造を出力します。複合構造は、OTHD 出力アプリケーション ヘッダー、OTVC 出力会計伝票配列、O1、O2、およびその他のトランザクション構造自体で構成されます。この部分はメッセージ形式のセクションにあります。
    120. すべての一時変数はプログラム内の D_VARS 構造体で定義されているため、初期化が容易になり、CLEAR D_VARS を使用して直接クリアできます。
    121. コンポーネント プログラム テンプレート SCETPSV は、取引プログラム内で呼び出されます。同様に、最初のパラメーターは PMG である必要があります。このように、#CHKMSG と組み合わせて、エラー情報をレイヤーごとに渡すことができます。次に、コンポーネント自体のパラメータがあります。会計コンポーネントの場合、最後のパラメータは、トランザクションによって生成されたすべての会計伝票を順番に再編成し、印刷のためにフロントエンドに返すために層ごとに渡される伝票配列 POT.OTVC である必要があります。既存のシステムの多くは、トランザクション内のすべての借方および貸方の召喚状を反映することしかできませんが、会計原則に従って最小セットを分類したり、各セットに複数の借入や複数のローンが存在しないことを保証したりすることはできません。これは少しできます。
    122. 戻り処理プロセス中、出力に配列が含まれている場合は、このセクションで SNCCMTA を呼び出して、出力配列内の実際の値の数を設定する必要があることに特に注意してください。メイン コントロールは、以下に基づいて戻りメッセージを簡素化します。実際の数値。
    123. コンポーネントプログラムサンプルSCETPSVには、固定PMGパラメータに加えて、2つの独自パラメータF1とF2があります。コンポーネントは、SCETPSVP コンポーネント宣言、SCETPSVF1 および SCETPSVF2 の 2 つのパラメータ構造体定義、および SCETPSV コンポーネント プログラムで構成されます。
      SCETPSVF1パラメータファイルは以下の通りです。

      1. A REF(DICT)
      2. A R RSCETPSVF1
      3. A BKBRNO R REFFLD(@@BRNO)
      4. A COLHDG('組織番号')
      5. A TEXT('組織番号')
      SCETPSVF2パラメータファイルは次のように 。
      1. A REF(DICT)
      2. A R RSCETPSVF2
      3. A MTTLNO R REFFLD(@@TLNO)
      4. A COLHDG('Teller No.')
      5. A TEXT('Teller No.')
      SCETPSVPコンポーネント宣言ファイルは以下のようになります。
      1. **始まり******************************************* **** *******************
      2. **プログラム名:サービスプログラムテンプレートプロトタイプ*
      3. **機能説明:サービスプログラムテンプレートプロトタイプとパラメータインターフェース定義*
      4. * * *
      5. ** バージョン: 2014-10-21_1 *
      6. ** *
      7. ** デザイナー: CSWWM 開発者: CSWWM *
      8. ** 設計日: 2011-08-30 開発日: 2011 -08 -30 *
      9. **----------------------------------------------------- ------- ------------------------*
      10. **メンテナ: CSWYJ *
      11. **メンテ日: 2014 -10-17 *
      12. * *メンテナンス内容:新仕様に合わせて書き換え*
      13. ** *
      14. **END********************* ************** ***********************************
      15. **定数定義
      16. DC_NBTPSVF2 C CONST(50)
      17. *************************
      18. **パラメータインターフェース定義
      19. DTPSVF1 E DS EXTNAME(SCETPSVF1) 修飾済み
      20. DT_TPSVF2 E DS EXTNAME(SCETPSVF2 ) 修飾済みテンプレート
      21. DTPSVF2 DS 修飾済み
      22. D RECD LIKE(DICT.@@RECD)
      23. D ARR DIM(C_NBTPSVF2)いいね(T_TPSVF2)
      24. ****************** *********
      25. **プログラムプロトタイプ定義
      26. DSCETPSV PR EXTPGM('SCETPSV')
      27. D PMG LIKEDS( PMG)
      28. D TPSVF1 LIKEDS(TPSVF1)
      29. D TPSVF2 LIKEDS(TPSVF2)
      ここで、コンポーネント配列はトランザクション インターフェイス配列とは異なることに注意してください。これらはすべて、RECD レコードの実際の数を持つ複合構造です。 。この方法でのみ、最大容量の配列に実際に格納されている有効なレコードの数を知ることができます。
      コンポーネントプログラムSCETPSVファイルは以下の通りです。
      1. **始まり******************************************** *******************
      2. **プログラム名: コンポーネントプログラムテンプレート*
      3. **機能説明: コンポーネントプログラム開発仕様書*
      4. ** *
      5. ** デザイナー: CSWWM 開発者: CSWWM *
      6. **設計日: 2011-08-30 開発日: 2011-08-30 *
      7. **--------------- -------------------------------------------------- - -*
      8. **メンテナンススタッフ:*
      9. **メンテナンス日:*
      10. **メンテナンス内容:*
      11. ** *
      12. **END************ * ************************************************ ** *
      13. H/COPY DSCPPGM,HEAD
      14. ************************************* ***** ********************************
      15. **で宣言されたプログラム演算のデータテーブルFテーブル、同時に宣言 データテーブルの動作モード
      16. **データテーブルの宣言順序は以下の通りです
      17. **1)、動作モードを読み取り専用(I)としてデータテーブルを宣言します);
      18. **2)、動作モードを読み取りとして宣言する (I)、書き込みを行うデータ テーブル (A)、動作モードを変更するように宣言するデータ テーブル (U);
      19. **4)、動作モードが更新(U)、書き込み(A)であることを宣言するデータテーブル
      20. **5)、動作モードが書き込み専用(O)であることを宣言するデータテーブル; facnbrmf uf e k disk infsr(#flex)infds(s_cnbrmf)
      21. fqualified
      22. facntlmfuf a e k disk infsr(#flex)infds(s_cntlmf) ********************************** **************** *****************
      23. **データディクショナリ列挙定数の導入
      24. D/COPY DSCPPGM, ENUM
      25. **プログラムのパブリック構造の導入
      26. D/COPY DSCPPGM,PGDS
      27. ******************************
      28. **ファイル構造定義
      29. DS_CNBRMF DS LIKEDS(FILESDS)
      30. DK_CNBRMF DS LIKEREC(ACNBRMF.RACNBRMF:*KEY)
      31. DR_CNBRMF DS LIKEREC(ACNBRMF.RACNBRMF:*INPUT)
      32. DW_CNBRMF DS LIKEREC(ACNBRMF.RACNBRMF: *OUTPUT)
      33. DS_CNTLMF DS LIKEDS(FILESDS)
      34. DR_CNTLMF DS Lイケレック( ACNTLMF.RACNTLMF:*INPUT)
      35. ************************
      36. ** *LR=*ON
      37. Dで終わるかどうかを決定*/DEFINE USELR
      38. ** 定数定義
      39. DC_F1 C CONST ('コンポーネントプログラムテンプレート')
      40. DC_MGBRMF C CONST ('組織テーブル')
      41. DC_MGBRNO C CONST ('組織番号')
      42. **** **************************
      43. **呼び出しサービスのプロトタイプの紹介
      44. D/COPY CETPEXP,SCETPSVP
      45. ** 構造体と外部構造体を参照する配列 (EXTNAME)
      46. ** 内部構造体と変数を参照する構造体と配列を定義する (LIKE)
      47. ********************* * ********
      48. **一時変数構造体
      49. DD_VARS DS
      50. **データディクショナリを参照する変数を定義(LIKE)
      51. D V_BKBRNO LIKE(DICT.@@BRNO)
      52. * *参照先の一時変数
      53. D V_NUM 5P 0
      54. ************************************ を定義できません******* *******************************
      55. **プログラムエントリー定義
      56. C *ENTRY PLIST
      57. C PARM PMG
      58. C PARM TPSVF1
      59. C PARM TPSVF2
      60. /FREE
      61. EXSR @INIT;
      62. EXSR @CHEK;
      63. EXSR @MAIN;
      64. EXSR #EXIT;
      65. / /------ -------------------------------------- ------- -
      66. //プログラムの初期化
      67. //-------------------------------- ---------- ------------------
      68. BEGSR @INIT;
      69. //公開定義された構造体を初期化します
      70. CLEAR PMG;
      71. CLEAR A_MSDS;
      72. //ファイル読み取りを初期化します ファイル例外構造体を除く操作構造体を取得します
      73. CLEAR K_CNBRMF;
      74. CLEAR R_CNBRMF;
      75. CLEAR R_CNTLMF;
      76. //カスタム構造体を初期化します
      77. CLEAR D_VARS;
      78. ENDSR;
      79. //--- --------------------------------------- ----------- ----
      80. //インターフェースによって渡された値が正しいか確認してください
      81. //------ ----------------- ------------------------
      82. BEGSR @CHEK;
      83. //組織番号が空です
      84. IF TPSVF1.BKBRNO = *BLANKS;
      85. PMG.BKMSID = 'EIOND';
      86. A_MSDS(1) = C_F1;
      87. A_MSDS(2) = C_MGBRNO;
      88. EXSR # ERR;
      89. ENDIF;
      90. ENDSR;
      91. //-- -------------------------------- ------- -----
      92. //プログラムの主な流れ
      93. //----------------------------------------------- --- ----------
      94. BEGSR @MAIN;
      95. K_CNBRMF.BKBRNO = TPSVF1.BKBRNO;
      96. FILEDSP = %ADDR(S_CNBRMF);
      97. CHAIN %KDS(K_CNBRMF) ACNBRMF .RACNBRMF R_CNBRMF;
      98. IF NOT %FOUND(ACNBRMF);
      99. PMG.BKMSID = 'ENTRD';
      100. A_MSDS(1) = C_MGBRMF;
      101. A_MSDS(2) = C_MGBRNO + K_CNBRMF.BKBRNO;
      102. EXSR # ERR;
      103. ENDIF ;
      104. EVAL-CORR W_CNBRMF = R_CNBRMF;
      105. UPDATE ACNBRMF.RACNBRMF W_CNBRMF;
      106. EVAL-CORR TPSVF2.ARR(1) = W_CNBRMF;
      107. ENDSR;
      108. /エンドフリー
      109. C /COPY DSCPPGM ,PGCM
      ここで注意すべき点は、宣言にプロトタイプ定義とパラメーター構造定義が含まれていると考えて、コンポーネント宣言を導入するためにコンポーネント プログラム自体も /COPY を必要とすることです。また、例外ハンドラの導入により、アプリケーションプログラムの記述がよりわかりやすくなり、各種ファイル操作における例外エラー処理を考慮する必要がなくなり、非常に便利ではないでしょうか。



      この時点で、コンポーネントとトランザクションテンプレートが導入されました。このテンプレートに従って、実際に使用されるモジュールプログラムを記述し、トランザクションマスターにハングして実行できます。


      www.bkjia.com本当http://www.bkjia.com/PHPjc/1119675.html技術記事 AS400銀行コアシステム開発における技術概要 - トランザクションとコンポーネントの書き込み * トランザクションとコンポーネントの書き込み Firebird コアシステムの全体構造は、メインコントロール - トランザクション - コンポーネントで構成されます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。