Пользовательская логика и BAdI
Эта инструкция служит для вызова любой написанной вами пользовательской ABAP-программы.
Чтобы вызвать пользовательские ABAP-программы, выполните следующую инструкцию:
*CALL_CUSTOM_LOGIC <filter_value_of_the_BADI>
где filter_value_of_the_BADI является именем фильтра, указанным во время реализации BAdI UJ_CUSTOM_LOGIC BADI.
Пример пользовательской логики
*CALL_CUSTOM_LOGIC COMPLEX_ALLOCATION
Примеры BAdI
*START_BADI / *END_BADI вызывают любую пользовательскую ABAP-программу, написанную с помощью UJ_CUSTOM_LOGIC BADI (транзакция SE19), и позволяют экспортировать параметры в ABAP-кодировки в BAdI.
Синтаксис
*START_BADI <filter_value_of_your_BADI_implementation>
<key1> = <value1>
<key2> = <value2>
*END_BADI
где filter_value_of_your_BADI_implementation является именем фильтра, указанным во время реализации BAdI UJ_CUSTOM_LOGIC BADI.
Пример синтаксиса
Следующий пример показывает, как вызвать реализованный BAdI с CALC_ACCT в качестве значения фильтра, чтобы добавить два счета в счет назначения:
*START_BADI ROUND
DECIMAL = 2
*END_BADI
Параметр DECIMAL отображается во внутренней таблице IT_PARAM в методе EXECUTE. В методе EXECUTE можно написать пользовательский код для изменения входящих переменных данных CT_DATA.
Необязательные параметры
В инструкции *START_BADI / *END_BADI можно использовать следующие необязательные параметры:
Query - выполнение запроса по умолчанию. Действительные значения: "Вкл." (On), значение по умолчанию и "Выкл." (Off). Установите для Query значение "Выкл.", чтобы выполнить собственный запрос.
Write - автоматическая обратная запись данных. Действительные значения: "Вкл." (On), значение по умолчанию и "Выкл." (Off).
Реализация кода (в методе EXECUTE реализованного класса) для отклонения амортизации
Прежде чем использовать BAdI в логике скрипта, реализуйте UJ_CUSTOM_LOGIC BADI из транзакции SE19. Для получения информации о реализации BAdI см. онлайн-справку ABAP по адресу http://help.sap.com/saphelp_nw70/helpdata/en/32/a83942424dac04e10000000a1550b0/content.htm
.
METHOD if_uj_custom_logic~execute.
DATA: ls_param TYPE ujk_s_script_logic_hashentry,
l_log TYPE string,
l_ast_acct(16) TYPE c,
l_year(3) TYPE n,
l_percentage(3) TYPE p,
lo_model TYPE REF TO if_uj_model,
lo_dim TYPE REF TO if_uja_dim_data,
ls_dim TYPE uja_s_dim,
time_dim(16) TYPE c,
lr_rec TYPE REF TO data,
lr_result_rec TYPE REF TO data,
l_intermediate_value TYPE uj_sdata,
lt_final TYPE REF TO data.
FIELD-SYMBOLS: <ls_rec> TYPE ANY,
<ls_result_rec> TYPE ANY,
<ls_time> TYPE ANY,
<ls_signed.data> TYPE ANY,
<lt_final> TYPE STANDARD TABLE
* Убедитесь, что все параметры переданы.
CLEAR ls_param.
READ TABLE it_param WITH KEY hashkey = 'YEAR' INTO ls_param.
IF sy-subrc NE 0.
l_log = 'You have not specified the parameter ''YEAR'' which is required.'.
cl_ujk_logger=>log( i_object = l_log ).
RAISE EXCEPTION TYPE cx_uj_custom_logic.
EXIT.
ENDIF.
l_year = ls_param-hashvalue.
CLEAR ls_param.
READ TABLE it_param WITH KEY hashkey = 'PERCENTAGE' INTO ls_param.
IF sy-subrc NE 0.
l_log = 'You have not specified the parameter ''PERCENTAGE'' which is required.'.
cl_ujk_logger=>log( i_object = l_log ).
RAISE EXCEPTION TYPE cx_uj_custom_logic.
EXIT.
ENDIF.
l_percentage = ls_param-hashvalue.
* Вызовите имя измерения счета
cl_uj_model=>get_model( EXPORTING i_appset_id = i_appset_id
RECEIVING ro_model = lo_model ).
CALL METHOD lo_model->get_dim_data_by_type
EXPORTING
i_dim_type = uj00_cs_dim_type-time
i_appl_id
= i_appl_id
RECEIVING
ro_dim_data = lo_dim.
TRY.
CALL METHOD lo_dim->get_info
IMPORTING
es_dim_info = ls_dim.
ENDTRY.
time_dim = ls_dim-dimension. TRANSLATE time_dim TO UPPER CASE.
CREATE DATA lt_final LIKE ct_data.
ASSIGN lt_final->* TO <lt_final>. CREATE DATA lr_result_rec LIKE LINE OF ct_data. ASSIGN lr_result_rec->* TO <ls_result_rec>. CREATE DATA lr_rec LIKE LINE OF ct_data. ASSIGN lr_rec->* TO <ls_rec>.
* Выполните циклический проход по входящим данным и создайте набор результатов
LOOP AT ct_data ASSIGNING <ls_rec>.
<ls_result_rec> = <ls_rec>.
ASSIGN COMPONENT time_dim OF STRUCTURE <ls_result_rec> TO <ls_time>.
<ls_time>+0(4) = is <ls_time>+0(4) + l_year.
ASSIGN COMPONENT 'SIGNEDDATA' OF STRUCTURE <ls_result_rec> TO <ls_signeddata>.
DO l_year TIMES.
l_intermediate_value = l_intermediate_value + ( <ls_signeddata> - l_intermediate_value ) * l_percentage / 100.
ENDDO.
<ls_signeddata> = <ls_signeddata> - l_intermediate_value.
APPEND <ls_result_rec> TO <lt_final>.
ENDLOOP.
* Отправьте данные результатов обратно.
В Business Planning and Consolidation существующие значения всегда перезаписываются.
ct_data = <lt_final>.
ENDMETHOD.
Содержимое файла логики скрипта для вызова BAdI:
*START_BADI DECD
QUERY = ON
WRITE = ON
YEAR = 1
PERCENTAGE = 10 *END_BADI
ET_MESSAGE в BADI регистрирует сообщения администратору данных.
Если необходимо остановить выполнение, вызовите исключение cx_uj_custom_logic в реализации BAdI.
Любое кодирование программного обеспечения и/или строки текста программы ("Код"), включенные в эту документацию, являются только примерами и не предназначены для использования в среде продуктивной системы. Код предназначен лишь для лучшего объяснения и наглядного представления синтаксиса и правил построения выражений в определенном кодировании. SAP не гарантирует правильность и полноту приведенного здесь Кода. SAP не будет нести ответственность за ошибки и ущерб, возникшие по причине использования этого Кода, за исключением случаев, если такой ущерб нанесен со стороны SAP намеренно или по грубой неосторожности.
Для получения инструкций о создании SAP Business Add-In см. справку по ABAP-модели в библиотеке SAP NetWeaver.