Добрый день.
Возникла такая проблемка. После создания отношении между ДП (транзакция BP, Отношения, FSB001), при сохранение проваливается в дамп.
Информация из дампа (MESSAGE_TYPE_X):
Code:
Technical information about the message:
Message class....... 00
Number.............. 081
Variable 1.......... "NESTED_PERFORM_ON_COMMIT"
Variable 2.......... "caller: SAPLBUPA_BADI_CALL"
Variable 3.......... "program: SAPLBUPA_BADI_CALL"
Variable 4.......... "form: BADI_CALL"
Code:
61 if sy-subrc ne 0.
62 describe table imode_orders lines i_level.
63 imode_orders_wa-prog = prog.
64 imode_orders_wa-rout = rout.
65 imode_orders_wa-i_level = i_level.
66 imode_orders_wa-u_level = u_level.
67 insert imode_orders_wa into imode_orders index sy-tabix.
68 export imode_orders imode_rb_orders to memory id %_vbkey.
69 endif.
70 else.
71 if sy-oncom = 'P'.
72 * already in PERFORM ON COMMIT
73 call 'C_SAPGPARAM' id 'NAME' field 'abap/allow_nested_poc' "#EC CI_CCALL
74 id 'VALUE' field allow_nested_poc.
75 if allow_nested_poc <> 'X'.
76 * nested PERFORM ON COMMIT not allowed
77 call 'AB_GET_CALLER' id 'PROGRAM' field caller. "#EC CI_CCALL
78 if caller <> 'SAPMSSY0'.
79 mpar1 = 'NESTED_PERFORM_ON_COMMIT'.
80 concatenate 'caller:' caller into mpar2 separated by ' '.
81 concatenate 'program:' prog into mpar3 separated by ' '.
82 concatenate 'form:' rout into mpar4 separated by ' '.
83 * switch back kernel flag: just for sure.
84 call 'SET_SWITCH_TXEND' id 'STATE' field ' '. "#EC CI_CCALL
85 * issue short dump
>>>>> message x081(00) with mpar1 mpar2 mpar3 mpar4.
87 endif.
88 endif.
89 endif.
90 read table orders
91 into orders_wa
92 with key prog = prog
93 rout = rout
94 binary search.
95 if sy-subrc ne 0.
96 describe table orders lines i_level.
97 orders_wa-prog = prog.
98 orders_wa-rout = rout.
99 orders_wa-i_level = i_level.
100 orders_wa-u_level = u_level.
101 insert orders_wa into orders index sy-tabix.
102 endif.
103 * for RTM test concerning POC during OS event handling
104 if sy-oncom = 'E'.
105 orders_wa-prog = prog.
Поотслеживал цепочку в коде.
Сохранение проходит успешно если не введён номер телефона (Нет метки в ADRC-FLAGCOMM2). Если же он введён, то в
CL_IM_CVI_ADDRESS_UPD_IMPL / CL_IM_CVI_ADDRESS_UPD_IMPL / 25
METHOD / IF_EX_ADDRESS_UPDATE~FINISHED
параметр lv_address_must_be_finished = 'X', после чего происходит заполнение таблицы orders. Таблица содержит имя программы и имя подпрограммы, которые последовательно запускаются. Когда отношения создаются, то эта таблица содержит 5 записей, а когда проваливается в дамп, то таблица содержит 53 записи (Видимо почему то пытается обновить всё в ДП) и запарывается на программе SAPLBUSS подпрограмме BUS_BAPI_SAVE. 48 записей заполняется в METHOD / IF_EX_ADDRESS_UPDATE~FINISHED если v_address_must_be_finished = 'X'.
Так же сохранение проходит успешно, если "Общие данные" находится в режиме изменения. Тогда он сначала сохраняет данные в дебиторе, а потом обновляет отношения и не задействует лишних подпрограмм обновления
Не могу найти никакой ноты по этому поводу. Может кто сталкивался с подобным?