SAP資格過去問ならSAPnavi

NoteやStripe決済で安全にSAP過去問を購入することができます。
領収書発行可能 / 即時入手可能

SAP過去問 (SAP Exam)

Programming Change() BAPIs

使用する

BAPI Change()は、販売注文などのSAPビジネスオブジェクトタイプの既存のインスタンスを変更します。

BAPI Change()はインスタンスメソッドですが、BAPI ChangeMultiple()はクラスメソッド(インスタンスに依存しない)です。

特徴

BAPIインターフェース

パラメータのインポート

インポートパラメータを定義するときは、次の点に注意する必要があります。

  • Change()BAPIはインスタンスメソッドであるため、対応するビジネスオブジェクトタイプのキー項目は、汎用モジュールのインポートパラメータとして登録する必要があります。これらのパラメータの名前は、BORのオブジェクトキーの名前と同じである必要があり、同じデータ要素を持っている必要があります。

  • BAPIには、テスト実行を実行できるようにするTestRunパラメーターも必要です。このパラメーターに値「X」が含まれている場合、BAPIは正常に実行されますが、結果は更新タスクに書き込まれません。このようにして、BAPI BapiService.TransactionCommitの実行後、すべての結果(たとえば、アプリケーションログなど)を評価できますが、BAPIはデータベースを変更していません。

  • 変更を必要とせずに顧客がBAPIのインポートパラメータを拡張できるようにする場合は、パラメータExtensionInを作成する必要があります。Change() BAPIでカスタマ拡張コンセプトを実装する方法に関する拡張パラメータおよび推奨事項については、 BAPIに対するカスタマ拡張を参照してください。

  • Change by Flaggingの概念に従って、 Change()メソッドを実装します。ここでは、変更された値を含むフィールドを持つすべてのパラメーターに対して変更パラメーターを作成する必要があります。これらの変更パラメータは、変更された値を含むパラメータフィールドと変更されていないパラメータフィールドを区別するのに役立ちます。

パラメータのエクスポート

エクスポートパラメータを定義するときは、次の点に注意する必要があります。

  • 得意先が変更を必要とせずにBAPIのエクスポートパラメータを拡張できるようにする場合は、パラメータExtensionOutを作成する必要があります。Change() BAPIでカスタマ拡張コンセプトを実装する方法に関する拡張パラメータおよび推奨事項については、 BAPIに対するカスタマ拡張を参照してください。

  • メソッドコールバックからのメッセージを呼び出し元のプログラムに報告するには、エクスポートパラメータReturnを作成する必要があります。同期的または非同期的に呼び出されるChange() BAPIの結果が広範囲に監視されるようにするには、Returnパラメーターを入力するための次の規則に従う必要があります。

    • Change() BAPIが正常に実行される場合は、次の標準化されたT100メッセージをReturnパラメーターで渡す必要があります

      戻る

      メッセージ

      タイプ

      S

      ID

      BAPI

      番号

      002

      MESSAGE_V1

      <オブジェクト名>

      MESSAGE_V2

      < reference_id >

      MESSAGE_V3

      < reference_id >

      システム

      <システム>

      次の点に注意する必要があります。

      • フィールドMESSAGE_V1には、 SalesOrderなどのビジネスオブジェクトタイプの外部名が含まれています

      • 後続の呼び出しで変更されるオブジェクトにアクセスできるキーは、フィールドMESSAGE_V2に返されます。これは、外部番号割当を使用する場合は外部キー、内部番号割当を使用する場合は内部キーです。オブジェクトに複数のキーフィールドがある場合、これらのキーフィールドの値をMESSAGE_V2で連結する必要があります。連結では、BORでキーフィールドが定義されている順序を順守する必要があります。さらに、各キーフィールドには最大長を使用する必要があります。これには、パディングの使用が必要になる場合があります。

      • Change() BAPIの実行中にエラーが発生した場合、アプリケーション固有のエラーメッセージに加えて、次の標準化されたT100メッセージをReturnパラメーターで渡す必要があります。

        戻る

        メッセージ

        タイプ

        E

        ID

        BAPI

        番号

        003

        MESSAGE_V1

        <オブジェクト名>

        MESSAGE_V2

        < reference_id >

        MESSAGE_V3

        < reference_id >

        システム

        <システム>

        さまざまなフィールドの意味は、正常に実行された場合と同じです。

    • 標準化されたメッセージに加えて、 Returnパラメーターにさらにメッセージを書き込むことができます。エラーが発生した場合、エラーを詳細に説明するメッセージが返されることが特に重要です。したがって、構造BAPIRET2のすべての項目を使用する必要があります。特に、 ParameterRow、およびFieldの各フィールドに入力する必要があります。

BAPIコーディング

Change()BAPIを実装するための可能な戦略

データベースの変更を引き起こすBAPI(たとえば、 Change()およびCreate() BAPI)では、変更されるパラメーターフィールド(変更関連フィールド)と変更されないままのパラメーターフィールドを区別できる必要があります。

初期値は有効な新しい値を表すこともあるため、初期値を使用することは解決策ではありません。また、ABAPプログラミング言語および他の開発プラットフォームでは、空のフィールドを示すために値”NULL”をデータ型に割り当てないでください。

したがって、変更関連フィールドは、ヘルプ構造を使用して識別する必要があります。これを行うには2つの方法があります。

  1. 変更された値を含むフィールドを識別するためのフィールドのフラグ付けこのアプローチでは、追加の「パラメーターの変更」にフラグを含めると、変更された値を含むパラメーターフィールドが識別されます。

    • 追加の変更パラメータは、変更されたフィールド値を含むBAPIのすべてのパラメータに対して、同じ数のフィールドと同じフィールド名で作成する必要があります。

    • BAPIが呼び出されると、対応するパラメーターの対応するものに変更が含まれている追加の変更パラメーターのフィールドに、更新フラグをマークする必要があります。

      変更されたフィールドを識別するために変更パラメーターを作成するときは、以下の規則に従ってください。

    • 追加の変更パラメーターの名前は、接尾辞「X」が付いたパラメーター名で構成されます。たとえば、パラメーターの名前がEquiSalesの場合、追加の変更パラメーターの名前はEquiSalesXです。

    • 追加の変更パラメーターには、パラメーターとまったく同じ数のフィールドと同じフィールド名が含まれている必要があります。更新項目のデータエレメントとしてデータエレメントBAPIUPDATE(CHAR 1)を使用する必要があります。これには、次の値を指定できます。

      ‘バツ’

      この値は、関連するフィールドのパラメーターに更新された値が含まれていることを意味します。

      ‘ ‘ (値なし)

      これは、対応するパラメータフィールドを更新する必要がないことを意味します。

    • パラメータがテーブルの場合、追加の変更パラメータもテーブルである必要があります。

  2. フィールドを比較して、変更された値を含むフィールドを特定する

    このアプローチでは、2つのパラメーターを比較します。1つは現在の有効なデータを含み、もう1つは新しい変更されたデータを含み、変更された値を含むフィールドを識別します。

    Change() BAPIが呼び出されると、データベース内の現在のデータと新しい変更されたデータを対応するパラメーターに入力する必要があります。現在のデータセットは、たとえば、呼び出されたGetDetail() BAPIから転送できます。

    次の比較を行うことができます。

    • 現在のデータを最初にデータベースの内容と照合して、その間に変更されたかどうかを確認できます。このようにして、 GetDetail() BAPIによってデータが読み取られてからデータベースが更新されるまでの間に行われたデータベースの変更を識別できます。

    • 両方のパラメーターのデータは、フィールドごとに比較できます。対応する2つの項目のデータが異なる場合は、関連する値を新しいデータとともにパラメータから転送する必要があります。

      変更されたデータを含むフィールドを比較する場合は、次の点に注意してください。

    • 呼び出し側プログラムは、 Change() BAPIのすべてのパラメーターフィールドにデータを提供できる必要があります。このため、 Change() BAPIのパラメータフィールドは、同じビジネスオブジェクトタイプのGetDetail() BAPIのフィールドと完全に同じである必要があります。

    • 比較するパラメーターの名前は同じである必要がありますが、変更されたデータを含むパラメーターには、接尾辞「New」が付いている必要があります。

    • 両方のパラメーターは、まったく同じフィールドと同じ構造を持っている必要があります。

設定のカスタマイズとの非互換性の回避

カスタマイジングで設定された特定の値が、BAPIインターフェースで異なって表示される可能性があります。これらの値は、 Change() BAPIで上書きできません。

カスタマイジング設定との非互換性を回避するには、次の方法でChange() BAPIを実装する必要があります。

  • BAPIはすべてのフィールドを転送し、それらをカスタマイジング設定と照合する必要があります。カスタマイジング設定が項目を書き込み禁止している場合、この項目のデータをBAPIインタフェースのデータで上書きすることはできません。

  • 非互換性が発生するたびに、呼び出し側プログラムのReturnパラメーターでエラーメッセージを返す必要があります。

  • カスタマイジングによってデフォルト値が割り当てられ、したがって書き込み保護されているすべてのフィールドを文書化する必要があります。変更の例()BAPI

タイトルとURLをコピーしました