ユーザー出口で追加したZFIELDをBAPI経由で保存する方法

:red_question_mark: 質問内容

エキスパートの皆様、こんにちは。

私は、ユーザー出口 PCSD0002 および PCSD0003 を使用して CS01/CS02 をカスタマイズし、ヘッダレベルと明細レベルにいくつかのフィールドを追加しました。

しかし、現在、以下の標準BAPIを使用して部品表(BOM)を作成・変更するSAP ABAP Z開発プログラムがあります。

  • 作成用BAPI: CAD_CREATE_BOM_WITH_SUB_ITEMS
  • 変更用BAPI: CSAP_MAT_BOM_MAINTAIN

問題: 現在のプログラムを使用して、私のZFIELDを保存するにはどうすればよいでしょうか。

よろしくお願いします。

Pradip Patel.


:white_check_mark: 解決策 / ベストアンサー

★★★ THIS_IS_THE_ACCEPTED_SOLUTION ★★★

こんにちはPradipさん、

BAPI CSAP_MAT_BOM_MAINTAIN を使用して、ユーザー出口で追加したカスタムフィールド(ZFIELD)を保存するには、以下の手順に従う必要があります。

  1. BAPI入力パラメータの拡張:
    BAPIの入力パラメータである EXTENSIONIN テーブルを使用します。このテーブルは、標準テーブルや構造を拡張するための汎用的なメカニズムを提供します。

  2. EXTENSIONIN テーブルの設定:
    プログラム内で、EXTENSIONIN テーブルに必要な値を設定します。このテーブルは BAPIPAREX 構造で構成されています。主要なフィールドは以下の通りです:

    • STRUCTURE: 拡張対象の標準テーブルまたは構造の名前を指定します(例:ヘッダレベルの場合は STPOX、明細レベルの場合は STPOV)。
    • VALUEPART1, VALUEPART2, …, VALUEPART4: 拡張フィールドの実際の値を設定します。フィールド名と値のペアを FIELDNAME=VALUE の形式で連結して格納します。
    • VALUELONG: より長い文字列を格納する場合に使用します。
  3. 実装例:
    例えば、ヘッダレベル(STPOX)に追加したカスタムフィールド ZZ_MY_FIELD に値 'ABC' を設定する場合、以下のように EXTENSIONIN テーブルを設定します:

    DATA: ls_extension TYPE bapiparex.
    
    ls_extension-structure = 'STPOX'. " 拡張対象の構造
    CONCATENATE 'ZZ_MY_FIELD' '=' 'ABC' INTO ls_extension-valuepart1.
    APPEND ls_extension TO it_extensionin. " BAPI呼び出し用の入力テーブル
    
  4. BAPIの呼び出し:
    上記で準備した it_extensionin テーブルを、CSAP_MAT_BOM_MAINTAIN BAPIの EXTENSIONIN パラメータとして渡して呼び出します。

  5. ユーザー出口の対応:
    ユーザー出口 PCSD0002 または PCSD0003 の実装コード内で、EXTENSIONIN テーブルから渡された値を読み取り、適切な内部テーブル(例:STPOX の拡張インクルード)にマッピングするロジックが既に存在することを確認してください。これにより、BAPI経由で渡された値が実際のデータベーステーブルに保存されます。

CAD_CREATE_BOM_WITH_SUB_ITEMS BAPIについても、同様の EXTENSIONIN パラメータを提供しているかどうかをBAPIのインターフェースで確認し、同様のアプローチを適用してください。

この方法により、標準BAPIを使用しながら、ユーザー出口で追加したカスタムフィールドのデータを保存することが可能になります。


:globe_with_meridians: Source: Original Link | Translation: AI (DeepSeek V3)
(Original content rights reserved by the author)