我们在维护Infotype记录的ITXEX
字段(加长文本指示)时遇到困难。
假设我们在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
字段不变。
所描述的问题似乎与that question类似。尝试那里给出的解决方案并不能解决问题。
为什么两种方法(PA30
和功能模块)不一样?该如何解决?
答案 0 :(得分:0)
首先,您使用的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
字段将被正确处理,并且如果该记录中存在该字段,则该字段将保持不变。但是,此方法不适用于更新长文本本身,因为您必须使用object-oriented way类CL_HRPA_INFOTYPE_CONTAINER
的方法。