SAP_WAPI_WRITE_CONTAINER-附加多行元素而不是更新

2020-09-03 04:43发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) Hello Workflowe...

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

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


Hello Workflowers,

我们正在使用FM SAP_WAPI_WRITE_CONTAINER来更新工作项的特定容器元素。 特定容器元素的更新(写操作)工作正常,但是使用SAP_WAPI_WRITE_CONTAINER具有一个不良的副作用:

在同一工作项的容器中,我们还有一些多行容器元素,其内容未更新,也不应该更新-到目前为止,一切都很好。 但是,每次我们为有问题的工作项目调用SAP_WAPI_WRITE_CONTAINER时,所有多行容器元素都会加倍。 即多行元素中的先前行数为4,并且在FM调用之后,多行元素中的行数变为8,下次行数增加到16 a s o。

似乎FM SAP_WAPI_WRITE_CONTAINER在容器中附加多行容器元素的行,而不是像对非多行容器元素那样更新(即覆盖)现有的多行元素。

如果对包含多行元素的工作项执行以下测试,则可以轻松看到这一点:

1)SE37 FM SAP_WAPI_READ_CONTAINER

2)SE37 FM SAP_WAPI_WRITE_CONTAINER(从步骤1的结果中插入数据)

有人可以确认这是SAP_WAPI_WRITE_CONTAINER的设计还是错误?

我知道还有其他未发布的功能模块可用于更新容器元素,但是由于仅发布了WAPI功能,因此我将首先使用这些功能模块。

亲切的问候

Viveka Schwartz

5条回答
木偶小白
2020-09-03 04:47

嗨,

使用以下代码:

DATA:lv_text TYPE字符串,

< p> lt_cont_vals TYPE swconttab,

lt_cont_defs TYPE swbconttab,

lo_oref TYPE REF TO cx_root,

lo_workitm_cntxt TYPE REF TO cl_swf_run_workitem_context,

lo_wi_conv类型参考到if_swf_cnt_conversion,

lo_wi_cnt类型参考到cl_swf_cnt_container,

lif_wi_cnt类型参考到if_swf_ifs_parameter_container

p> *** ---获取工作项上下文

尝试。

调用方法cl_swf_run_workitem_context => get_instance

导出

im_wiid = im_wi_id

接收

re_instance = lo_workitm_cntxt。

捕获cx_swf_run_wim INTO lo_oref。

lv_text = lo_oref-> get_text( )。

结束。

*** ---获取工作项容器的实例

调用方法lo_workitm_cntxt-> if_wapi_workitem_context〜get_wi_container

接收

re_container = lif_wi_cnt。

*** ---将铸造工作项容器键入类CL_SWF_CNT_CONTAINRER

lo_wi_cnt?= lif_wi_cnt。

***-设置值

TRY。

lo_wi_cnt-> if_swf_cnt_element_access_1〜element_set_value(

导出

名称='ITEM'

值= t_item []

)。

捕获cx_swf_cnt_cont_access_denied。 "将访问权限更改为不允许的容器

CATCH cx_swf_cnt_elem_not_found。"未找到元素

CATCH cx_swf_cnt_elem_access_denied。 "不得更改元素

CATCH cx_swf_cnt_elem_type_conflict。"值和当前参数之间的类型冲突

CATCH cx_swf_cnt_unit_type_conflict。 "单元和当前参数之间的类型冲突

CATCH cx_swf_cnt_elem_def_invalid。"元素定义(例如,类型名称)无效

CATCH cx_swf_cnt_invalid_qname。 "无效/已经使用的合格名称

CATCH cx_swf_cnt_container。"容器服务中的异常

ENDTRY。

*非常重要-将更改保存到DB

尝试。

lo_wi_cnt-> save_to_database()。

捕获cx_swf_cnt_invalid_por。 "无效的持久对象引用

ENDTRY。

lo_workitm_cntxt-> publish()。

提交工作并等待。

一周热门 更多>