データ転送での CALL TRANSACTION USING の使用 

推奨する 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 を使用して旧システム上のデータを処理しているプログラムの場合、以下のステップを実行しなければなりません。

  1. 実行するトランザクション用の BDCDATA 構造を用意してください。
  1. CALL TRANSACTION USING 命令を使用してトランザクションをコールし、 BDCDATA 構造を用意してください。次に例を示します。

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.
以下の図では、 CALL TRANSACTION USING からの戻り値と、コールされるトランザクションからのメッセージ情報を含むシステム項目を示します。戻り値表に示すように、 1000 より大きな戻り値はデータ転送用に予約されています。 MESSAGES INTO < テーブル > オプションを利用する場合、以下に示すシステム項目をクエリする必要はありません。つまり、その内容は自動的にメッセージテーブル内に書き込まれます。メッセージテーブル上をループして、テーブル内にメッセージを書き出すことができます。

戻り値 :

説明

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 でない値の場合、以下のことを行う必要があります。