BP的跨实体派生(USMD_RULE_SERVICE_CROSS_ET)

2020-09-22 13:00发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好吗?

在跨实体派生中,我需要一些帮助和指导。 这是我第一次实现此功能,我看到了一些示例,但这些示例并不那么容易理解,因此在BP中找不到任何示例。

我的要求看起来很简单。 当实体BP_CENTRL = 012中的识别类型时,我必须获取ID号的最后4位数字,并在AD_POSTAL实体中设置地区和城市。

我找到了一个博客,我尝试遵循代码的逻辑,但是它无法正常工作,我感到很绝望,因为我必须今天完成此工作。

这是我的代码。 在尝试执行真正的需求之前,我只是想在STREET字段中添加一些价值。

我得到这个例外。

请,我感谢您的帮助。

最诚挚的问候

罗纳尔多·维埃拉。

 if_ex_usmd_rule_service2〜方法衍生。

   常量:gc_city1输入usmd_fieldname值'STREET'。


   数据:lo_context类型引用到if_usmd_app_context,
         lr_derived_data_struc类型引用数据,
         lr_derived_data_table类型引用数据,
         lr_chd_data类型引用数据,
         lr_mod_data类型引用数据,
         ls_key类型为usmd_s_value,
         lt_attribute类型usmd_ts_fieldname,
         lt_key类型usmd_ts_value,
         lt_changed_entities输入usmd_t_entity,
         lv_edition类型为usmd_edition。



   字段符号:输入任意,
                  键入任何,
                  键入任何表,
                  键入任何表,
                  键入任何。

   "获取更改的实体。

   io_changed_data-> get_entity_types(导入et_entity = lt_changed_entities)。

   读取表lt_changed_entities,但不传输键table_line ='BP_CENTRL'的字段。

   如果sy-subrc ne 0。
     返回。
   万一。

   io_changed_data-> read_data(导出i_entity ='BP_CENTRL'
                               导入er_t_data_upd = lr_chd_data
                                         er_t_data_mod = lr_mod_data)。

   如果lr_chd_data没有绑定。
     返回。
   万一。

   将lr_chd_data-> *分配给。


   如果sy-subrc ne 0或是初始的。
     "最后检查,以防止短暂的倾销。
     返回。
   万一。

   尝试。
       lr_derived_data_table = io_write_data-> create_data_reference(i_entity ='AD_POSTAL'
                                                                     i_struct = io_model-> gc_struct_key_attr)。

       将lr_derived_data_table-> *分配给。
       像行一样创建数据lr_derived_data_struc。
       将lr_derived_data_struc-> *分配给。
     捕获cx_usmd_write_error。

       "如果需要,您可以将异常转换为ET_MESSAGE_INFO。
   努力。

   "当前版本必须是移交给IO_WRITE_DATA的数据的一部分。

   尝试。
       lo_context?= cl_usmd_app_context => get_context()。
     捕获cx_sy_move_cast_error。
       返回。
   努力。

   如果lo_context没有绑定。
     返回。
   万一。

   字段符号:键入任何。

   在循环并分配。
     清除:。
     将结构的组件'ZZIDTYPE'分配给。
     检查sy-subrc eq 0并且不是初始的。


     如果等于'012'。
       将结构的组件'ZZDEPNIT'分配给。
       检查sy-subrc eq 0并且不是初始的。
       将结构的组件gc_city1分配给。

       检查sy-subrc eq 0。
        ='PRUEBA'。
       将gc_city1插入表lt_attribute中。
       尝试。
           数据:lo_exp类型引用到cx_usmd_write_error。
           将插入表中。
           io_write_data-> write_data(导出i_entity ='AD_POSTAL'
                                                it_attribute = lt_attribute
                                                it_data = )。

         将cx_usmd_write_error捕获到lo_exp中。
       努力。
     万一。
   结束循环。
 终止方法。

(12.3 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好吗?

在跨实体派生中,我需要一些帮助和指导。 这是我第一次实现此功能,我看到了一些示例,但这些示例并不那么容易理解,因此在BP中找不到任何示例。

我的要求看起来很简单。 当实体BP_CENTRL = 012中的识别类型时,我必须获取ID号的最后4位数字,并在AD_POSTAL实体中设置地区和城市。

我找到了一个博客,我尝试遵循代码的逻辑,但是它无法正常工作,我感到很绝望,因为我必须今天完成此工作。

这是我的代码。 在尝试执行真正的需求之前,我只是想在STREET字段中添加一些价值。

我得到这个例外。

请,我感谢您的帮助。

最诚挚的问候

罗纳尔多·维埃拉。

 if_ex_usmd_rule_service2〜方法衍生。

   常量:gc_city1输入usmd_fieldname值'STREET'。


   数据:lo_context类型引用到if_usmd_app_context,
         lr_derived_data_struc类型引用数据,
         lr_derived_data_table类型引用数据,
         lr_chd_data类型引用数据,
         lr_mod_data类型引用数据,
         ls_key类型为usmd_s_value,
         lt_attribute类型usmd_ts_fieldname,
         lt_key类型usmd_ts_value,
         lt_changed_entities输入usmd_t_entity,
         lv_edition类型为usmd_edition。



   字段符号:输入任意,
                  键入任何,
                  键入任何表,
                  键入任何表,
                  键入任何。

   "获取更改的实体。

   io_changed_data-> get_entity_types(导入et_entity = lt_changed_entities)。

   读取表lt_changed_entities,但不传输键table_line ='BP_CENTRL'的字段。

   如果sy-subrc ne 0。
     返回。
   万一。

   io_changed_data-> read_data(导出i_entity ='BP_CENTRL'
                               导入er_t_data_upd = lr_chd_data
                                         er_t_data_mod = lr_mod_data)。

   如果lr_chd_data没有绑定。
     返回。
   万一。

   将lr_chd_data-> *分配给。


   如果sy-subrc ne 0或是初始的。
     "最后检查,以防止短暂的倾销。
     返回。
   万一。

   尝试。
       lr_derived_data_table = io_write_data-> create_data_reference(i_entity ='AD_POSTAL'
                                                                     i_struct = io_model-> gc_struct_key_attr)。

       将lr_derived_data_table-> *分配给。
       像行一样创建数据lr_derived_data_struc。
       将lr_derived_data_struc-> *分配给。
     捕获cx_usmd_write_error。

       "如果需要,您可以将异常转换为ET_MESSAGE_INFO。
   努力。

   "当前版本必须是移交给IO_WRITE_DATA的数据的一部分。

   尝试。
       lo_context?= cl_usmd_app_context => get_context()。
     捕获cx_sy_move_cast_error。
       返回。
   努力。

   如果lo_context没有绑定。
     返回。
   万一。

   字段符号:键入任何。

   在循环并分配。
     清除:。
     将结构的组件'ZZIDTYPE'分配给。
     检查sy-subrc eq 0并且不是初始的。


     如果等于'012'。
       将结构的组件'ZZDEPNIT'分配给。
       检查sy-subrc eq 0并且不是初始的。
       将结构的组件gc_city1分配给。

       检查sy-subrc eq 0。
        ='PRUEBA'。
       将gc_city1插入表lt_attribute中。
       尝试。
           数据:lo_exp类型引用到cx_usmd_write_error。
           将插入表中。
           io_write_data-> write_data(导出i_entity ='AD_POSTAL'
                                                it_attribute = lt_attribute
                                                it_data = )。

         将cx_usmd_write_error捕获到lo_exp中。
       努力。
     万一。
   结束循环。
 终止方法。

(12.3 kB)
付费偷看设置
发送
2条回答
宇峰
1楼 · 2020-09-22 13:21.采纳回答

你好罗纳尔多,

您的代码没有问题,但是您还需要在结构中填充ADDRNO和BP_HEADER。

您可以获取/派生下一个可用的地址号以填充结构,但是您的要求只是填充城市,因此请等到用户在地区,国家/地区创建条目。 这将在ad_postal中创建条目。 使用io_changed_data读取ad_postal数据,然后填充region字段,然后使用io_write_data将其写回。

可读取表lt_changed_entities不传输键table_line ='AD_POSTAL'的字段。


 代码应如下,

 lt_ad_postal = io_read_changed_data(entity ='AD_postal'.....

 然后在lt_ad_postal中更新国家/地区值。

 io_write_data(实体= ...
                it_data = lt_ad_postal)。

 
宇峰科技
2楼-- · 2020-09-22 13:07

您好,罗纳尔多,

很简单。 要更新Ad_postal中的字段,bp_header和addrno应该具有值。 当用户创建任何地址数据时(他们应该基本上是因为必须填写国家和城市),SAP将在Ad_postal中创建条目。 当您只想导出区域时,只需在io_changed_data中查找AD_postal条目,读取表并更新您的region字段并将其写回即可。

如果您决定采用另一种基本上不需要的方法,只需获取下一个地址号,然后使用io_changed _data获得bp_number。 在结构中更新这两个字段,只更新要在案例区域中更新的字段,然后将其写回。

与第一个一起去。 很简单。

感谢和问候,

Logan.D

一周热门 更多>