質問内容
エキスパートの皆様、こんにちは。
私は、ユーザー出口 PCSD0002 および PCSD0003 を使用して CS01/CS02 をカスタマイズし、ヘッダレベルと明細レベルにいくつかのフィールドを追加しました。
しかし、現在、以下の標準BAPIを使用して部品表(BOM)を作成・変更するSAP ABAP Z開発プログラムがあります。
- 作成用BAPI: CAD_CREATE_BOM_WITH_SUB_ITEMS
- 変更用BAPI: CSAP_MAT_BOM_MAINTAIN
問題: 現在のプログラムを使用して、私のZFIELDを保存するにはどうすればよいでしょうか。
よろしくお願いします。
Pradip Patel.
解決策 / ベストアンサー
★★★ THIS_IS_THE_ACCEPTED_SOLUTION ★★★
こんにちはPradipさん、
BAPI CSAP_MAT_BOM_MAINTAIN を使用して、ユーザー出口で追加したカスタムフィールド(ZFIELD)を保存するには、以下の手順に従う必要があります。
-
BAPI入力パラメータの拡張:
BAPIの入力パラメータであるEXTENSIONINテーブルを使用します。このテーブルは、標準テーブルや構造を拡張するための汎用的なメカニズムを提供します。 -
EXTENSIONIN テーブルの設定:
プログラム内で、EXTENSIONINテーブルに必要な値を設定します。このテーブルはBAPIPAREX構造で構成されています。主要なフィールドは以下の通りです:STRUCTURE: 拡張対象の標準テーブルまたは構造の名前を指定します(例:ヘッダレベルの場合はSTPOX、明細レベルの場合はSTPOV)。VALUEPART1,VALUEPART2, …,VALUEPART4: 拡張フィールドの実際の値を設定します。フィールド名と値のペアをFIELDNAME=VALUEの形式で連結して格納します。VALUELONG: より長い文字列を格納する場合に使用します。
-
実装例:
例えば、ヘッダレベル(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呼び出し用の入力テーブル -
BAPIの呼び出し:
上記で準備したit_extensioninテーブルを、CSAP_MAT_BOM_MAINTAINBAPIのEXTENSIONINパラメータとして渡して呼び出します。 -
ユーザー出口の対応:
ユーザー出口PCSD0002またはPCSD0003の実装コード内で、EXTENSIONINテーブルから渡された値を読み取り、適切な内部テーブル(例:STPOXの拡張インクルード)にマッピングするロジックが既に存在することを確認してください。これにより、BAPI経由で渡された値が実際のデータベーステーブルに保存されます。
CAD_CREATE_BOM_WITH_SUB_ITEMS BAPIについても、同様の EXTENSIONIN パラメータを提供しているかどうかをBAPIのインターフェースで確認し、同様のアプローチを適用してください。
この方法により、標準BAPIを使用しながら、ユーザー出口で追加したカスタムフィールドのデータを保存することが可能になります。
Source: Original Link | Translation: AI (DeepSeek V3)
(Original content rights reserved by the author)