zl程序教程

您现在的位置是:首页 >  其他

当前栏目

如何使用类CL_ABAP_CONTAINER_UTILITIES读取、写入EXTENSIONIN详解编程语言

编程语言 使用 如何 详解 读取 写入 ABAP container
2023-06-13 09:11:51 时间

很多BAPI允许用户将自定义字段通过一个table参数EXTENSIONIN传入BAPI中,比如采购订单创建的bapi BAPI_PO_CREATE1,如下:

如何使用类CL_ABAP_CONTAINER_UTILITIES读取、写入EXTENSIONIN详解编程语言


img >

定义EXTENSIONIN的结构类型BAPIPAREX如下:

如何使用类CL_ABAP_CONTAINER_UTILITIES读取、写入EXTENSIONIN详解编程语言


img >

STRUCTURE字段用来填写结构名字,这个结构里面就是自定义增强字段,BAPI_PO_CREATE1中可供使用的是以下6个结构名,

BAPI_TE_MEPOHEADER 采购订单抬头

这些结构里大概就是下面这个样子,当然这些自定义字段需要通过增强append到ekpo中

如何使用类CL_ABAP_CONTAINER_UTILITIES读取、写入EXTENSIONIN详解编程语言


img >

VALUEPART1,VALUEPART2,VALUEPART3,VALUEPART4中保存的是自定义字段值和更新标识

,EXTENSIONIN怎么才能赋值呢?下面主角登场了,SAP提供了一个类CL_ABAP_CONTAINER_UTILITIES,里面有两个方法, 方法read_container_c-用来读取EXTENSIONIN, 方法fill_container_c用来填充EXTENSIONIN。

如何使用类CL_ABAP_CONTAINER_UTILITIES读取、写入EXTENSIONIN详解编程语言


img >

例子代码当然不能少了,下面这一小段代码就是先将EXTENSIONIN中的值读出来,然后再加入一个自定义字段  zsfyg的值,再回写EXTENSIONIN。


 LOOP AT et_extensionin ASSIGNING fs_ext WHERE structure = BAPI_TE_MEPOITEM. 

* 读取自定义字段值 

 CALL METHOD cl_abap_container_utilities= read_container_c 

 EXPORTING 

 im_container = fs_ext +30 

 IMPORTING 

 ex_value = ls_bapi_te_mepoitem 

 EXCEPTIONS 

 illegal_parameter_type = 1 

 OTHERS = 2. 

 IF ls_bapi_te_mepoitem-po_item = iv_ebelp. 

* PO行项目相同 

 ls_bapi_te_mepoitem-zsfyg = iv_zsfyg. 

* 写入新的自定义字段值 

 CALL METHOD cl_abap_container_utilities= fill_container_c 

 EXPORTING 

 im_value = ls_bapi_te_mepoitem 

 IMPORTING 

 ex_container = fs_ext +30 

 EXCEPTIONS 

 illegal_parameter_type = 1 

 OTHERS = 2. 

 ENDIF. 

 ENDLOOP.
   

可以看到这两个方法的container参数中用到了 fs_ext +30,有个30的偏移量,含义就是将第一个字段STRUCTURE跳过,STRUCTURE恰好30位长,然后读取或写入之后的VALUEPART1,VALUEPART2,VALUEPART3,VALUEPART4。

以上。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19321.html

cjava