7 SAP CDHDR表での変更検出のための拡張結合処理の使用

SAPシステム表のCDHDRには、MARAなどのSAPビジネス表のデータ変更に関する情報が格納されます。それ以外のデータでは、(連結された)ビジネス・キー(フィールドCDHDR.OBJECTID)、変更タイプおよび変更タイムスタンプ(フィールドCDHDR.UDATEおよびUTIME)が含まれます。

この例では、ビジネス・キーは材料番号(MARA.MATNR)です。v42以降、SAP ERP/ECCのODI SAPアダプタでは、結合条件での部分文字列操作がサポートされます。この章では、SAP表のMARACDHDRの間に複雑な結合式を使用して、新規、変更済または削除済のMARAレコードのみを抽出する方法の例を示します。

MARAの場合、次のフィルタ/結合条件を適用して、CDHDRの使用により関連する変更を識別できます。

  • CDHDRのレコード・タイプ・フィルタ: CDHDR.OBJECTCLASS = 'MATERIAL'

  • CDHDRの時間フィルタ: タイムスタンプ(CDHDR.UDATE, CDHDR.UTIME)は、最終抽出タイムスタンプより大きく、現在のタイムスタンプより小さくなります

  • 結合条件: CDHDR.OBJECTIDの最初の18文字は、MARA.MATNRに一致します

注意:

他のオブジェクト・クラスとそのオブジェクトIDの構成/ビジネス・キーについては、SAPチームに連絡してください。

次の項では、デルタ抽出のODIシナリオの構築に必要なすべての手順について説明します。パッケージの実行ごとに、前回の実行以降に発生したMARAの変更が抽出され、その変更がOracleターゲット表に適用されます。

必要なツールとバージョン

この項では、必要なツールとそのバージョンをリストします。
  1. ODIバージョン — Oracle Data Integratorバージョン12.2.1
  2. オープン・ツール・バージョン — Oracle SAP Connectorバージョン10.1.3.23
  3. JCoバージョン
    1. JCo API — 3.0.17 (2017 –07–17)
    2. JCoミドルウェア — JavaRfc 2.2.20
    3. JCoライブラリ — 721.913
    4. JCoアーカイブへのパス — c:\Oracle\Middleware\Oracle_Home1\odi\sdk\lib\sapjco3.jar
    5. JCoライブラリへのパス — c:\Oracle\Middleware\Oracle_Home1\odi\sdk\lib\sapjco3.dll
  4. SAP KMビルド番号 - 42
  5. IKM - IKM Oracle Incremental Update

変数の作成

この項では、次の例で使用されているすべてのODI変数について説明します。これらの変数を使用すると、最終抽出タイムスタンプの値を保存および取得できます。次の指定どおりにすべての変数を作成してください。
  1. LAST_EXTR_TS — この変数には、最終抽出タイムスタンプの値が含まれます。デフォルト値は00000000:000000で、これは最初の試行時に必要です。最新の値は、次のように履歴に保持されます。
  2. LAST_EXTR_DATE — この変数には、最終抽出タイムスタンプ・パラメータから値を取得する最終抽出日が含まれます。次のリフレッシュ式を使用して変数が更新されます。
  3. LAST_EXTR_TIME — この変数には、最終抽出タイムスタンプ・パラメータから値を取得する最終抽出時間が含まれます。
  4. CURR_TS— この変数には、現在のタイムスタンプが含まれます。次のリフレッシュ式を使用して変数が更新されます。
  5. CURR_DATE— この変数には、CURR_TSパラメータから値を取得する現在の日付が含まれます。次の図のリフレッシュ式を使用して変数が更新されます。
  6. CURR_TIME — この変数には、CURR_TSパラメータから値を取得する現在の時間が含まれます。次のリフレッシュ式を使用して変数が更新されます。

拡張結合条件を使用したマッピングの作成

次の条件に基づいて2つの表をCDHDRおよびMARAとして結合できる単純なマッピングを作成し、2つのフィルタを使用してSAPからデータを抽出して、MARA_REPLICATEDというターゲットOracle表に格納します。
  1. 結合条件
    CDHDRの索引0から18までのOBJECTIDMARAMATNRに結合します。
    CDHDR.OBJECTID+0(18) = MARA.MATNR
  2. ソースからターゲットへのフィールドのマップ

    このマッピングでは、ソースの(MARAとCDHDR)からターゲットの(MARA_REPLICATED)へ次のフィールドを(ドラッグ・アンド・ドロップで)マップできます。

    MARA.MANDT -> MARA_REPLICATED.MANDT
    MARA.MATNR -> MARA_REPLICATED. MATNR
    MARA.LVORM -> MARA_REPLICATED.DELETED
    MARA.MEINS -> MARA_REPLICATED.MEINS
    CDHDR.OBJECTID -> MARA_REPLICATED.CDHDR_OBJECTID
    CDHDR.UDATE -> MARA_REPLICATED.UDATE
    CDHDR.TCODE -> MARA_REPLICATED.TCODE
マッピング

マッピングでのフィルタ条件の使用

フィルタ条件を使用して、関連するデータ変更ログ・エントリを選択できます。次に、2つのフィルタを示します。CDHDROBJECTCLASに加え、次のフィルタでは、前述の日時に関連するいくつかの変数を使用して、更新済レコードを抽出します。

  • フィルタ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であり、最初の実行後に履歴からその値が取得されます。

パッケージの実行

CDHDR表で結合機能を使用することで、様々な実行プロセスによりSAPからレコードを抽出し、Oracleデータベースに格納できます。ここでは、V42 SAP KMと増分IKMを使用します。

すべての更新済レコードを抽出するためのシナリオの実行

IKMでは、最初にレコードを取得する際に、次に示すようにCreate_Target_TableオプションをTrueに設定します。
  • マッピング・フローの変更

  • パッケージの実行 — 次に、パッケージを実行して、特定の日付まで更新されたすべてのレコードを抽出します。パッケージを初めて実行する場合、最終抽出タイムスタンプ・パラメータからデフォルト値が取得されます。
  • 抽出されたレコードのチェック — パッケージの実行に成功すると、関連するレコードがOracleターゲット・データベースに挿入されます。
  • 抽出されたレコード — 次に示すように、ターゲット・データベースで抽出されたレコードを検索します。

SAP表での新規レコードの作成とパッケージの実行による新規レコードの抽出

SAP表に新規レコードを作成するには:
  1. 次に示すように、新しい材料を作成します。
  2. マッピング・フローの変更
  3. LAST_EXTR_TSパラメータの履歴タグで、最終抽出タイムスタンプの値を確認します。
  4. パッケージの実行 - SAP表に新しい材料を作成してから、パッケージを再実行します。パッケージが正常に実行されると、Oracleターゲット・データベースに1つの新規レコードが挿入されます。
  5. 抽出されたレコード- 次の表の一番上のレコードが、パッケージの実行後に挿入された新規レコードです。

SAPでのレコードの更新とパッケージの実行による更新済レコードの抽出

前の図で、材料33および41のMEINS列の値は、それぞれHLとGです。ここで、次に示すようにこれらのレコードのMEINS列の値を更新します。
  1. 次に示すように、材料番号41および33について、SAPでこれら2つのレコードの値を更新します。
  2. LAST_EXTR_TSパラメータの履歴タグで、最終抽出タイムスタンプを確認します。
  3. パッケージの実行 - SAP表で材料を更新してから、パッケージを再実行します。
  4. パッケージが正常に実行されると、Oracleターゲット・データベースで2つのレコードが更新されます。次に示すように、レコード統計が表示されます。
  5. 抽出されたレコード - パッケージの実行後に、強調表示されている次のレコードがターゲット・データベースで更新されます。

SAPからのレコードの削除とパッケージの実行

SAP表からレコードを削除するには:
  1. 次のMADescripRA_REPLICATEDターゲット表で、削除対象の材料にフラグ付けする前に、強調表示されている詳細を見つけます。
    材料31および34が削除対象としてマークされます。フィールドLVORM (クライアント・レベルではDF)は、ターゲット表のフィールドDELETEDにマップされたMARA表で、削除前に空になります。
  2. CDHDR表では、新規作成、更新、および削除対象としてフラグ付けされたすべての材料について、新しい行が追加されます。
    TCodeフィールドには、次の値が保持されます。
    1. MM01: 作成された新規材料
    2. MM02: 更新された既存の材料
    3. MM06: 削除対象としてマークされた材料
  3. MARA表 - 材料が削除対象としてマークされると、新しい行がTcode : MM06 (削除)付きで追加されます。削除対象として材料がフラグ付けされると、フィールドLVORM (クライアント・レベルではDF)は、‘X’付きで更新されます。
  4. パッケージの実行 - 次の例に示すように、パッケージの実行に成功すると、2つのレコードが変更されます。
  5. 抽出されたレコード - パッケージを実行したら、次に示すように、ターゲットOracle表のMARA_REPLICATEDで抽出されたレコードを検索します。