7 SAP CDHDR表での変更検出のための拡張結合処理の使用
SAPシステム表のCDHDR
には、MARA
などのSAPビジネス表のデータ変更に関する情報が格納されます。それ以外のデータでは、(連結された)ビジネス・キー(フィールドCDHDR.OBJECTID
)、変更タイプおよび変更タイムスタンプ(フィールドCDHDR.UDATE
およびUTIME
)が含まれます。
この例では、ビジネス・キーは材料番号(MARA.MATNR)
です。v42以降、SAP ERP/ECCのODI SAPアダプタでは、結合条件での部分文字列操作がサポートされます。この章では、SAP表のMARA
とCDHDR
の間に複雑な結合式を使用して、新規、変更済または削除済のMARA
レコードのみを抽出する方法の例を示します。
MARA
の場合、次のフィルタ/結合条件を適用して、CDHDRの使用により関連する変更を識別できます。
-
CDHDRのレコード・タイプ・フィルタ:
CDHDR.OBJECTCLASS = 'MATERIAL'
-
CDHDR
の時間フィルタ: タイムスタンプ(CDHDR.UDATE, CDHDR.UTIME)
は、最終抽出タイムスタンプより大きく、現在のタイムスタンプより小さくなります -
結合条件:
CDHDR.OBJECTID
の最初の18文字は、MARA.MATNR
に一致します
注意:
他のオブジェクト・クラスとそのオブジェクトIDの構成/ビジネス・キーについては、SAPチームに連絡してください。次の項では、デルタ抽出のODIシナリオの構築に必要なすべての手順について説明します。パッケージの実行ごとに、前回の実行以降に発生したMARA
の変更が抽出され、その変更がOracleターゲット表に適用されます。
必要なツールとバージョン
- ODIバージョン — Oracle Data Integratorバージョン12.2.1
- オープン・ツール・バージョン — Oracle SAP Connectorバージョン10.1.3.23
- JCoバージョン
- JCo API — 3.0.17 (2017 –07–17)
- JCoミドルウェア — JavaRfc 2.2.20
- JCoライブラリ — 721.913
- JCoアーカイブへのパス — c:\Oracle\Middleware\Oracle_Home1\odi\sdk\lib\sapjco3.jar
- JCoライブラリへのパス — c:\Oracle\Middleware\Oracle_Home1\odi\sdk\lib\sapjco3.dll
- SAP KMビルド番号 - 42
- IKM - IKM Oracle Incremental Update
変数の作成
拡張結合条件を使用したマッピングの作成
CDHDR
およびMARA
として結合できる単純なマッピングを作成し、2つのフィルタを使用してSAPからデータを抽出して、MARA_REPLICATED
というターゲットOracle表に格納します。
マッピングでのフィルタ条件の使用
フィルタ条件を使用して、関連するデータ変更ログ・エントリを選択できます。次に、2つのフィルタを示します。CDHDR
のOBJECTCLAS
に加え、次のフィルタでは、前述の日時に関連するいくつかの変数を使用して、更新済レコードを抽出します。
-
フィルタ1には次の条件が含まれます。
CDHDR.OBJECTCLAS = 'MATERIAL'
-
フィルタ2には次の条件が含まれます。
次の条件に基づいて、まだ抽出されていない更新済レコードのみを取得できます。
(CDHDR.UDATE > #SAP.LAST_EXTR_DATE OR (CDHDR.UDATE = #SAP.LAST_EXTR_DATE AND CDHDR.UTIME > #SAP.LAST_EXTR_TIME)) AND (CDHDR.UDATE < #SAP.CURR_DATE OR (CDHDR.UDATE = #SAP.CURR_DATE AND CDHDR.UTIME <= #SAP.CURR_TIME))
更新済レコードを抽出するためのパッケージの作成
次に示す手順に従って、パッケージを作成します。このパッケージには、いくつかの日付および時間範囲のODI変数が含まれており、前述のマッピングも作成します。
次に示すように、パッケージを作成するステップは8つあります(ステップ階層と呼ばれます)。
変数の設定: 次に示すように、LAST_EXTR_TS変数の値を設定します。
最終抽出タイムスタンプ・パラメータの理解
レコードを抽出する前に、最終抽出タイムスタンプ・パラメータをチェックして、レコードが抽出された正確な時間を確認する必要があります。最終抽出タイムスタンプのデフォルト値は00000000:000000であり、最初の実行後に履歴からその値が取得されます。
パッケージの実行
すべての更新済レコードを抽出するためのシナリオの実行
Create_Target_Table
オプションをTrue
に設定します。
-
マッピング・フローの変更
-
パッケージの実行 — 次に、パッケージを実行して、特定の日付まで更新されたすべてのレコードを抽出します。パッケージを初めて実行する場合、最終抽出タイムスタンプ・パラメータからデフォルト値が取得されます。
-
抽出されたレコードのチェック — パッケージの実行に成功すると、関連するレコードがOracleターゲット・データベースに挿入されます。
-
抽出されたレコード — 次に示すように、ターゲット・データベースで抽出されたレコードを検索します。