自定义逻辑和业务加载项

使用此指令调用您所写的任何自定义 ABAP 编程。

活动

运行下列指令以调用自定义 ABAP 程序:

*CALL_CUSTOM_LOGIC <filter_value_of_the_BADI>

此处 “filter_value_of_the_BADI”UJ_CUSTOM_LOGIC BADI 业务加载项实施期间您提供的过滤器名称。

自定义逻辑示例

*CALL_CUSTOM_LOGIC COMPLEX_ALLOCATION

业务加载项示例

*START_BADI / *END_BADI 调用使用 UJ_CUSTOM_LOGIC BADI(事务 SE19)编写的任何自定义 ABAP 编程,而且可以将参数导出到业务加载项的 ABAP 代码中。

语法

*START_BADI <filter_value_of_your_BADI_implementation>

<key1> = <value1>

<key2> = <value2>

*END_BADI

此处 filter_value_of_your_BADI_implementationUJ_CUSTOM_LOGIC BADI 业务加载项实施期间您提供的过滤器名称。

语法示例

下列示例说明了如何调用已实施的业务加载项,使用 CALC_ACCT 作为过滤器值,把两个科目添加到目标科目:

*START_BADI ROUND

DECIMAL = 2

*END_BADI

EXECUTE 方法中,DECIMAL 参数在 IT_PARAM 内部表中可见。在 EXECUTE 方法中,可以写入自定义代码以更改 CT_DATA 的传入事务数据。

可选参数

*START_BADI / *END_BADI 指令中,可以使用下列可选参数:

  • 查询 — 执行默认查询。有效值是“启用”、默认值和“禁用”。如果想执行您自己的查询,则把查询设置为“禁用”。

  • 写 — 自动写回数据。有效值是“启用”、默认值和“禁用”。

示例

实施代码(位于已实施类的 EXECUTE 方法中)以降低折旧

注意

在可以使用脚本逻辑中的业务加载项之前,请使用事务 SE19 实施 UJ_CUSTOM_LOGIC BADI。请参阅位于 http://help.sap.com/saphelp_nw70/helpdata/en/32/a83942424dac04e10000000a1550b0/content.htm在 SAP 网站发布的信息 的 ABAP 在线帮助,以获取关于如何实施业务加载项的信息。

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.

调用业务加载项的脚本逻辑文件内容:

*START_BADI DECD

QUERY = ON

WRITE = ON

YEAR = 1

PERCENTAGE = 10 *END_BADI

注意

业务加载项中的 ET_MESSAGE 把消息记录到数据管理器中。

如果想停止执行,请在业务加载项实施中建立 cx_uj_custom_logic 例外。

“本文档中包括的任何软件编码和/或代码行/字符串(“代码”)仅为示例,不可用于生产系统环境中。”“代码仅为更好、更直观地解释特定编码的语法和语法规则。”SAP 不担保本文中代码的正确性和完整性,且 SAP 不对因使用代码而造成的错误或损害负责,除非这些损害是由 SAP 故意或因其重大疏忽所造成。

更多信息

关于创建 SAP 业务加载项的说明,请参阅 SAP NetWeaver Library 中的 ABAP 模型帮助。