首页 > 解决方案 > 调用 HR_INFOTYPE_OPERATION 时清除 ITXEX 字段

问题描述

我们在维护ITXEXInfotype 记录的字段(长文本指示)时遇到了困难。

假设我们在数据库表中有一条现有记录,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和功能模块)不一样?如何解决这个问题?

标签: abapsap-hr

解决方案


首先,你使用的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字段被正确处理,如果存在于该记录中,将保持不变。但是,这种方法不适用于更新长文本本身,因为您必须使用面向对象的方式,类的方法CL_HRPA_INFOTYPE_CONTAINER


推荐阅读