IDocアウトバウンド処理チュートリアル

本チュートリアルでは、SAPシステムのIDoc送信をトリガーとして、SkyOnDemandのスクリプトの実行を行います。
本チュートリアルでは、SAPシステムに登録された品目マスタ情報のIDoc送信を送信し、品目マスタデータをSkyOnDemandで受信し、CSVファイルに書き出します。

品目マスタ情報取得のIDocとして「MATCOR01」を使用します。

チュートリアルにおける構成

本チュートリアルでは、以下の構成を想定しております。環境に合わせて変更してください。

項目名
R/3サーバ r3server00
システム番号 01
クライアント番号 800
論理システム SNDCLNT800

事前準備

  1. RFCユーザの準備
    SkyOnDemand用のRFCユーザを接続先のクライアントに登録します。すでに登録済みの場合は不要です。一般的に、ユーザタイプが通信、もしくはシステムのユーザを作成します。

    RFCユーザの準備画面

イベントの作成

アウトバウンド処理を行うためには、SAP Enterprise Integration Component Server(以下、EICS)にイベントを登録します。EICSの説明については、こちらを参照してください。
  1. EICS起動
    EICSにはWebStudioとは別の設定画面が用意されています。SkyOnDemandフロント画面のサーバー情報の詳細メニューよりEICSへアクセスします。

    EICS概要画面

  2. インテグレーションコンポーネント(Integration Component)作成
    既に他のチュートリアルで作成している場合には、新しくインテグレーションコンポーネントを作成する必要はありません。

    Overviewの[New Integration Component]を押下します。
    または左側の[Integration Components]メニューの[Integration Components]-[New Integration Component]を押下します。

    新規インテグレーションコンポーネント作成画面

    インテグレーションコンポーネント登録画面で以下の値を入力します。各項目に値を入力した後、[Continue]を押下し、インテグレーションコンポーネントを作成します。

    項目名
    Name Tutorial
    Description チュートリアル用インテグレーションコンポーネント

    チュートリアル用インテグレーションコンポーネント作成画面

    チュートリアル用インテグレーションコンポーネント

  3. イベント(Event)の作成
    [New Event]を押下します。

    新規イベント作成画面

    イベント登録画面で以下の値を入力した後、[Continue]を押下します。

    項目名
    NameMATCOR01
    Description品目マスタ送信
    AdapterLibrados SAP Adapter

    基本情報入力画面

    次の画面で接続情報の登録を行います。接続情報登録画面で以下の値を入力します。

    項目名 説明
    Username <SAPシステムに接続可能なユーザ名>
    ここでは「EICS」を入力しています。
    SAPシステムに接続するユーザ名を入力します。
    Password <SAPシステムに接続可能なユーザのパスワード> SAPシステムに接続するユーザのパスワードを入力します。
    Server <SAPシステムのホスト名>
    ここでは「r3server00」を入力しています。
    SAPシステムのホスト名またはIPアドレスを入力します。
    Client <クライアント番号>
    ここでは「800」を入力しています。
    クライアント番号を入力します。
    Language Japanese(JA) 言語を選択します。
    System Number <システム番号>
    ここでは「01」を入力しています。
    システム番号を入力します。
    Connection Pool Minimum Count 2 コネクションプールに関する設定項目です。ここではデフォルトの「2」のままにします。
    Connection Pool Maximum Count 10 コネクションプールに関する設定項目です。ここではデフォルトの「10」のままにします。
    Convert HostName to IP Address True SAPシステムの名前解決の方法に関する設定項目です。ここでは「True」にします。
    Gateway Server <ゲートウェイサービス>
    ここでは「sapgw01」を入力しています。
    SAPシステムで稼働しているゲートウェイサービスを入力します。
    Gateway Host <ゲートウェイホスト>
    ここでは「r3server00」を入力しています。
    SAPシステムが稼働しているサーバのホスト名またはIPアドレスを入力します。

    接続情報入力画面

    [Continue]を押下し、イベント情報登録画面で以下の値を入力します。

    項目名 説明
    Function Name/IDOC Base Type MATCOR01 送信したいIDoc基本タイプを入力します。
    IDOC Extension Type 入力しません IDoc基本タイプを指定するため、ここでは入力しません。
    Program ID MATCOR プログラムIDを入力します。ここでは、「MATCOR」を入力します。
    Sap IDocument True IDocを指定するため、「True」にします。
    Encoding 入力しません IDocセグメントデータのエンコーディングを入力します。ここでは入力しません。
    Reply Type Synchronous 同期実行を行うか、非同期実行を行うかを設定します。ここでは「Synchronous」を選択します。
    Search Category BAPI or RFC BAPIを含むRFC汎用モジュールまたはIDocを検索する際に使用します。
    Search Name 入力しません BAPIを含むRFC汎用モジュールまたはIDocを検索する際に使用します。

    イベント情報入力画面

    [Continue]ボタンを押下し、MATCOR01イベントを作成します。

    MATCOR01

  4. スキーマ確認
    指定した「MATCOR01」から入力されるリクエストデータのスキーマを表示します。[Request Schema]を押下し、リクエストデータのスキーマを表示します。

    リクエストスキーマ

    指定した「MATCOR01」へ返すレスポンスデータのスキーマを表示します。[Response Schema]を押下し、レスポンスデータのスキーマを表示します。

    レスポンススキーマ

  5. 登録プログラム確認
    SAPシステムにログインし、ゲートウェイサービスにプログラムが正常に登録されているか確認します。

    SAP GUIにて、トランザクションコード「SMGW」を実行します。SAPアダプタからの接続である以下のエントリがあることを確認します。

    項目名 内容
    ローカルLU名 <SkyOnDemand Serverが稼働するOSのホスト名またはIPアドレス>
    ローカルTP名 java
    ユーザ名 <SkyOnDemand Serverが稼働するOSのホスト名またはIPアドレス>

    ゲートウェイモニタ画面

    メニューから[ジャンプ]-[クライアントにログオン済]を選択します。

    ゲートウェイモニタメニュー画面

    以下のエントリの存在を確認することにより、プログラムIDが正常に登録されていることを確認します。

    項目名
    LU名 <SkyOnDemand Serverが稼働するOSのホスト名またはIPアドレス>
    TP名 MATCOR
    Syst. Type 登録済みサーバ
    ユーザ名 <SkyOnDemand Serverが稼働するOSのホスト名またはIPアドレス>

    プログラムID確認画面

RFC宛先の設定

アウトバウンド処理を行うためには、SAPシステムでRFC宛先の設定を行います。
  1. RFC宛先の設定
    EICSにて登録したイベントのプログラムを参照するRFC宛先を定義します。SAP GUIにて、トランザクションコード「SM59」を実行します。

    RFC宛先の表示画面

    「TCP/IP接続」を選択し、[登録]を押下します。

    新規RFC宛先登録画面

    RFC宛先登録画面で、以下の値を入力します。

    タブ 項目名
    基本画面 RFC宛先 EICS_MATCOR
      接続タイプ T(TCP/IP接続)
      テキスト1 EICS MATCORイベント用宛先
    技術設定 有効化タイプ 登録済サーバプログラム
      プログラムID MATCOR
      Gatewayホスト <SAPシステムが稼働しているサーバのホスト名またはIPアドレス>
    ここでは「r3server00」を入力しています。
      TCPサービス <SAPシステムで稼働しているゲートウェイサービス>
    ここでは「sapgw01」を入力しています。

    MATCOR RFC宛先基本設定画面

    MATCOR宛先技術設定画面

    RFC宛先接続設定画面

    Unicodeシステムを使用する場合には、[MDMP/Unicode]タブの[対象システムとの通信タイプ]から[Unicode]を選択します。

    Unicodeシステムの場合 入力が終われば、保存します。

  2. 接続テスト
    [接続テスト]を押下し、接続テストを行います。
    接続テストに成功した場合には以下のような画面が表示されます。

    接続テスト成功画面

    接続テストに失敗した場合には、以下を確認してください。

SAPシステムでのIDocに関連する設定

ここでは、「MATCOR01」IDocを実行するために、IDocポート、論理システム、パートナプロファイル、分散モデルの登録を行います。
  1. IDocポートの登録
    IDocデータを登録したRFC定義に渡すためのIDocポートの登録を行います。SAP GUIにて、トランザクションコード「WE21」を実行します。

    IDocポート画面

    「トランザクションRFC」を選択し、登録ボタンを押下します。

    IDocポート登録画面

    IDOCの処理ポートで、以下のように入力します。

    項目名
    独自ポート名 選択
    名称 EICSMATCOR

    IDocポート登録詳細画面

    登録したRFC宛先を割り当て、保存します。

    項目名
    内容説明 EICS MATCOR用RFCポート
    バージョン IDOC レコードタイプ SAP Release 4.x
    RFC宛先 EICS_MATCOR

    IDocポートRFCポート登録詳細画面

  2. 論理システム登録
    対象システムもしくは、SkyOnDemandに該当する論理システムの登録を行います。すでに登録済みの場合は、実施の必要はありません。

    SAP GUIにて、トランザクションコード「BD54」を実行します。以下のような警告が表示されますが、続行してください。
    論理システムは、クライアント非依存情報です。クライアント非依存カスタマイジングが可能なクライアントで実施してください。

    クライアント非依存警告ダイアログ

    [新規エントリ]を押下します。

    ロジカルシステムビュー画面

    新規エントリ追加画面で、以下の値を入力します。

    項目名
    論理 Sys. EICS
    名称 EICS

    新規論理システム作成画面

  3. 自クライアント論理システム確認
    自クライアントに割り当てられている論理システムを確認します。ここで確認した論理システム名は、後ほどの設定で使用します。SAP GUIにて、トランザクションコード「SCC4」を実行します。一覧より、自クライアントのエントリをダブルクリックします。

    クライアント照会概要画面

    項目「論理システム」の名称が、そのクライアントに割り当てられている論理システム名です。通常、<システムID>CLNT<クライアント番号>が論理システムとして割り当てられます。IDocインタフェースを使用する場合、論理システムの割り当ては必須です。論理システムが割り当てられていない場合は、論理システムを新たに作成し、割り当てを行ってください。論理システムの作成および割り当ては、システム管理者のもとで実施してください。

    クライアント照会詳細画面


  4. パートナプロファイル登録
    パートナプロファイルではパートナに対して、メッセージの割り当て、設定を行います。ここでは、パートナである論理システム「EICS」にメッセージ「MATCOR」の割り当て、設定を行います。SAP GUIにて、トランザクションコード「WE20」を実行します。

    パートナプロファイル表示画面

    [登録]を押下します。

    パートナプロファイル登録ボタン画面

    以下のように入力し、保存します。

    項目名
    パートナ番号 EICS
    Partn. Type LS

    パートナプロファイル登録画面

    送信パラメータの下の[送信パラメータ登録]を押下します。

    送信パラメータ画面

    送信パラメータ設定画面で以下を入力します。

    項目名
    Message Type MATCOR
    受信側ポート EICSMATCOR
    出力モード IDocの即時転送
    基本タイプ MATCOR01

    送信パラメータ基本設定画面
    IDoc送信時にトランザクションコード「SM58」またはserver.error.logで「com.sap.conn.jco.JCoRuntimeException: (101) dataspider_handle_request: null」が発生した場合、「IDOCタイプのSeg.リリース」に適切な値を設定することでエラーが解消する可能性があります。適切な値の確認手順は以下の通りです。
    1. トランザクションコード「WE63」を実行します。
    2. 「Segm.リリース」に表示される値を確認します。

    入力が完了後、エンターを押下します。

    送信パラメータ個別設定画面

    設定を保存します。

  5. 分散モデル登録
    分散モデルでは、メッセージの分散先を一定の条件で決定したり、フィルタをかけることが可能です。SAP GUIにて、トランザクションコード「BD64」を実行します。

    分散モデル照会画面

    「照会/編集モードの切り替え」ボタンを押下し、編集モードに変更します。

    分散モデル編集切り替えアクション画面

    「モデルビューの生成」ボタンを押下します。

    分散モデル登録ボタン画面

    モデルビュー登録画面で以下の値を入力し、登録します。

    項目名
    テキスト EICS IDOCモデルビュー
    技術名称 EICS

    分散モデル登録画面

    登録した「EICS IDOCモデルビュー」のエントリを選択し、[メッセージタイプの追加]を押下します。

    DATASPIDER分散モデル

    メッセージタイプ追加画面で以下の値を入力し、保存します。

    項目名
    モデルビュー EICS
    送信側 <自クライアントの論理システム名>
    ここでは「SNDCLNT800」を入力してます。
    レシーバ EICS
    メッセージタイプ MATCOR

    メッセージタイプ追加画面

    分散モデル設定完了画面

アウトバウンド処理用スクリプトの作成

SAPシステムからのアウトバウンド処理をSAPトリガーで受信し、スクリプトを起動します。スクリプトの中でSAPシステムから渡されたIDocデータをCSVファイルに保存します。

  1. テストスクリプトの完成イメージ

    スクリプト完成画面

  2. CSVファイルを保存するディレクトリの作成
    SAPシステムから渡されたIDocデータ受け取るCSVファイルを保存するディレクトリを作成します。「/data/sap/idoc_outbound」に保存します。

    項目名
    パス /data/sap/idoc_outbound

    ディレクトリの作成はエクスプローラで[ファイル]-[新規作成]-[ディレクトリ]を選択、または、右クリックメニューから作成することができます。

    出力データ保存用ディレクトリ画面

  3. スクリプトの作成
    以下の内容でスクリプトを作成します。

    項目名
    プロジェクト名 SAPアダプタチュートリアル
    スクリプト名 IDocアウトバウンド

    スクリプトの右クリックメニュー[新規作成]-[スクリプト変数]から入力変数を作成します。

    項目名
    変数名 in_xml
    変数型 XML型
    スクリプト入力変数として使用する チェックします

    スクリプト入力変数作成画面

    スクリプトの右クリックメニュー[新規作成]-[スクリプト変数]から出力変数を作成します。

    項目名
    変数名 out_xml
    変数型 XML型
    スクリプト出力変数として使用する チェックします

    スクリプト出力変数作成画面


  4. アウトバウンド入力処理の作成
    [アプリケーション]-[SAP]-[アウトバウンド入力]をスクリプトキャンバスにドラッグ&ドロップします。 アウトバウンド入力処理の設定画面で以下の値を入力し[完了]を押下します。

    カテゴリ 項目名
    基本設定 名前 入力スキーマの読み取り
      入力データ in_xml
    必須設定 インテグレーションコンポーネント Tutorial
      イベント MATCOR01

    入力スキーマ読み取り処理作成画面

    ここではスクリプト入力変数「in_xml」のデータをそのままアウトバウンド入力処理「入力スキーマの読み取り」に渡すため、マッピングの必要はありません。

    入力スキーマ読み取り処理完了画面

  5. CSVファイル書き込み処理の作成
    アウトバウンド処理で渡されるデータをCSVアダプタを使用し、CSVファイルに書き込みます。
    [ファイル]-[CSV]-[CSVファイル書き込み]をスクリプトキャンバスにドラッグ&ドロップします。 CSVファイル書き込み処理の設定画面で以下の値を入力し[完了]を押下します。

    カテゴリ 項目名
    基本設定 名前 CSVファイルの書き込み
      入力データ 入力スキーマの読み取り
    必須設定 ファイル /data/sap/idoc_outbound/master.csv
      列一覧/列名 変更タイプ
    品目コード
    品目タイプ
    品目グループ
    製品部門
    品目テキスト
    [列一覧][追加]を押下し[列名]を追加します。
    書き込み設定 上書き チェックします
      追加書き込み チェックします

    CSVファイル書き込み処理必須設定画面

    CSVファイル書き込み処理書き込み設定画面

  6. アウトバウンド入力処理からCSVファイル書き込み処理へのマッピングの作成
    アウトバウンド入力処理からCSVファイル書き込み処理へドラック&ドロップすると[フローを引く]ダイアログが表示されます。表示されない場合は、一旦データフローを削除してから操作してください。

    マッピングの追加画面

    SAPアダプタはXML型、CSVアダプタはテーブルモデル型のため、Mapperを使用しデータをマッピングする必要があります。Mapperを使用しデータのマッピングを行うため[データフローを引く]を選択して[マッピングを追加する]にチェックをいれます。

    アウトバウンド入力処理「入力スキーマの読み取り」とCSVファイル書き込み処理「CSVファイルの書き込み」の間に「mapping」が追加されます。

    CSVファイル書き込み処理完了画面

    追加したマッピングの名前を「mapping」から「SAP→CSV」に変更します。マッピングアイコンを選択し、プロパティインスペクタから以下のように変更します。

    カテゴリ 項目名 変更前の値 変更後の値
    基本設定 名前 mapping SAP→CSV

    「SAP→CSV」を開き、以下のようにマッピングします。「言語キー(SPRAS)」が「J」となる品目マスタ情報のみCSVファイルに出力するようにマッピングしています。

    入力元項目名 ロジックアイコン名 出力先項目名
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/MSGFN   変更タイプ
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/MATNR   品目コード
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/MEINS   品目タイプ
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/MATKL   品目グループ
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/SPART   製造部門
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/E1MAKTC [繰り返し]-[条件指定]-[条件による抽出]
    • 条件:
      [条件]-[文字列]-[同じ]
      • ハンドラ1:
        /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/SPRAS
      • ハンドラ2:
        [文字列]-[基本]-[単一行文字列定数]
    品目テキスト
    /REQUEST/IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_DATA_REC_40/E1MARAC/SDATA/MAKTX   品目テキスト

    SAPからCSVへのマッピング

    [条件による抽出]ロジックアイコンをダブルクリックし、プロパティ設定ダイアログで以下の値を入力し[完了]を押下します。

    項目名
    ラベル 「J」にマッチした品目マスタ情報のみ抽出

    条件による抽出ロジックアイコン作成画面

    [同じ]ロジックアイコンをダブルクリックし、プロパティ設定ダイアログで以下の値を入力し[完了]を押下します。

    項目名
    ラベル 「J」と一致するか?

    同じロジックアイコン作成画面

    [単一行文字列定数]ロジックアイコンをダブルクリックし、プロパティ設定ダイアログで以下の値を入力し[完了]を押下します。

    項目名
    ラベル J
    一行文字列 J

    単一行文字列定数ロジックアイコン作成画面

  7. スクリプトの完成
    作成した各アダプタをプロセスフローで結び、スクリプトが完成します。以下の順にプロセスフローを結びます。

    順序 名前
    1 入力スキーマの読み取り
    2 SAP→CSV
    3 CSVファイルの書き込み

    スクリプト完成画面

  8. サーバへの登録
    SAPトリガーから作成したスクリプトを起動できるようにするために、サーバに登録する必要があります。デザイナの[ファイル]-[プロジェクトをサービスとして登録]を選択し、サーバに登録します。

SAPトリガーの作成

SAPシステムからのアウトバウンド処理を受信し、作成したスクリプトを実行するSAPトリガー作成します。

  1. トリガーの作成
    マイトリガーを開きます。

    マイトリガー画面

    マイトリガーのタスクから[新しいSAPトリガーを作成する]を選択し、SAPトリガーの設定画面を表示します。

    新規トリガー作成画面

    SAPトリガーの設定画面で以下の値を入力し、[次へ]を押下します。

    項目名
    トリガー名 MATCOR01受信
    コンポーネント Tutorial
    イベント MATCOR01

    MATCOR01受信トリガー基本設定作成画面

    実行内容の設定画面で以下の値を入力します。

    項目名
    実行ユーザ名 <実行するユーザ名>
    ここでは「root」を入力しています。
    パスワード <実行するユーザのパスワード>
    プロジェクト <スクリプトを作成したユーザ名>@SAPアダプタチュートリアル
    ここでは「root@SAPアダプタチュートリアル」を入力しています。
    スクリプト IDocアウトバウンド

    MATCOR01受信トリガー実行設定作成画面

    以下のように[スクリプト引数][スクリプト出力]の設定を行った後、[完了]を押下し、トリガーを作成します。

    項目名 変数名
    スクリプト引数 in_xml ${trigger.standardInput}
    トリガー固定の変数です。
    スクリプト出力 out_xml ${trigger.standardOutput}
    トリガー固定の変数です。

    MATCOR01受信トリガー引数設定作成画面

    スクリプト引数の値をフォーカスし、三角ボタンを選択すると、高度な操作画面が表示されます。高度な操作画面からSAPトリガーの入力変数、出力変数を選択し、[スクリプト引数]および[スクリプト出力][値]を設定することができます。

    高度な操作メニュー画面

    トリガー有効の確認画面で[はい]を押下し、トリガーを有効にします。トリガーを有効にすることでSAPシステムからのアウトバウンド処理を受信できる状態になります。

    トリガー有効確認ダイアログ

    MARCOR01受信トリガー

  2. テスト実行
    今回のテスト実行では、「EICS」論理システムに対して、「MATCOR01」IDocを送信します。SAP GUIにて、トランザクションコード「BD10」を実行します。

    品目マスタ送信画面

    品目マスタ送信画面で以下の値を入力し、実行します。
    項目名
    品目 <送信する品目の品目ID>
    ここでは「1500*」と入力しています。
    クラス <送信する品目の品目クラス>
    ここでは入力しません。
    メッセージタイプ(標準) MATCOR
    論理システム EICS
    全品目データ送信 チェックします

    品目マスタ送信実行画面

    品目マスタIDOCメッセージ設定画面

    品目マスタIDOCメッセージ生成画面

    また、マイトリガーで「MATCOR01受信」トリガーの状態をみると、[最終実行結果]に「正常終了」と表示されます。

    MATCOR01トリガー実行成功画面

    トリガーからスクリプトの実行に成功すると、/data/sap/idoc_outbound/master.csvに以下のデータが出力されます。

    項目名
    ファイルパス /data/sap/idoc_outbound/master.csv
    内容
    005,1500-100,LTR,004,,塗料 (青)
    005,1500-300,PCE,009,02,標準尾灯組立品
    005,1500-500,QT,010,,10W30 モーターオイル QT.
    005,1500-510,GAL,010,,10W30 モーターオイル GAL
    005,1500-520,CSE,010,,10W30 モーターオイルケース
    005,1500-520-01,CSE,010,,10W30 モーターオイルケース
    005,1500-600,QT,010,,10W40 モーターオイル QT.
    005,1500-610,GAL,010,,10W40 モーターオイル GAL
    005,1500-620,CSE,010,,10W40 モーターオイルケース
    005,1500-700,QT,010,,10W50 モーターオイル QT.
    005,1500-710,GAL,010,,10W50 モーターオイル GAL
    005,1500-720,CSE,010,,10W50 モーターオイルケース
    

    品目マスタCSVデータ