abap - 调用 HR_INFOTYPE_OPERATION 时清除 ITXEX 字段
问题描述
我们在维护ITXEX
Infotype 记录的字段(长文本指示)时遇到了困难。
假设我们在数据库表中有一条现有记录,Infotype
其中填充了长文本(ITXEX
该记录中的字段值设置为'X'
)。
一些过程通过HR_CONTROL_INFTY_OPERATION
这样的方式更新记录:
CALL FUNCTION 'HR_CONTROL_INFTY_OPERATION'
EXPORTING
infty = '0081'
number = '12345678'
subtype = '01'
validityend = '31.12.9999'
validitybegin = '19.05.2019'
record = ls_0081 " ( ITXEX = 'X' )
operation = 'MOD'
tclas = 'A'
nocommit = abap_true
IMPORTING
return = ls_return.
此调用确实更新了记录,但清除了它的ITXEX
字段。
重要的是,通过执行相同的操作PA30
确实会更新记录并维护ITXEX
字段。
所描述的问题似乎与那个问题相似。尝试那里给出的解决方案并没有解决问题。
为什么这两种方法(PA30
和功能模块)不一样?如何解决这个问题?
解决方案
首先,你使用的FM参数不正确。如果您设置,您希望如何更新信息类型nocommit = TRUE
?
此外,您缺少更新过程必须使用的正确顺序:
锁定员工
阅读信息类型
更新信息类型
解锁员工
您的任务的正确片段是
DATA: ls_return TYPE bapireturn1.
DATA: l_infty_tab TYPE TABLE OF p0002.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = '00000302'
infty = '0002'
TABLES
infty_tab = l_infty_tab.
READ TABLE l_infty_tab ASSIGNING FIELD-SYMBOL(<infotype>) INDEX 1.
<infotype>-midnm = 'Shicklgruber'. " updating the field of infotype
CALL FUNCTION 'ENQUEUE_EPPRELE'
EXPORTING
pernr = '00000302'
infty = '0002'.
CALL FUNCTION 'HR_CONTROL_INFTY_OPERATION'
EXPORTING
infty = <infotype>-infty
number = <infotype>-pernr
subtype = <infotype>-subty
validityend = <infotype>-endda
validitybegin = <infotype>-begda
record = <infotype>
operation = 'MOD'
tclas = 'A'
IMPORTING
return = ls_return.
CALL FUNCTION 'DEQUEUE_EPPRELE'
EXPORTING
pernr = '00000302'
infty = '0002'.
这种方式itxex
字段被正确处理,如果存在于该记录中,将保持不变。但是,这种方法不适用于更新长文本本身,因为您必须使用面向对象的方式,类的方法CL_HRPA_INFOTYPE_CONTAINER
。
推荐阅读
- c - 如何使 GDB stepi 更快?
- html - 如何在 flex 布局中插入不同宽度的占位符?
- azure - ASP.NET CORE 5 - AD 身份验证
- javascript - 使元素可拖动以用于触摸屏
- visual-studio - 调试器显示不存在的对象属性
- android - 重复的 zip 条目 [classes.jar:android/support/v4/view/ViewPager$DecorView.class]
- python-3.x - 通过 Python 更新 sqlite 表中的特定列
- c# - 交换和替换文本文件 C# 中的数字
- laravel - 让用户在 Laravel Jetstream 上一起注册并接受邀请
- reactjs - React-Admin 自定义登录页面和 React Hook