Добрый день.
Написал обработчик входящих IDoc для DOCMAS05, который, после вызова стандартного IDOC_INPUT_DOCMAS, должен обновлять некоторые поля в созданной записи в таблице draw. Но обновление происходит только в тестовом вызове через WE19, а в онлайновом вызове (когда IDoc приходит), обновление не срабатывает. Поставил commit везде где только мог - все-равно не срабатывает. Кто может подсказать, в чем может быть дело? И правильно ли ставить коммиты в inbound idoc processing?
Код прилагаю:
Code:
FUNCTION ZIUS_IDOC_INPUT_DOCMAS .
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------
* ALE_MAINT: Defines whether maintanance for the object-links is
* allowed.
* ALE_MAINT = "" (Default) means maint. for the object-links
* with ALE IS allowed
* ----------------------------------------------------------------------
CALL FUNCTION 'IDOC_INPUT_DOCMAS'
EXPORTING
INPUT_METHOD = INPUT_METHOD
MASS_PROCESSING = MASS_PROCESSING
IMPORTING
IN_UPDATE_TASK = IN_UPDATE_TASK
CALL_TRANSACTION_DONE = CALL_TRANSACTION_DONE
WORKFLOW_RESULT = WORKFLOW_RESULT
APPLICATION_VARIABLE = APPLICATION_VARIABLE
TABLES
IDOC_CONTRL = IDOC_CONTRL
IDOC_DATA = IDOC_DATA
IDOC_STATUS = IDOC_STATUS
RETURN_VARIABLES = RETURN_VARIABLES
SERIALIZATION_INFO = SERIALIZATION_INFO
EXCEPTIONS
WRONG_FUNCTION_CALLED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* ALE distribution unity "note0361739
DATA: "note0361739
it_dsp_edidd LIKE edidd OCCURS 0 WITH HEADER LINE. "note0361739
* ALE distribution unity : check, if under unity control "note0388002
clear: "note0388002
it_dsp_edidd, "note0388002
it_dsp_edidd[]. "note0388002
loop at idoc_data where docnum = idoc_contrl-docnum. "note0388002
append idoc_data to it_dsp_edidd. "note0388002
endloop. "note0388002
data: z1 type ZDRAW1.
data: z2 type ZDRAW2.
data: z3 type ZDRAW3.
data: ls_e1drawm LIKE e1drawm.
data: psx_draw like draw.
clear: z1, z2, z3, psx_draw, ls_e1drawm.
LOOP AT it_dsp_edidd INTO idoc_data.
CASE idoc_data-segnam.
when 'E1DRAWM'.
MOVE idoc_data-sdata TO ls_e1drawm.
MOVE-CORRESPONDING ls_e1drawm TO psx_draw.
WHEN 'ZDRAW1'.
z1 = idoc_data-sdata.
WHEN 'ZDRAW2'.
z2 = idoc_data-sdata.
WHEN 'ZDRAW3'.
z3 = idoc_data-sdata.
endcase.
endloop.
if z1 is not initial or z2 is not initial or z3 is not initial.
data: wa_draw like draw.
commit work and wait. "!!!
select single *
from draw
into wa_draw
where
DOKAR = psx_draw-dokar
and DOKNR = psx_draw-doknr
and DOKVR = psx_draw-dokvr
and DOKTL = psx_draw-doktl.
if sy-subrc is initial.
move-corresponding z1 to wa_draw.
move-corresponding z2 to wa_draw.
move-corresponding z3 to wa_draw.
commit work and wait. "!!!
update draw from wa_draw.
if sy-SUBRC is initial.
commit work and wait. "!!!
endif.
endif.
endif.
ENDFUNCTION.