Angie написал:
Полина, а Вы пробовали ставить не "статическую" точку прерывания на raise exception, а "условную"? Т.е. в отладчике, когда Вы в ФМе, через меню (сорри, на английском) Breakpoints -> Breakpoint at -> Breakpoint at Statement -> и введите raise exception. А дальше f8 и смотрите где происходит эксепшен.
Запускаю, как и Вы сказали с Break point at "cx_loy_frw_object_excep" и "cx_loy_frw_appl_cont_excep" (постаралсь покороче описать):
1) Срабатывает исключение в:
METHOD if_loy_frw_appl_controller~create_object_data
...
CATCH cx_loy_frw_object_excep INTO lr_object_excep.
...
lv_message='Error during check before create'2) Полученый lv_message райзит RAISE EXCEPTION TYPE cx_loy_frw_appl_cont_excep
3) Срабатывает CATCH в методе :
* Call Super with iv_fill_attributes = abap_true
TRY.
CALL METHOD super->if_loy_frw_appl_controller~create_object_data
EXPORTING
iv_object = iv_object
iv_create_key = iv_create_key
iv_fill_attributes = abap_true
IMPORTING
ev_success = ev_success
CHANGING
ct_data = ct_data.
CATCH cx_loy_frw_appl_cont_excep . ENDTRY.
5) Возвращается в CRM_LOY_MA_CREATE_PROCESS_API и отрабатывает кусок:
...
create data lt_data_specattr type loyt_ma_spec_attr.
assign lt_data_specattr->* to <ft_obj_specattr>.
assign lt_data_genattr->* to <ft_obj_data> .
loop at <ft_obj_data> assigning <fs_obj_data> .
"ls_specattr = is_specattr .
assign local copy of is_specattr to <fs_obj_specattr> .
assign component 'REF_GUID' of structure <fs_obj_specattr> to <fv_guid_child>.
assign component 'GUID' of structure <fs_obj_data> to <fv_guid>.
<fv_guid_child> = <fv_guid> .
insert <fv_guid> into table lt_ma_guids .
insert <fs_obj_specattr> into table <ft_obj_specattr> .
try.
call method lr_appl_cntr->create_object_data
exporting
iv_object = cl_loy_com_ma_appl_constant=>gc_object_name_ma_specific
importing
ev_success = lv_success
changing
ct_data = lt_data_specattr.
...
6) и снова срабатывает иключение в METHOD if_loy_frw_appl_controller~create_object_data:
...
CATCH cx_loy_frw_object_excep INTO lr_object_excep.
lv_message='Error while creating new record'...
7) повтор шагов 4 и 5
возврат в CRM_LOY_MA_CREATE_PROCESS_API и выход из цикла:
exit. " since this API accepts and creates 1 MA
9) и совсем конец:
" Exit if create has failed
if lv_success ne 'X'.
ev_create_failed = abap_true .
return .
endif.