BADI 构建方法(NEW BADI 实施)
BADI 構建方法(NEW BADI 實施)
介紹
SAP Business Planning and Consolidation(SAP BPC)提供SAP Netweaver版本和Microsoft平臺版本。SAP BPC Netweaver的優(yōu)勢在于可以使用ABAP(高級業(yè)務應用程序編程),即SAP編程語言。
可以使用SAP BAdI(Business Add Ins)功能將SAP BPC腳本邏輯轉換為ABAP。BAdI是對SAP代碼的標準版本的增強。BAdI的性能明顯優(yōu)于SAP BPC腳本。
本文檔結合了一些提示和技巧,可幫助您為SAP BPC創(chuàng)建BAdI實現。
選擇合適的BAdI
通過事務SE18打開BAdi Builder以顯示所有可用的增強點條目。可以使用與SAP BPC相關的幾個BAdI(例如UJR_WRITE_BACK,UJ_CUSTOM_LOGIC),并且可以通過搜索(按F4)找到字符串UJ *來找到。選擇最適合您需求的那個。
圖1:BAdI Builder
?
顯示所選增強點后,右鍵單擊“實施”并選擇“創(chuàng)建BAdI實施”或選擇現有實施。
圖2:創(chuàng)建BAdI實現
?
需要創(chuàng)建幾個對象:
- 類(例如ZCLASS_BADI_JOURNAL);?根據BAdI實現創(chuàng)建一個新類,
- 增強實施(例如ZBPC_ELEMENTARYPACK);?一個增強實現可以包含多個BAdI實現,
- BAdI實現(例如ZBPC_BADI_JOURNAL_C_IFRS_DEV)。一個BAdI實現可以鏈接到一個或多個應用程序。
訪問現有BAdI編碼的另一種方法是通過事務SE80 Object Navigator。輸入所需的類并打開方法以直接更改它。
圖3:對象導航器
?
過濾BAdI
一旦增強實施可用,您需要過濾BAdI。這保證了代碼僅針對所需的應用程序集和應用程序執(zhí)行(分別對應于InfoArea和InfoCube)。通過多次單擊“創(chuàng)建過濾器組合”,可以添加多個過濾器組合。
過濾器特定于每個增強點。下面是UJR_WRITE_BACK增強點的示例。
圖4:過濾BAdI
?
Module_ID可以有多個值:
| COMM | 評論條目 |
| DM | 數據管理器 |
| DOCS | 文件修改 |
| JRN | 期刊錄入 |
| 人 | 手動輸入 |
聲明數據
在方法的開頭,聲明了幾個常量,字段符號等。常量是固定值,例如值AST(帳戶類型資產)。如果必須更改此值,則只需執(zhí)行一次更改。
CONSTANTS: c_acctype_act TYPE c LENGTH 3 VALUE 'AST', "asset
字段符號和數據引用允許動態(tài)訪問數據對象。無需像使用靜態(tài)訪問一樣指定對象的名稱,字段符號和數據引用允許您訪問和傳遞在運行時之前您不知道其名稱和屬性的數據對象。
FIELD-SYMBOLS:
????? ?????? TYPE table, "result itab
本文檔中使用的每個自定義對象的聲明在附件中列出。
訪問傳入數據
便于訪問任何維度需要大量編碼,這是由于BAdI實現的抽象性。
以下代碼允許訪問維度帳戶,并且應該針對需要查閱或更新的每個維度重復這些代碼。
"Find the account dimension by its type
LOOP AT it_dim_obj ASSIGNING
????? ?
?? WHERE dim_type = uj00_cs_dim_type-account.
????? lo_account ?=
??????????? -dim_obj.
????? ls_account =
????????????????? .
ENDLOOP.
"preparation: create data structure and assign fields
CREATE DATA lr_data LIKE LINE OF ct_array.
ASSIGN lr_data->* TO
??????????????????????? .
ASSIGN COMPONENT ls_account-dimension OF
STRUCTURE
?????????????????????????????? ?TO
???????????????????????????????????? . "account
對象it_dim_obj包含維度的元數據。您可以找到每個維度及其所有屬性的InfoObject名稱。
圖5:IT_DIM_OBJ的內容
?
圖6:IT_DIM_OBJ(1)-T_ATTR的內容
?
圖7:LS_ACCOUNT的內容
?
對象uj00_cs_dim_type在全局類型池UJ00中定義。因此,對于其他維度,uj00_cs_dim_type-account可以由uj00_cs_dim_type-entity等替換。
begin of uj00_cs_dim_type,
? account?? type uj_dim_type? value 'A',
? entity??? type uj_dim_type? value 'E',
? time????? type uj_dim_type? value 'T',
? currency? type uj_dim_type? value 'R',
? category? type uj_dim_type? value 'C',
? datasrc?? type uj_dim_type? value 'D',
? intco???? type uj_dim_type? value 'I',
? subtables type uj_dim_type? value 'S',
? user????? type uj_dim_type? value 'U',
? group???? type uj_dim_type? value 'G',
end of uj00_cs_dim_type.
假設需要屬性帳戶類型和帳戶組。使用函數get_attr_list獲取維度的屬性列表。實際成員通過函數read_mbr_data獲取。
"Get attribute AccountType / Account Group
lo_account->get_attr_list( IMPORTING et_attr_list = lt_attr_list ).
LOOP AT lt_attr_list INTO ls_attr_list
????? WHERE attribute_name = ujr0_c_attr_acctype OR
??????????? attribute_name = c_attr_group.
? APPEND ls_attr_list-attribute_name TO lt_attr_name.
ENDLOOP.
?"Get Members of account
?CALL METHOD lo_account->read_mbr_data
??? EXPORTING
????? if_ret_hashtab = abap_true
????? it_attr_list?? = lt_attr_name "columns:attributes name list
?*???? it_hier_list?? = lt_hier_name "columns:hieracies name list
??? IMPORTING
????? er_data??????? = lr_data.
? ASSIGN lr_data->* TO
????? 。
圖8:LT_ACCOUNT_MBR的內容
?
內部表ct_array是一個生成的對象,它包含來自BPC應用程序的所有記錄。循環(huán)使用此表ct_array可以訪問每條記錄。
LOOP AT ct_array INTO .
在第一個循環(huán)期間,會創(chuàng)建幾個對象來捕獲新的計算記錄。對象lt_tab?
是在運行時創(chuàng)建的臨時對象,其結構與ct_array相同。然后將lt_tab的結構分配給字段符號所以后者有一個結構,它是一個表。為了能夠使用表的一行,字符符號是類似的創(chuàng)建。可以使用ASSIGN?
COMPONENT?
語句將字段符號分配給一行的單個字段。例如,然后可以通過訪問列帳戶。
IF
????? ?IS NOT ASSIGNED.
?CREATE DATA lt_tab LIKE ct_array.
?ASSIGN lt_tab->* TO
??????????? .
?CREATE DATA lr_data_r LIKE LINE OF ct_array.
?ASSIGN lr_data_r->* TO
????????????????? .
?ASSIGN COMPONENT ls_account-dimension OF
???? STRUCTURE
??????????????????????? ?TO
?????????????????????????????? . "account
ENDIF.
接下來,我們搜索包含當前帳戶及其屬性的帳戶成員數據的內部表。這些屬性保存在字段符號中?和
。
"get account members
?READ TABLE
????? ???? WITH TABLE KEY (ujr0_c_member_id) =
??????????? ???? ASSIGNING
????????????????? .
?IF sy-subrc = 0.
???? ASSIGN COMPONENT c_attr_acctype OF
???????? STRUCTURE
??????????????????????? ?TO
?????????????????????????????? .
???? ASSIGN COMPONENT c_attr_group OF
???????? STRUCTURE
???????????????????????????????????? ?TO
?????????????????????????????????????????? .
?
現在可以通過相應的字段符號訪問所有字段。可以使用這些字段符號執(zhí)行各種計算和操作。
訪問現有數據
當新數據從BPC發(fā)送到后端的BW InfoCube時,有時我們需要訪問BW InfoCube中已存在的數據。數據分解就是一個很好的例子。在BPC中,可以在父級別輸入數據,然后可以按比例將這些數據分配給現有數據。這對于實體和時間等維度最有意義。
以下代碼檢索實體的層次結構信息,并且還為時間組件重復。
lo_entity->get_hier_list( IMPORTING et_hier_info = lt_hier_info ).
? LOOP AT lt_hier_info INTO ls_hier_info.
??? APPEND ls_hier_info-hier_name TO lt_hier_name.
? ENDLOOP.
??
數據按比例分解為現有數據。因此,我們需要查找與來自BPC應用程序的數據相對應的現有數據。這是通過啟動RSDRI查詢來實現的,該查詢需要返回要返回的維度列表以及要應用的過濾器列表。第一步是檢索多維數據集元數據。
CLEAR ls_application.
? lo_appl_mgr->get(
??? EXPORTING
???? ?if_with_measures = abap_false????
????? if_summary?????? = abap_false????
??? IMPORTING
????? es_application?? = ls_application ).?
如果處理的行是父級,我們需要讓其子級能夠在子級之后分發(fā)數據。必須針對時間維度重復此代碼。
CALL METHOD lo_entity->get_children_mbr
????? EXPORTING
??????? i_parent_mbr???? =
????? ?
??????? i_level????????? = -1
??????? if_only_base_mbr = abap_true?
????? IMPORTING
??????? et_member??????? = lt_ent_children.
??? DESCRIBE TABLE lt_ent_children LINES nr_ent_chil.
我們準備一個范圍來過濾實體基礎成員。必須針對時間維度擴展相同的范圍。
LOOP AT lt_ent_children INTO ls_base_en.
??????? ls_range-dimension = 'COMPANY'.
??????? ls_range-low = ls_base_en.
??????? APPEND ls_range TO lt_range.
????? ENDLOOP.
我們將多維數據集維度保存在列表中并擴展范圍以使用與BPC中相同的限制。
REFRESH lt_dim_list.
????? LOOP AT ls_application-dimensions INTO ls_dimensions.
??????? APPEND ls_dimensions-dimension TO lt_dim_list.
??????? ls_range-dimension = ls_dimensions-dimension.?
??????? ASSIGN COMPONENT ls_dimensions-dimension
? OF STRUCTURE
????? ?TO
??????????? .
??????? ls_range-low =
????????????????? .
??????? APPEND ls_range TO lt_range.
????? ENDLOOP.
我們構建一個結構來捕獲RSDRI查詢的結果
lo_appl_mgr->create_data_ref(
??????? EXPORTING
????????? i_data_type?? = 'T'
????????? it_dim_name?? = lt_dim_list
????????? if_tech_name? = abap_false
????????? if_signeddata = abap_true
??????? IMPORTING
????????? er_data?????? = lr_data ).
????? ASSIGN lr_data->* TO
????? .
現在我們可以執(zhí)行RSDRI查詢,該查詢從SAP BW InfoCube檢索所需日期并將其存儲在字段符號中
TRY.
????????? lo_query = cl_ujo_query_factory=>get_query_adapter(
????????????? i_appset_id = lv_environment_id
????????????? i_appl_id?? = lv_application_id ).
????????? lo_query->run_rsdri_query(
??????????? EXPORTING
????????????? it_dim_name?????? = lt_dim_list???
????????????? it_range????????? = lt_range??????
?? ???????????if_check_security = abap_false????
???????????? IMPORTING
?????????????? et_data?????????? =
????? ?????????????? et_message??????? = lt_message???
??????????? ).
??????? CATCH cx_ujo_read.??
????? ENDTRY.
測試你的申請
為了調試ABAP編碼,設置外部斷點并(un)發(fā)布測試日志。選擇要開始調試的代碼行,然后單擊工具欄中的紅色按鈕設置/刪除外部斷點(Ctrl + Shift + F9)。請注意,所選行前面會出現一個圖標。現在,您可以使用相同的SAP用戶(聯合國)發(fā)布測試日志,然后您應該輸入調試器。現在,您逐步執(zhí)行代碼并檢查所有字段的內容。
圖9:在類構建器中進行調試
?
結論
SAP BPC Netweaver可以使用SAP編程語言ABAP。BAdI是對SAP代碼的標準版本的增強。BAdI的性能明顯優(yōu)于SAP BPC腳本。這些功能實現了無限的可能性。
附件
本附件包含此見解中包含的所有字段的ABAP聲明。
DATA:
??????? ls_record_r????? TYPE? REF TO data,
??????? lt_attr_list???? TYPE uja_t_attr, "Attributes info
??????? ls_attr_list???? TYPE uja_s_attr,
??????? lt_attr_name???? TYPE uja_t_attr_name, "Attribute names
??????? lr_data????????? TYPE REF TO data,
??????? lt_tab?????????? TYPE REF TO data,
??????? ls_account?????? TYPE ujr_s_dim_handler, "account
??????? lo_account?????? TYPE REF TO if_uja_dim_data.
?
? FIELD-SYMBOLS:
????? TYPE ujr_s_dim_handler,
????? TYPE HASHED TABLE, "All account members
????? TYPE any,?
????? TYPE uj_dim_member, "account member of current rec???????
????? TYPE any, "account group
????? TYPE any, "account type
????? TYPE table, "result itab
????? TYPE any, "result record
????? TYPE uj_dim_member,"account member of result rec
TYPE any, "attr GROUP of result record
BADI 構建方法(NEW BADI 實施)
介紹
SAP Business Planning and Consolidation(SAP BPC)提供SAP Netweaver版本和Microsoft平臺版本。SAP BPC Netweaver的優(yōu)勢在于可以使用ABAP(高級業(yè)務應用程序編程),即SAP編程語言。
可以使用SAP BAdI(Business Add Ins)功能將SAP BPC腳本邏輯轉換為ABAP。BAdI是對SAP代碼的標準版本的增強。BAdI的性能明顯優(yōu)于SAP BPC腳本。
本文檔結合了一些提示和技巧,可幫助您為SAP BPC創(chuàng)建BAdI實現。
選擇合適的BAdI
通過事務SE18打開BAdi Builder以顯示所有可用的增強點條目。可以使用與SAP BPC相關的幾個BAdI(例如UJR_WRITE_BACK,UJ_CUSTOM_LOGIC),并且可以通過搜索(按F4)找到字符串UJ *來找到。選擇最適合您需求的那個。
圖1:BAdI Builder
?
顯示所選增強點后,右鍵單擊“實施”并選擇“創(chuàng)建BAdI實施”或選擇現有實施。
圖2:創(chuàng)建BAdI實現
?
需要創(chuàng)建幾個對象:
- 類(例如ZCLASS_BADI_JOURNAL);?根據BAdI實現創(chuàng)建一個新類,
- 增強實施(例如ZBPC_ELEMENTARYPACK);?一個增強實現可以包含多個BAdI實現,
- BAdI實現(例如ZBPC_BADI_JOURNAL_C_IFRS_DEV)。一個BAdI實現可以鏈接到一個或多個應用程序。
訪問現有BAdI編碼的另一種方法是通過事務SE80 Object Navigator。輸入所需的類并打開方法以直接更改它。
圖3:對象導航器
?
過濾BAdI
一旦增強實施可用,您需要過濾BAdI。這保證了代碼僅針對所需的應用程序集和應用程序執(zhí)行(分別對應于InfoArea和InfoCube)。通過多次單擊“創(chuàng)建過濾器組合”,可以添加多個過濾器組合。
過濾器特定于每個增強點。下面是UJR_WRITE_BACK增強點的示例。
圖4:過濾BAdI
?
Module_ID可以有多個值:
| COMM | 評論條目 |
| DM | 數據管理器 |
| DOCS | 文件修改 |
| JRN | 期刊錄入 |
| 人 | 手動輸入 |
聲明數據
在方法的開頭,聲明了幾個常量,字段符號等。常量是固定值,例如值AST(帳戶類型資產)。如果必須更改此值,則只需執(zhí)行一次更改。
CONSTANTS: c_acctype_act TYPE c LENGTH 3 VALUE 'AST', "asset
字段符號和數據引用允許動態(tài)訪問數據對象。無需像使用靜態(tài)訪問一樣指定對象的名稱,字段符號和數據引用允許您訪問和傳遞在運行時之前您不知道其名稱和屬性的數據對象。
FIELD-SYMBOLS:
????? ?????? TYPE table, "result itab
本文檔中使用的每個自定義對象的聲明在附件中列出。
訪問傳入數據
便于訪問任何維度需要大量編碼,這是由于BAdI實現的抽象性。
以下代碼允許訪問維度帳戶,并且應該針對需要查閱或更新的每個維度重復這些代碼。
"Find the account dimension by its type
LOOP AT it_dim_obj ASSIGNING
????? ?
?? WHERE dim_type = uj00_cs_dim_type-account.
????? lo_account ?=
??????????? -dim_obj.
????? ls_account =
????????????????? .
ENDLOOP.
"preparation: create data structure and assign fields
CREATE DATA lr_data LIKE LINE OF ct_array.
ASSIGN lr_data->* TO
??????????????????????? .
ASSIGN COMPONENT ls_account-dimension OF
STRUCTURE
?????????????????????????????? ?TO
???????????????????????????????????? . "account
對象it_dim_obj包含維度的元數據。您可以找到每個維度及其所有屬性的InfoObject名稱。
圖5:IT_DIM_OBJ的內容
?
圖6:IT_DIM_OBJ(1)-T_ATTR的內容
?
圖7:LS_ACCOUNT的內容
?
對象uj00_cs_dim_type在全局類型池UJ00中定義。因此,對于其他維度,uj00_cs_dim_type-account可以由uj00_cs_dim_type-entity等替換。
begin of uj00_cs_dim_type,
? account?? type uj_dim_type? value 'A',
? entity??? type uj_dim_type? value 'E',
? time????? type uj_dim_type? value 'T',
? currency? type uj_dim_type? value 'R',
? category? type uj_dim_type? value 'C',
? datasrc?? type uj_dim_type? value 'D',
? intco???? type uj_dim_type? value 'I',
? subtables type uj_dim_type? value 'S',
? user????? type uj_dim_type? value 'U',
? group???? type uj_dim_type? value 'G',
end of uj00_cs_dim_type.
假設需要屬性帳戶類型和帳戶組。使用函數get_attr_list獲取維度的屬性列表。實際成員通過函數read_mbr_data獲取。
"Get attribute AccountType / Account Group
lo_account->get_attr_list( IMPORTING et_attr_list = lt_attr_list ).
LOOP AT lt_attr_list INTO ls_attr_list
????? WHERE attribute_name = ujr0_c_attr_acctype OR
??????????? attribute_name = c_attr_group.
? APPEND ls_attr_list-attribute_name TO lt_attr_name.
ENDLOOP.
?"Get Members of account
?CALL METHOD lo_account->read_mbr_data
??? EXPORTING
????? if_ret_hashtab = abap_true
????? it_attr_list?? = lt_attr_name "columns:attributes name list
?*???? it_hier_list?? = lt_hier_name "columns:hieracies name list
??? IMPORTING
????? er_data??????? = lr_data.
? ASSIGN lr_data->* TO
????? 。
圖8:LT_ACCOUNT_MBR的內容
?
內部表ct_array是一個生成的對象,它包含來自BPC應用程序的所有記錄。循環(huán)使用此表ct_array可以訪問每條記錄。
LOOP AT ct_array INTO .
在第一個循環(huán)期間,會創(chuàng)建幾個對象來捕獲新的計算記錄。對象lt_tab?
是在運行時創(chuàng)建的臨時對象,其結構與ct_array相同。然后將lt_tab的結構分配給字段符號所以后者有一個結構,它是一個表。為了能夠使用表的一行,字符符號是類似的創(chuàng)建。可以使用ASSIGN?
COMPONENT?
語句將字段符號分配給一行的單個字段。例如,然后可以通過訪問列帳戶。
IF
????? ?IS NOT ASSIGNED.
?CREATE DATA lt_tab LIKE ct_array.
?ASSIGN lt_tab->* TO
??????????? .
?CREATE DATA lr_data_r LIKE LINE OF ct_array.
?ASSIGN lr_data_r->* TO
????????????????? .
?ASSIGN COMPONENT ls_account-dimension OF
???? STRUCTURE
??????????????????????? ?TO
?????????????????????????????? . "account
ENDIF.
接下來,我們搜索包含當前帳戶及其屬性的帳戶成員數據的內部表。這些屬性保存在字段符號中?和
。
"get account members
?READ TABLE
????? ???? WITH TABLE KEY (ujr0_c_member_id) =
??????????? ???? ASSIGNING
????????????????? .
?IF sy-subrc = 0.
???? ASSIGN COMPONENT c_attr_acctype OF
???????? STRUCTURE
??????????????????????? ?TO
?????????????????????????????? .
???? ASSIGN COMPONENT c_attr_group OF
???????? STRUCTURE
???????????????????????????????????? ?TO
?????????????????????????????????????????? .
?
現在可以通過相應的字段符號訪問所有字段。可以使用這些字段符號執(zhí)行各種計算和操作。
訪問現有數據
當新數據從BPC發(fā)送到后端的BW InfoCube時,有時我們需要訪問BW InfoCube中已存在的數據。數據分解就是一個很好的例子。在BPC中,可以在父級別輸入數據,然后可以按比例將這些數據分配給現有數據。這對于實體和時間等維度最有意義。
以下代碼檢索實體的層次結構信息,并且還為時間組件重復。
lo_entity->get_hier_list( IMPORTING et_hier_info = lt_hier_info ).
? LOOP AT lt_hier_info INTO ls_hier_info.
??? APPEND ls_hier_info-hier_name TO lt_hier_name.
? ENDLOOP.
??
數據按比例分解為現有數據。因此,我們需要查找與來自BPC應用程序的數據相對應的現有數據。這是通過啟動RSDRI查詢來實現的,該查詢需要返回要返回的維度列表以及要應用的過濾器列表。第一步是檢索多維數據集元數據。
CLEAR ls_application.
? lo_appl_mgr->get(
??? EXPORTING
???? ?if_with_measures = abap_false????
????? if_summary?????? = abap_false????
??? IMPORTING
????? es_application?? = ls_application ).?
如果處理的行是父級,我們需要讓其子級能夠在子級之后分發(fā)數據。必須針對時間維度重復此代碼。
CALL METHOD lo_entity->get_children_mbr
????? EXPORTING
??????? i_parent_mbr???? =
????? ?
??????? i_level????????? = -1
??????? if_only_base_mbr = abap_true?
????? IMPORTING
??????? et_member??????? = lt_ent_children.
??? DESCRIBE TABLE lt_ent_children LINES nr_ent_chil.
我們準備一個范圍來過濾實體基礎成員。必須針對時間維度擴展相同的范圍。
LOOP AT lt_ent_children INTO ls_base_en.
??????? ls_range-dimension = 'COMPANY'.
??????? ls_range-low = ls_base_en.
??????? APPEND ls_range TO lt_range.
????? ENDLOOP.
我們將多維數據集維度保存在列表中并擴展范圍以使用與BPC中相同的限制。
REFRESH lt_dim_list.
????? LOOP AT ls_application-dimensions INTO ls_dimensions.
??????? APPEND ls_dimensions-dimension TO lt_dim_list.
??????? ls_range-dimension = ls_dimensions-dimension.?
??????? ASSIGN COMPONENT ls_dimensions-dimension
? OF STRUCTURE
????? ?TO
??????????? .
??????? ls_range-low =
????????????????? .
??????? APPEND ls_range TO lt_range.
????? ENDLOOP.
我們構建一個結構來捕獲RSDRI查詢的結果
lo_appl_mgr->create_data_ref(
??????? EXPORTING
????????? i_data_type?? = 'T'
????????? it_dim_name?? = lt_dim_list
????????? if_tech_name? = abap_false
????????? if_signeddata = abap_true
??????? IMPORTING
????????? er_data?????? = lr_data ).
????? ASSIGN lr_data->* TO
????? .
現在我們可以執(zhí)行RSDRI查詢,該查詢從SAP BW InfoCube檢索所需日期并將其存儲在字段符號中
TRY.
????????? lo_query = cl_ujo_query_factory=>get_query_adapter(
????????????? i_appset_id = lv_environment_id
????????????? i_appl_id?? = lv_application_id ).
????????? lo_query->run_rsdri_query(
??????????? EXPORTING
????????????? it_dim_name?????? = lt_dim_list???
????????????? it_range????????? = lt_range??????
?? ???????????if_check_security = abap_false????
???????????? IMPORTING
?????????????? et_data?????????? =
????? ?????????????? et_message??????? = lt_message???
??????????? ).
??????? CATCH cx_ujo_read.??
????? ENDTRY.
測試你的申請
為了調試ABAP編碼,設置外部斷點并(un)發(fā)布測試日志。選擇要開始調試的代碼行,然后單擊工具欄中的紅色按鈕設置/刪除外部斷點(Ctrl + Shift + F9)。請注意,所選行前面會出現一個圖標。現在,您可以使用相同的SAP用戶(聯合國)發(fā)布測試日志,然后您應該輸入調試器。現在,您逐步執(zhí)行代碼并檢查所有字段的內容。
圖9:在類構建器中進行調試
?
結論
SAP BPC Netweaver可以使用SAP編程語言ABAP。BAdI是對SAP代碼的標準版本的增強。BAdI的性能明顯優(yōu)于SAP BPC腳本。這些功能實現了無限的可能性。
附件
本附件包含此見解中包含的所有字段的ABAP聲明。
DATA:
??????? ls_record_r????? TYPE? REF TO data,
??????? lt_attr_list???? TYPE uja_t_attr, "Attributes info
??????? ls_attr_list???? TYPE uja_s_attr,
??????? lt_attr_name???? TYPE uja_t_attr_name, "Attribute names
??????? lr_data????????? TYPE REF TO data,
??????? lt_tab?????????? TYPE REF TO data,
??????? ls_account?????? TYPE ujr_s_dim_handler, "account
??????? lo_account?????? TYPE REF TO if_uja_dim_data.
?
? FIELD-SYMBOLS:
????? TYPE ujr_s_dim_handler,
????? TYPE HASHED TABLE, "All account members
????? TYPE any,?
????? TYPE uj_dim_member, "account member of current rec???????
????? TYPE any, "account group
????? TYPE any, "account type
????? TYPE table, "result itab
????? TYPE any, "result record
????? TYPE uj_dim_member,"account member of result rec
TYPE any, "attr GROUP of result record
?
總結
以上是生活随笔為你收集整理的BADI 构建方法(NEW BADI 实施)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#实现的udt
- 下一篇: 整数分区(求将整数拆分成任意个数正整数的