在BAdI definition PRODUCT_R3_ADAPTER的BAdI implementation里需要操作structure comt_prod_material_bdoc。
可以发现几乎所有的settype value都存储在field DATA下面的以settype technical name 命名的internal table里。
然而short text和long text例外,出现在header,且存储值的internal table name 不等于settype technical name,这就给设计一种generic implementation适用于所有settype的解决方案带来困难。
一种解决思路是: 定义一个新的data type,该data type不仅包含原comt_prod_material_bdoc-data下面所有用于存储settype value的internal table,
还包含原本位于header field下面的short text,long text等等。
DATA: ls_bdoc TYPE comt_prod_material_bdoc.
TYPES: BEGIN OF container.
INCLUDE TYPE comt_prod_material_bdoc-data.
TYPES: comm_prshtext TYPE comt_prod_material_bdoc-header-short_texts,
END OF container.
DATA: ls_header_text LIKE LINE OF ls_bdoc-header-short_texts,
ls_unit LIKE LINE OF ls_bdoc-data-comm_pr_unit.
ls_header_text-data-client = '001'.
ls_header_text-data-langu = sy-langu.
APPEND ls_header_text TO ls_bdoc-header-short_texts.
ls_unit-data-gross_weight = '1'.
APPEND ls_unit TO ls_bdoc-data-comm_pr_unit.
DATA: ls_container TYPE container.
MOVE-CORRESPONDING ls_bdoc-data TO ls_container.
MOVE-CORRESPONDING ls_bdoc-header-short_texts TO ls_container-comm_prshtext.
现在原本出现在header的internal table SHORT_TEXTS现在以COMM_PRSHTEXT的名字出现在Data field下面,从而使统一的处理逻辑成为可能。