カスタムロジックと BADI
この命令を使用して、書き込んだカスタム ABAP プログラミングを呼び出します。
以下の命令を実行して、カスタム ABAP プログラムを呼び出します。
*CALL_CUSTOM_LOGIC <filter_value_of_the_BADI>
filter_value_of_the_BADI は、UJ_CUSTOM_LOGIC BADI の BAdI 実装時に指定したフィルタの名称です。
カスタムロジックの例
*CALL_CUSTOM_LOGIC COMPLEX_ALLOCATION
BAdI の例
*START_BADI/*END_BADI により、UJ_CUSTOM_LOGIC BADI (トランザクション SE19) を使用して書き込まれたカスタム ABAP プログラミングが呼び出され、パラメータを BAdI の ABAP コードへエクスポートすることが可能になります。
構文
*START_BADI <filter_value_of_your_BADI_implementation>
<key1> = <value1>
<key2> = <value2>
*END_BADI
filter_value_of_your_BADI_implementation は UJ_CUSTOM_LOGIC BADI の BAdI 実装時に指定したフィルタの名称です。
構文例
以下の例では、2 つの勘定を宛先勘定に追加するために、CALC_ACCT をフィルタ値として使用して実装 BAdI を呼び出す方法が示されています。
*START_BADI ROUND
DECIMAL = 2
*END_BADI
DECIMAL パラメータは、EXECUTE メソッド内の IT_PARAM 内部テーブルに表示されます。EXECUTE メソッドでは、カスタムコードを記述して、CT_DATA の受信トランザクションデータを変更することができます。
オプションパラメータ
以下のオプションパラメータを *START_BADI/*END_BADI 命令内で使用することができます。
Query - デフォルトクエリを実行します。有効な値は On (デフォルト) および Off です。独自のクエリを実行する場合は、Query を Off に設定します。
Write - データが自動的にライトバックされます。有効な値は On (デフォルト) および Off です。
減価償却を減少させるコードの (実装クラスの EXECUTE 方法による) 実装
スクリプトロジックで BAdI を使用する前に、トランザクション SE19 を実行して UJ_CUSTOM_LOGIC BADI を実装してください。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
BAdI の ET_MESSAGE によってデータマネージャへのメッセージがログ記録されます。
実行を停止する場合は、BAdI 実装内で cx_uj_custom_logic 例外を発生させます。
この文書に含まれるソフトウェアコーディングおよびコード行/文字列 (以下 "コード" という) は例として示されるものであり、本稼動システム環境で使用することを意図するものではありません。コードは、特定のコーディングの構文とフレージングルールを分かりやすく説明し、視覚化することを目的としています。SAP は、ここで提供されるコードの正確性や完全性を保証せず、コードの使用によって生じたエラーまたは損害に対して責任を負いません。ただし、当該損害が SAP の故意または重大な過失によって生じた場合は除くものとします。
SAP ビジネスアドインの登録に関する説明については、SAP NetWeaver ライブラリの ABAP モデルヘルプを参照してください。