使用する
共有マスターデータツール(SMDツール)は、マスターデータオブジェクトへの変更を変更ポインターに記録します。これは、変更文書インターフェースにリンクされています。SMDツールを使用してマスタデータを配布するには、マスタデータオブジェクトが変更、作成、および削除されたときに変更文書を書き込む必要があります。マスタデータオブジェクトは、変更伝票インタフェースにリンクされている必要があります。
変更ポインタの作成と評価
変更ポインタは、変更を決定し、それらをマスタデータオブジェクトに配布するために使用されます。
変更ポインタは次の方法で作成されます。
アプリケーションプログラムは、変更ドキュメントオブジェクトの変更ドキュメントインターフェイスを呼び出します。これを行うために、生成された汎用モジュールxyz_DOCUMENT_WRITEが呼び出されます。そのインターフェイスには、変更ドキュメントのデルタが決定されるテーブルと構造ごとに、古いレコードと新しいレコードの2つのパラメータが含まれています。変更ドキュメントインターフェイスは、変更のリスト(テーブル名、テーブルキー、フィールド名、変更タイプ、古い値、新しい値)を作成します。
変更には次の3つのタイプがあります。
-
入れる
挿入変更タイプでは、正確に1つのレコードが書き込まれます(テーブル名、テーブルキー、フィールド名= “KEY”、変更タイプ=挿入、古い値=空、新しい値=空)。フィールド値はデータベースにあるため、文書化されていません。この変更タイプでは、特別なフィールド名KEYを使用することが重要です。
-
アップデート
更新変更タイプでは、変更されたフィールドごとに1つのレコードが書き込まれます(テーブル名、テーブルキー、フィールド名= <フィールド名>、変更タイプ=更新、古い値= ABC、新しい値= DEF)。
この変更タイプには、次の1つのバリエーションがあります。
変更文書オブジェクトの定義では、更新レコードではなく、削除レコードと挿入レコードを書き込むように指定することもできます。これが、変更タイプがCDPOSテーブルのキーフィールドでもある理由です。したがって、1つのテーブル名、テーブルキー、およびフィールド名に対して、削除と挿入の2つのレコードを書き込むことができます。
-
消去
削除変更タイプを使用すると、正確に1つのレコードが書き込まれます(挿入の場合と同じ)。変更文書オブジェクトの定義で、すべての値が保存されるように指定することもできます。次に、フィールドごとに1つのレコードがあります。
変更文書が書き込まれると、変更ポインタを書き込むためのインターフェイスが呼び出されます。送信されるメッセージタイプを持つレコードは、テーブル名、テーブルキー、およびフィールド名についてテーブルTBD62から決定されます。TBD62は、テーブル名、テーブルキー、フィールド名、およびメッセージタイプで構成されます。テーブルTBDA2のアクティブなメッセージタイプごとに変更ポインタが書き込まれます。変更情報を含むレコードがテーブルBDCPに保存され、各メッセージタイプのステータスレコードがテーブルBDCPSに保存されます。
このため、メッセージ(IDoc)が送信される原因となるすべての変更されたフィールドをテーブルTBD62に追加する必要があります。
パフォーマンスを向上させる新しいストレージ
システムパフォーマンスを向上させるために、特定のメッセージタイプに変更ポインタ用の新しいストレージBDCP2が実装されました。新しいストレージを使用するには、次の前提条件が満たされている必要があります。
変更ポインタは、以下のインターフェースおよび削除プログラムRBDCPCLRから排他的にアクセスされます。
-
CHANGE_POINTERS_CREATE
-
CHANGE_POINTERS_CREATE_DIRECT
-
CHANGE_POINTERS_READ
-
CHANGE_POINTERS_STATUS_WRITE
(BD60)を選択することにより、このメッセージタイプにBDCP2対応のフラグを立てることができます。
移行の実行の詳細については、実装ガイドを参照してください。
手順
マスタデータオブジェクトのSMDツールを介して変更ポインタの書き込みを有効化できるようにするには、以下の手順を実行する必要があります。
-
各メッセージタイプの変更ポインタをアクティブ化する
-
メッセージタイプの変更関連項目を更新します
-
一般的に変更ポインタをアクティブにします
また、次の手順を実行する必要があります。
-
変更ポインタを評価するための汎用モジュールを実装します
-
ALEオブジェクトタイプMSGFNをフィルタオブジェクトタイプとして定義します
メッセージタイプごとの変更ポインタのアクティブ化
テーブルTBDA2では、特定のマスタデータオブジェクトの変更ポインタの書き込みを有効化または無効化することができます。
テーブルTDBA2を維持するには、カスタマイジングで次を選択します。
(トランザクションBD50)。
マスタデータオブジェクトのメッセージタイプを使用して、テーブルTBDA2にデータを入力します。得意先への出荷の場合、エントリの「アクティブ」フラグを設定しないでください。テスト目的で、マスタデータオブジェクトの変更ポインタの書き込みを有効化する場合は、メッセージタイプのTBDA2エントリに’アクティブ’フラグを設定する必要があります。
メッセージタイプの変更関連項目の更新
変更伝票オブジェクトからの変更伝票項目は、テーブルTBD62に入力されます。変更ポインタは、変更ドキュメントフィールドが変更ドキュメントインターフェイスを介してログに記録されるときに書き込まれます。
テーブルTBD62で、メッセージタイプに対して、変更ポインタが書き込まれるすべての変更文書項目を定義して、マスタデータオブジェクトへの変更を他のシステムに配布できるようにします。
マスタデータオブジェクトのテーブルにエントリを追加すると、架空の項目名KEYの変更伝票項目がこの種の変更をログに記録するために使用されます(例:品目の登録にはMATERIAL MARA KEY、プラントデータのプラントへの追加)。これらのエントリもテーブルTBD62に含める必要があり、マスターデータオブジェクトの変更伝票オブジェクトのすべてのテーブルに対して含める必要があります。
長いテキストへの追加または変更は、変更文書アイテムのエントリとともにログに記録されます。このエントリには、テーブル名のテキストオブジェクトと、フィールド名のテキストIDと言語キーで構成される値が含まれています。マスタデータオブジェクトのロングテキストへの変更を配信する場合は、これらのエントリもテーブルTBD62に含める必要があります。考えられるすべての言語キーに対してこれを行う必要はありません。関連するテキストIDのエントリをテーブルTBD62に含めるだけで十分です。このエントリには、テキストIDと文字*(品目マスタの発注書テキストのMATERIAL MATERIAL BEST *など)で構成される項目名の値があります。
一般的に変更ポインタをアクティブ化する
変更ポインタを使用してマスタデータ配信を有効化するには、カスタマイジングで以下を選択します。
(トランザクションBD61)
変更ポインタを評価するための汎用モジュールの実装
変更ポインタが処理されると、マスタデータオブジェクトのIDocが生成され、ディスパッチされます。変更ポインタが処理され、その後IDocが生成され、メッセージタイプごとにディスパッチされます(たとえば、品目マスタのMATMAS)。汎用モジュールがこのプロセスを実行します(たとえば、品目マスタの場合はMASTERIDOC_CREATE_SMD_MATMAS)。
メッセージタイプごとに汎用モジュールを実装する必要があります。汎用モジュールの命名規則はMASTERIDOC_CREATE_SMD_xxxxxxです。ここで、xxxxxxはメッセージタイプの名前です。
以下は、変更ポインタを処理し、IDocを生成して送信する汎用モジュールを実装する方法の説明です。例として、品目マスタの汎用モジュールMASTERIDOC_CREATE_SMD_MATMASを参照してください。汎用モジュールのモデルとして、コア品目マスタの汎用モジュールMASTERIDOC_CREATE_SMD_MATCORを使用することもできます。コア品目マスタのIDocタイプMATCOR01は、E1MARACとE1MAKTCの2つのセグメントのみで構成され、品目マスタからのコアデータのみが含まれています。コア品目マスタの汎用モジュールMASTERIDOC_CREATE_SMD_MATCORは、完全品目マスタの汎用モジュールMASTERIDOC_CREATE_SMD_MATMASよりも単純な構造になっています。
次に、メッセージタイプの汎用モジュールを登録します。汎用モジュールのインタフェースは事前設定されており、メッセージタイプのパラメータで構成されています。
メッセージタイプのトランザクションを開始する前に、制御テーブルTBDMEの汎用モジュールへのメッセージタイプ割当を更新する必要があります。テーブルTBDMEでメッセージタイプのエントリを定義します。参照メッセージタイプはメッセージタイプと同じであり、汎用モジュールを割り当てます。たとえば、メッセージタイプMATMAS(品目マスタ)およびMATCOR(コア品目マスタ)のエントリを確認してください。
汎用モジュールに以下のステップを実装して、変更ポインタを処理し、IDocを生成して送信します。
-
汎用モジュールCHANGE_POINTERS_READを使用して、メッセージタイプに対してまだ処理されていないすべての変更ポインタを読み取ります。
-
変更されたマスターデータオブジェクトごとにIDocを作成します。IDocでは、変更ポインタに従って変更されたセグメントのみを入力します。すべてのセグメントで、次のように最初のフィールドMSGFNに入力します。
009、セグメントが追加された場合
004、セグメントフィールドが変更された場合
003、セグメントが削除された場合
018、セグメントフィールドが変更されていないが、IDocの階層的に従属するセグメントを送信する必要があるため、セグメントをIDocに含める必要がある場合。
-
汎用モジュールMASTER_IDOC_DISTRIBUTEを呼び出して、IDocをALEレイヤに渡します。
-
処理されたばかりのマスタデータオブジェクトの場合、変更ポインタを’終了’に設定します。これは、汎用モジュールCHANGE_POINTERS_STATUS_WRITEを呼び出すことによって行われます。
-
COMMIT WORKコマンドを実行し、DEQUEUE_ALL汎用モジュールを呼び出します。パフォーマンス上の理由から、すべてのIDocの後にこの手順を実行しないでください。たとえば、50個のIDocを作成するまで待ちます。
ALEオブジェクトタイプMSGFNをフィルタオブジェクトタイプとして定義する
BAPI-ALEインターフェースによって生成されていないメッセージタイプの受信者決定では、変更されたデータを含むIDocセグメントが除外される場合があります。セグメントチェーンの最後に変更されたデータを含まないIDocセグメントがまだ存在する場合があります。これらのセグメントは、IDocのセグメント階層のためにのみ含まれています。
ALEアウトバウンド処理を実行するには、IDocの生成時に、フィールドMSGFNで値018を割り当てることにより、これらのアタッチされたセグメントを抑制する必要があります。
また、次の設定を行う必要があります。
-
MSGFNは、ALEオブジェクトタイプとして定義する必要があります。ALE開発で、 (トランザクションBD95)を選択します。通常、ALEオブジェクトタイプMSGFNはすでに定義されており、項目MSGFNがテーブルBDIPARAMに割り当てられています。
-
MSGFNは、テーブルTBD21の新しいメッセージタイプおよび新しいセグメントタイプのフィルタオブジェクトタイプとして指定する必要があります。テーブルTBD21のエントリは、MESTYPのメッセージタイプ名、セグメントタイプSEGTYP、およびFLDNAMのフィールド名MSGFNで構成されています。ALE開発で、 選択: (トランザクションBD59)を選択します。