В третьей части мы создали свой бизнес-объект ZTS_CLIENT. Сначала создадим determination – определение, которое отобразит значение полей из transient-структуры. В данном примере напишем функционал, который будет находить бизнес-партнера с номером PARTNER и копировать его наименование в поле transient-структуры.

Новый determination назовём ZDET_ROOT_NAME_ORG

Также укажем имя класса, реализующего функционал определения. На закладке Trigger Condition укажем момент вызова

Заклада Evaluation Timepoints оставляем без изменений.
На закладке Determination Dependency можно указать зависимости между несколькими определениями. Так как у нас первое определение, то там будет пусто Двойным кликом по имени класса создадим его заготовку.

В методе execute реализуем поиск бизнес-партнера и копирование его наименования в поле NAME_ORG1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
METHOD /bobf/if_frw_determination~execute. DATA: lt_key TYPE /bobf/t_frw_key, lt_root TYPE zts_t_root, lr_data TYPE REF TO zts_s_root, lt_changed_fields TYPE /bobf/t_frw_name, lo_message TYPE REF TO /bobf/if_frw_message, ls_msg TYPE symsg. CREATE DATA lr_data. IF eo_message IS INITIAL. eo_message = /bobf/cl_frw_factory=>get_message( ). ENDIF. CHECK it_key IS NOT INITIAL. io_read->retrieve( EXPORTING iv_node = zif_ts_client_c=>sc_node-root it_key = it_key IMPORTING eo_message = lo_message et_data = lt_root ). eo_message->add( lo_message ). READ TABLE lt_root ASSIGNING FIELD-SYMBOL(<ls_root>) INDEX 1. IF sy-subrc = 0. SELECT name_org1 INTO @DATA(lv_name_org1) UP TO 1 ROWS FROM but000 WHERE partner = @<ls_root>-partner. ENDSELECT. IF sy-subrc > 0. " Бизнес партнер &1 не найден MESSAGE e001(zts) WITH <ls_root>-partner INTO DATA(lv_msg). MOVE-CORRESPONDING sy TO ls_msg. eo_message->add_message( is_msg = ls_msg ). ELSE. lr_data->name_org1 = lv_name_org1. INSERT zif_ts_client_c=>sc_node_attribute-root-name_org1 INTO TABLE lt_changed_fields. io_modify->update( EXPORTING iv_node = is_ctx-node_key iv_key = <ls_root>-key is_data = lr_data it_changed_fields = lt_changed_fields ). ENDIF. ENDIF. ENDMETHOD. |
Разберем, что делает этот код.
В этот метод идентификатор строки ноды приходит в таблице it_key. С помощью метода retrieve мы получаем данные в таблицу lt_root. Затем мы находим бизнес-партнера с этим номером в таблице BUT000 и получаем его наименование в переменную lv_name_org1. В случае, если такого бизнес-партнера не нашли, сообщение об этом добавляем в объект eo_message. Иначе сохраняем наименование бизнес-партнера.