IDOCとは?基本の解説
この記事では、IDOCの設定方法および接続設定に関する解説をする。
IDOCとは、SAP環境同士でデータ連携を行うための仕組み。
IDOCによるデータ連携では、送信元SAPシステムはあらかじめ定義された構造体に対し値を格納し、相手先SAPシステムに渡す。
相手先SAPシステムは、予め同一の構造体を用意しておき、値を受け取る。
標準のIDOC構造体はSAPのデータベース構造を前提としてデザインされており、SAP標準のマスタやトランザクションデータをそのまま受け渡すことが出来るようになっている。
ちなみに、SAP同士ではなくとも、ERPパッケージであればSAPへのIDOCを用いたコネクタを標準装備しているケースも多い。
IDOC設定方法
IDOC構造の定義
IDOCはメッセージタイプ>基本タイプ>セグメント>項目という構造で定義する。
まずは全体像を図示する。(SAP標準の会計伝票連携用のメッセージタイプFIDCC1を例とする)
メッセージタイプ定義(Tr:WE81)
まずIDOCのメッセージタイプをここで定義しておく。
標準のIDOCメッセージタイプは多数あり、あらゆるSAP標準伝票の連携に対応している。
上図に示したFIDCC1というメッセージタイプは、FI会計伝票を連携するためのもの。
標準のタイプだけでなく、独自のメッセージタイプを定義することも可能。
基本タイプ(拡張タイプ)のメッセージタイプへの割当(Tr:WE82)
メッセージに対して基本タイプおよび拡張タイプを割り当てるためのトランザクション。
拡張タイプとは、基本タイプだけではカバーできないアドオン項目を標準の基本タイプに付加したいときに使う。
Tr:WE82では、一つのメッセージタイプに対し、基本タイプを一つ、拡張タイプを一つ割り当てできる。
基本タイプ(拡張タイプ)定義(Tr:WE30)
基本タイプと拡張タイプ、およびそれらに従属するセグメントの割当を行う。
セグメント定義(Tr:WE31)
セグメント内に項目を定義する。
標準のセグメントはSAPリリースバージョンにより、随時アップデートされているので、バージョン違いのSAP同士で連携する場合には使用するセグメントバージョンについて予め認識を合わせる必要がある。
様々なメッセージタイプ
DEBMAS 得意先マスタ
CREMAS 仕入先マスタ
GLMAST 勘定コードマスタ
COSMAS 原価センタマスタ
PRCMAS 利益センタマスタ
IDOC連携に関わる設定
グローバル会社コード(システム間会社コード)(Tr:OB72)
システム間通信(IDOC)における会社コードの定義。
会社コードはSAPシステム構築時にコード値を定義するが、当然ながら、システムごとに会社コードの値はバラバラになる。
IDOC連携をする際、SAP標準には会社コードが入っていることが多い。
IDOCに乗って会社コードの値が連携されてくると、通常は自システムと相手先システムで使っている会社コードは違うので、会社固コード値が不整合となる。
そこで、相手先システムで使用している会社コードを定義しておく必要がある。
Tr:OB72を用いてグローバル会社コード(システム間会社コード)として、相手先で使用している会社コードを定義しておく。
これが未設定だと、グローバル会社コードが存在しない旨のエラーが発生する。
会社コードのシステム間会社コードへの割当(Tr:OBB5)
IDOC受信の際には、グローバル会社コードをローカル会社コード(自システムにおける会社コード)に割り当てておく。
こうすることで、IDOC受信の際に、相手先システムにおける会社コードを、受信側システムの会社コードに置き換えをしてくれる。
この置き換え処理は、受信した際に早い段階で処理されており、パートナープロファイルで読み替えや変換処理の汎用モジュールを定義していても、それに先立って実行される。
汎用モジュールでは置き換えできないので、グローバル会社コードの設定は必須となる。
RFC宛先の照会と更新(Tr:SM59)
RFC(Remote function call)宛先の設定を行う。
アプリケーションレベルでの接続先設定を行うためのトランザクション。
R/3接続、内部接続、TCP/IP接続、HTTP接続などの接続タイプがある。
今回はR/3接続(接続タイプ:3)をベースに解説する。
・新規作成の場合
登録ボタンを押下する。
接続タイプを指定すると、接続タイプに応じた入力項目が表示される。
・技術設定タブ
主にR/3接続においては対象ホスト(IPアドレスやホスト名)、ゲートウェイオプションを入力する。
・Logon/セキュリティタブ
相手先のクライアント番号、ユーザ、パスワードを入力しておく。
自システムではなく相手先システムのものであることに注意が必要。
RFC接続というのは相手側システムにログオンしてデータを渡したり、何らかの処理をトリガするもの、というイメージで考える。
IDOC処理のポート(Tr:WE21)
ここではポートの設定を行う。
ポートタイプに「トランザクションRFC」や「XML HTTP」などが並んでいるが、今回はR/3接続をベースにしているので、「トランザクションRFC」下に新規ポートIDを作成する。
新規ポートIDに対し、Tr:SM59で作成したRFC宛先を割り当てる。
定義:論理システム(Tr:SPRO)
データ送信をしてくる相手先のシステムについて、10桁の論理名を定義しておく。
このコードは何でもいい。Tr:SM59とコードをそろえておくと管理しやすいが、混同もしやすくなるので注意が必要。
パートナープロファイル(Tr:WE20)
パートナープロファイルでは、相手先システムごとに、送信するIDOCメッセージタイプおよび、受信するメッセージタイプを定義しておく。
予め論理システムを定義しておくと、「パートナータイプLS」に相手先の論理システム名が表示されている。
相手先の論理システム名をクリックし、メッセージタイプを設定していく。
送信用と受信用で設定するボックスが分かれている。
送信パラメータ
自システムから相手先システムに送信するIDOCに関連した設定を行う場所。
メッセージタイプ欄にIDOCメッセージタイプを指定する。
・受信側ポート
次画面においては、まず受信側ポートを設定する。ポートはTr:WE21で設定したIDを指定する。
・出力モード
出力モードは「IDOC即時転送」「複合IDOC」から選べるようになっているが、IDOC即時転送はIDOCを生成したらすぐに送信を行うモードとなる。複合IDOCはいったん滞留するので、Tr:BD87で「実行」してあげる必要がある。
・IDOCタイプ
ここでは基本タイプ・拡張タイプのコードを設定する。
受信パラメータ
相手先システムから自システムに受けるIDOCに関連した設定を行う場所。
・Process code
プロセスコードを設定する。
プロセスコードの中には、汎用モジュールを設定できる。
(プロセスコード設定画面で、処理タイプ「汎用モジュール」を選択)
受信したIDOCに対して、独自にコーディングした処理を行うことが出来る。
・汎用モジュールによる処理
Process codeに設定した処理を即時実行するのか、IDOCをいったん滞留させておくのかを選ぶことが出来る。
分散モデル(Tr:BD64)
分散モデルと和訳されているので意味が分かりづらいが、英語ではDistribution Modelなので、本当は「配信モデル」と言った方が正しい。
ここでは相手システムへの配信に関わる設定を行う。
まずメニューの【分散モデル >処理モード切替】で、編集モードに切り替える。
「モデルビューの生成」ボタンから、モデルビュー(どのシステムから、どのシステムに、どのようなメッセージタイプを配信または受信するのかを格納するオブジェクト)を生成する。
任意のIDで作成する。
モデルビューを生成したら、次に「メッセージタイプの追加」により、追加する対象のモデルビュー、受信側システム、送信側システムを定義する。(論理システムIDを設定)
ここで、メッセージタイプに対してデータフィルタを設定できる。
特定条件(組織、コード等)のもののみを送るまたは送信しないといった設定が可能。
フィルタ設定にはまずTr:BD59でセグメントのどの項目にフィルタをしたいか、予め定義しておく必要がある。
データフィルタの設定(Tr:BD59)
分散モデルでデータフィルタの値を定義するために、データフィルタの対象項目をTr:BD59から設定する。
BD59の画面では、メッセージタイプに対してフィルタ条件(セグメントIDと、セグメント内の項目ID)を指定する。この画面では「ALE Object type」という項目も必須入力になっているが、これは任意の文字列でも通るようだ。(ちなみにALE Object typeはTr:BD95から設定)
ここで設定した項目IDに対して、分散モデルでの設定でフィルタ条件となる値を指定できるようになる。
IDOCのデータ確認方法
送受信に関わるIDOCのデータやステータスを確認するための機能やテーブルを紹介する。
ALEメッセージのステータスモニター(Tr:BD87)
送信または受信IDOCごと、メッセージタイプごとに、ステータス(赤なら受信時のエラー、黄色は実行待ち、緑は正常終了)を確認することが出来る。
また、IDOCの中身の値や、ステータスメッセージに関しても確認できる。
IDOC一覧(Tr:WE05)
IDOCを選択条件に応じて一覧化できる。
メッセージタイプごとに、左側に階層フォルダ表示がされている。
画面上部の「特定セグメント一覧」ボタンを押下してポップアップする小ウインドウにて、セグメントのIDを指定することにより、そのセグメントレベルでIDOCデータを一覧化することが出来る。
たとえば、会計伝票(メッセージタイプFIDCC1)であれば下記の通り。
・ヘッダレベルの一覧:E1FIKPF
・明細レベルの一覧:E1FISEG
トランザクションRFC(Tr:SM58)
IDOC送信時など、Tr:BD87のステータスは緑でも、Tr:SM58上ではエラーとなっている場合がある。
(相手先システムに何らかの理由で届かなかった場合など)
相手先システム未着の場合は、ここのログを確認する必要がある。
IDOCデータのDBテーブル(テーブル:EDID4)
セグメント名を項目に含むテーブルのため、一覧化した抽出の際にはこのテーブルも活用できる。
より詳しく学びたい方へ(参考書、専門書のご紹介)
・ファーストステップABAP入門 (Espresso Tutorials)
ABAPを勉強したい人向けの入門書。めずらしく日本語で書かれており、図表付きで初学者の導入にはかなり良いカンジの参考書となっている。
・ABAP to the Future (3rd edition updated and expanded)
次世代のSAP動向を勉強したいのであれば、ABAP to the Future (3rd edition updated and expanded)もおススメできる。
これも英語だが、2025年問題(現2027年問題)以降のSAP業界を技術者として生きていくのであれば、押さえておくべき重要知識が詰まっている。