Dorad
Dorad

Reputation: 3713

ITXEX field cleared when HR_INFOTYPE_OPERATION is called

We got into difficulties in maintaining the ITXEX field (Long text indication) of an Infotype record.

Say we got an existing record in an Infotype database table with a long text filled (ITXEX field value in that record is set to 'X').

Some process updates the record through HR_CONTROL_INFTY_OPERATION like this:

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.

This call does update the record but clearing it's ITXEX field.

It's important to say that making the same action through PA30 does update the record and maintain ITXEX field as it was.

The described problem seems similar to that question. Trying the solutions given there didn't solve the problem.

Why the two approaches (PA30 and function module) don't work the same? How to fix this?

Upvotes: 2

Views: 1383

Answers (1)

Suncatcher
Suncatcher

Reputation: 10621

First of all, FM parameters you use are incorrect. How do you want the infotype to be updated if you set nocommit = TRUE?

Also, you are missing the correct sequence which must be used for the update procedure:

  1. Lock the Employee

  2. Read the infotype

  3. Update the infotype

  4. Unlock the Employee

The correct snippet for your task would be

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'.

This way itxex field is treated correctly and if existed on that record, will remain intact. However, this method will not work for updating the long text itself, for that you must use object-oriented way, methods of class CL_HRPA_INFOTYPE_CONTAINER.

Upvotes: 0

Related Questions