
推奨する
2 つのデータ転送方法のうち、処理が速いのは CALL TRANSACTION USING を使用したバッチインプットデータ処理です。この方法では、旧システム上のデータはデータ転送プログラムのインラインで処理されます。詳細については、
データ転送方法の選択を参照してください。構文
:CALL TRANSACTION <tcode>
USING <bdc_tab>
MODE MODE <mod
UPDATE UPDATE <updat
<tcode>
: トランザクションコード<bdc_tab>
: BDCDATA 構造の内部テーブル<mode>
: 照会モード :A |
すべてを表示 |
E |
エラーだけを表示 |
N |
表示なし |
<update>
: 更新モード :S |
同期 |
A |
非同期 |
L |
ローカルでの更新 |
CALL TRANSACTION USING
を使用して旧システム上のデータを処理しているプログラムの場合、以下のステップを実行しなければなりません。CALL TRANSACTION 'TFCA' USING BDCDATA
MODE 'A'
UPDATE 'S'.
MESSAGES INTO MESSTAB.
IF SY-SUBRC <> 0.
<Error_handling>.
ENDIF.
MODE
パラメータMODE
パラメータを使用して、データ転送処理を発生時に表示するかどうかを指定できます。3つのモードから選択できます。A
すべてを表示。プログラムの実行時に、すべての Dynpro とその中に入るデータが表示されます。N
表示なし。エラーの有無にかかわらず、すべての Dynpro は非表示で処理されます。トランザクション処理の終了と同時に制御はプログラムに戻ります。E
エラーのみを表示。 Dynpro のいずれかでエラーが発見されると同時にトランザクションは照会モードになります。その後、エラーを修正することができます。照会モードは、バッチインプットセッションの処理で利用できるものと同じです。
UPDATE
パラメータUPDATE
パラメータを使用して、トランザクションによる更新の処理方法を指定できます。以下のモードから選択することができます。A
非同期更新。このモードでは、コールされるトランザクションはそのトランザクションで作成される更新の終了を待ちません。単に更新処理を SAP 更新サービスに渡すだけです。したがって、通常は、非同期処理を利用すればデータ転送プログラムは高速に実行されます。データの量が多い場合は、非同期処理は推奨できません。なぜなら、非同期更新処理では、コールされるトランザクションは更新モジュールからの終了メッセージを受信しないからです。したがって、コールする方のデータ転送プログラムはコールされるトランザクションがデータベースの更新に正常に終了したかどうかを判断することができません。
非同期更新処理を利用する場合、更新管理機能
( トランザクション SM12) を使用してセッション処理中に更新処理が異常終了したかどうかをチェックする必要があります。エラー分析とリカバリについては同期更新処理の場合ほど便利ではありません。S
同期更新。このモードでは、コールされるトランザクションはそのトランザクションで作成される更新処理の終了を待機します。コールされるトランザクションは更新処理の終了を待機するため、非同期更新処理よりも実行速度は遅くなります。ただし、コールされるトランザクションはプログラム内で発生した更新エラーメッセージを返すことができます。エラーの分析とリカバリははるかに容易になります。L
ローカルでの更新。データをローカルで更新すると、データベースは個別のプロセスでは更新されず、呼出元プログラムの処理内で更新されます。 ( 詳細については、 SET UPDATE TASK LOCAL のキーワード文書を参照してください。 )MESSAGES
パラメータMESSAGES
を指定すると、 CALL TRANSACTION USING の処理中に発行されるシステムメッセージはすべて内部テーブル <MESSTAB> に書き込まれます。内部テーブルの構造は BDCMSGCOLL でなければなりません。
以下のようにコーディングすれば、トランザクション
TFCA が発行するメッセージをすべてテーブル MESSTAB に記録することができます。この例では、存在しないフライト番号を使用してトランザクションでエラーをトリガしています。
DATA: BEGIN OF BDCDATA OCCURS 100.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA: BEGIN OF MESSTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF MESSTAB.
BDCDATA-PROGRAM = 'SAPMTFCA'.
BDCDATA-DYNPRO = '0100'.
BDCDATA-DYNBEGIN = ‘X’.
APPEND BDCDATA.
CLEAR BDCDATA.
BDCDATA-FNAM = 'SFLIGHT-CARRID'.
BDCDATA-FVAL = 'XX'.
APPEND BDCDATA.
BDCDATA-FNAM = 'SFLIGHT-CONNID'.
BDCDATA-FVAL = '0400'.
APPEND BDCDATA.
CALL TRANSACTION 'TFCA' USING BDCDATA MODE 'N'
MESSAGES INTO MESSTAB.
LOOP AT MESSTAB.
WRITE: / MESSTAB-TCODE,
MESSTAB-DYNAME,
MESSTAB-DYNUMB,
MESSTAB-MSGTYP,
MESSTAB-MSGSPRA,
MESSTAB-MSGID,
MESSTAB-MSGNR.
ENDLOOP.
戻り値
:値 |
説明 |
0 |
正常終了 |
<=1000 |
ダイアログプログラムでエラー |
> 1000 |
バッチインプットエラー |
システム項目
名称 : |
説明 : |
SY-MSGID |
メッセージ ID |
SY-MSGTY |
メッセージタイプ (E 、 I 、 W 、 S 、 A 、 X) |
SY-MSGNO |
メッセージ番号 |
SY-MSGV1 |
メッセージ変数 1 |
SY-MSGV2 |
メッセージ変数 2 |
SY-MSGV3 |
メッセージ変数 3 |
SY-MSGV4 |
メッセージ変数 4 |
エラー分析と再実行機能
セッションを使用したバッチインプット方法とは異なり、
CALL TRANSACTION USING 処理では、不適切なトランザクションに関して、何ら特別な処理を行いません。エラーを含んでいたり、更新作成に失敗したトランザクションを再実行する機能はありません。更新モード
S ( 同期更新処理 ) を使用し、 CALL TRANSACTION USING からの戻り値をチェックすることで不適切なトランザクションの処理を行うことができます。戻り値が 0 でない値の場合、以下のことを行う必要があります。