调用HR_INFOTYPE_OPERATION时,ITXEX字段将清除

时间:2019-05-16 14:09:45

标签: sap abap

我们在维护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和功能模块)不一样?该如何解决?

1 个答案:

答案 0 :(得分:0)

首先,您使用的FM参数不正确。如果您设置了nocommit = TRUE,您希望如何更新信息类型?

此外,您缺少更新过程必须使用的正确顺序:

  1. 锁定员工

  2. 阅读信息类型

  3. 更新信息类型

  4. 解锁员工

正确的代码段应该是

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 wayCL_HRPA_INFOTYPE_CONTAINER的方法。