BADI_IDENTITY_UPDATE-在SU01D中更新用户功能和部门

2020-09-15 12:57发布

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

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


我们需要为"触摸用户" SU01时找到一个增强点/用户出口,以便在工作中心区域下的功能和部门字段中输入我们的要求(我们的要求基于 用户HR记录的派生/串联字段)。

我们希望BADI_IDENTITY_UPDATE将提供此功能,但遗憾的是不提供。 由于以下两个值均为" X",因此在以下位置失败。 该注释似乎暗示您不能使用set方法,而我们正尝试使用set_workplacedata方法,如下所示。

"在保存期间:如果gv_active_badi_identity_update eq if_identity => co_true,则BADI_IDENTITY_UPDATE不得调用任何SET方法。
macro_raise_internal_error.endif。

SAP Note 1750161中包含以下注释:"您不能再更改要保存的用户数据。" 我们已经尝试了各种方法,但似乎无济于事,Google也不提供任何答案。 我们知道我们可以使用功能'BAPI_USER_CHANGE',但是如果这样做,那么我们仍然需要知道将其挂在哪里,以便它在用户退出/增强时跳闸-使它像abap作业一样无法运行 为我们。 任何人都知道,只要任何程序"触摸"此记录,我们如何才能为SU01中的"功能和部门"字段输入自己的要求/数据?

如果是IF_BADI_IDENTITY_UPDATE〜SAVE,我们的代码:

在it_badi_identity_update处循环播放。请参考lr_identity_update。
在NEW bname处。 "新用户" 尝试方法lr_identity_update-> idref-> if_identity_person〜get_workplacedataIMPORTING
es_workplace = ls_workplace
eo_msg_buffer = lo_msg_buffer.CATCH cx_suid_identity.ENDTRY。
只是看看它是否可以工作
ls_workplace-department ='KH_DEPT2'。
ls_workplace-function ='KH_FUNCTION2'。

ls_change_fields ='DEPARTMENT'。APPENDls_change_fields至lt_change_fields。
ls_change_fields ='FUNCTION'.APPEND将ls_change_fields转换为lt_change_fields。 > eo_msg_buffer = lo_msg_buffer.CATCH cx_suid_identity.ENDTRY。
ENDAT。

ENDLOOP

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

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


我们需要为"触摸用户" SU01时找到一个增强点/用户出口,以便在工作中心区域下的功能和部门字段中输入我们的要求(我们的要求基于 用户HR记录的派生/串联字段)。

我们希望BADI_IDENTITY_UPDATE将提供此功能,但遗憾的是不提供。 由于以下两个值均为" X",因此在以下位置失败。 该注释似乎暗示您不能使用set方法,而我们正尝试使用set_workplacedata方法,如下所示。

"在保存期间:如果gv_active_badi_identity_update eq if_identity => co_true,则BADI_IDENTITY_UPDATE不得调用任何SET方法。
macro_raise_internal_error.endif。

SAP Note 1750161中包含以下注释:"您不能再更改要保存的用户数据。" 我们已经尝试了各种方法,但似乎无济于事,Google也不提供任何答案。 我们知道我们可以使用功能'BAPI_USER_CHANGE',但是如果这样做,那么我们仍然需要知道将其挂在哪里,以便它在用户退出/增强时跳闸-使它像abap作业一样无法运行 为我们。 任何人都知道,只要任何程序"触摸"此记录,我们如何才能为SU01中的"功能和部门"字段输入自己的要求/数据?

如果是IF_BADI_IDENTITY_UPDATE〜SAVE,我们的代码:

在it_badi_identity_update处循环播放。请参考lr_identity_update。
在NEW bname处。 "新用户" 尝试方法lr_identity_update-> idref-> if_identity_person〜get_workplacedataIMPORTING
es_workplace = ls_workplace
eo_msg_buffer = lo_msg_buffer.CATCH cx_suid_identity.ENDTRY。
只是看看它是否可以工作
ls_workplace-department ='KH_DEPT2'。
ls_workplace-function ='KH_FUNCTION2'。

ls_change_fields ='DEPARTMENT'。APPENDls_change_fields至lt_change_fields。
ls_change_fields ='FUNCTION'.APPEND将ls_change_fields转换为lt_change_fields。 > eo_msg_buffer = lo_msg_buffer.CATCH cx_suid_identity.ENDTRY。
ENDAT。

ENDLOOP

付费偷看设置
发送
2条回答
xfwsx85
1楼-- · 2020-09-15 13:29

在执行BADI_IDENTITY_UPDATE时,更改该事务中的用户数据已经为时已晚。

但是您可以使用此BAdI调用启用RFC的FM IN背景单元/任务,以便在提交和数据库更新后执行。 在此包装RFC FM中,您可以使用BAPI_USER_CHANGE和BAPI_TRANSACTION_COMMIT更新用户数据并提交更改。 另外,在BAdI实施中,还需要避免一次又一次地触发FM(例如,在Abap堆栈中查找RFC FM)

代楠1984
2楼-- · 2020-09-15 13:36

非常感谢! 这对我们有帮助并重新确认了事情。 我们将继续使用BAPI_USER_CHANGE

一周热门 更多>