跳转到内容
技术文章
作者简介照片Jor万博新体育手机客户端ge Herrero Blanco

自动在BAPI中填写更新的信息结构

每次使用BAPI创建SAP Object时,都需要用完成文档所需的数据填充一些结构和表。大多数情况下,这些结构与其他包含标志的结构一起使用,这些标志告诉BAPI将使用或更新哪些字段。这些结构总是通过名称末尾的“X”来标识。

有多少次你花了时间和时间想知道为什么一个BAPI不工作,只是意识到你忘记在“X”结构中填充相应的字段?我可以告诉你我花了不少钱。

出于这个原因,我已经开发了一种方法,使它为你工作。您在数据结构中填充一个新字段,该方法自动将“X”放在相应的结构中。

您所需要的只是在工具类中使用以下导入参数创建一个方法

进口% 20参数

导入参数

其中“DATA_STRUCT”是BAPI中使用的数据结构,“FLAG_STRUCTURE_NAME”是BAPI中包含数据结构的“X”结构的名称。

当然,这种方法的结果将是一个具有以下特征的导出结构

出口参数% 20

输出参数

该方法的代码如下

cl_reca_ddic_table =>get_field_list(export id_name = flag_struct_name IMPORTING et_field_list = DATA(table_data))。IF sy-subrc = 0。循环在表数据分配字段符号()。将COMPONENT -fieldname OF STRUCTURE data_struct TO FIELD-SYMBOL()。IF sys -subrc <> 0。继续下去。其他的事情。ASSIGN COMPONENT -fieldname OF STRUCTURE filled_flag_struct TO FIELD-SYMBOL()ENDIF。如果不是初始值。 CASE -rollname. WHEN 'BAPIUPDATE'.  = abap_true. WHEN OTHERS.  = . ENDCASE. ENDIF. ENDLOOP. ENDIF.

在' X '结构中有一些字段不是标志,因此在这种情况下,数据结构的值会复制到' X '结构中。

使用这种方法,你不必再担心忘记正确填充“X”结构。

指定的标签

      1评论
      你一定是登录评论:评论或回复一篇文章
      作者头像Jörge万博新体育手机客户端n Lindqvist
      (Jorgen Lindqvist

      这就跟你问声好!

      感谢分享,对于基本的情况,这将很好地工作。我使用过类似的方法,但使用的是更通用的cl_abap_structdescr,而不是特定于reca的方法。

      不过,我想提到一些边缘情况……例如,当您想要重置某个值时,例如清除文本或日期,或将某个数值设置为0时,此解决方案将不起作用。这些值将被解释为INITIAL,因此没有标记为更新。

      其次,我看到一个潜在的风险,如果实现是这样的,那么太多的字段被标记为X:

      1. 叫READ-BAPI
      2. 更新一些字段
      3. 调用这个方法
      4. 叫UPDATE-BAPI

      它“极有可能”在大多数情况下和大多数bapi中工作得很好,但我可以想象,有一些bapi可能会例如将其记录为更改,或者执行额外的检查或诸如此类的事情,即使数据实际上没有更改。(我没有例子,只是一个一般的想法,不要标记太多的“X”)

      我没有可用的共享代码,但另一种通用方法是使用old_data_struct和new_data_struct作为导入参数,并在字段之间进行实际比较。传递一个“空的”old_data_struct,然后将字段值与“INITIAL”进行比较,因此这也应该工作。