可以使用if_ujo_query->run_rsdri_query方法获取BPC模型的数据。
将方法进行封装,方法参数:
代码:
METHOD read_bpc_cube.
DATA : lo_appl TYPE REF TO cl_uja_application,
lt_appl_dim TYPE uja_t_appl_dim,
ls_appl_dim LIKE LINE OF lt_appl_dim,
lt_dim_name TYPE ujq_t_dim,
ls_dim_name LIKE LINE OF lt_dim_name,
lo_model TYPE REF TO if_uj_model,
lo_dataref TYPE REF TO data,
lo_query TYPE REF TO if_ujo_query,
lt_data TYPE REF TO data,
lt_message TYPE uj0_t_message.
FIELD-SYMBOLS: <lt_tx_data> TYPE STANDARD TABLE,
<ls_data> TYPE any.
CREATE OBJECT lo_appl
EXPORTING
i_appset_id = iv_appset
i_application_id = iv_appl_id.
REFRESH lt_appl_dim.
lo_appl->get_appl_dim(
EXPORTING
i_appl_id = iv_appl_id
IMPORTING
et_appl_dim = lt_appl_dim ). "DIMENSION TABLE
REFRESH lt_dim_name.
**Populate dimension table 'lt_dim_name'.
LOOP AT lt_appl_dim INTO ls_appl_dim.
ls_dim_name = ls_appl_dim-dimension.
APPEND ls_dim_name TO lt_dim_name.
CLEAR ls_dim_name.
ENDLOOP.
ls_dim_name = 'MEASURES'.
APPEND ls_dim_name TO lt_dim_name.
SORT lt_dim_name.
*---CREATE A REFERENCE STRUCTURE SIMILAR TO CT_DATA USING THE METHOD -----*'
TRY.
lo_model = cl_uj_model=>get_model( iv_appset ).
lo_model->create_tx_data_ref(
EXPORTING
i_appl_name = iv_appl_id
i_type = 'T'
it_dim_name = lt_dim_name
if_tech_name = space
IMPORTING
er_data = lo_dataref ).
CATCH cx_uj_static_check.
ENDTRY.
ASSIGN lo_dataref->* TO <lt_tx_data>.
CREATE DATA lt_data LIKE LINE OF <lt_tx_data>.
ASSIGN lt_data->* TO <ls_data>.
** 取数 **
TRY.
lo_query = cl_ujo_query_factory=>get_query_adapter(
i_appset_id = iv_appset
i_appl_id = iv_appl_id
).
** RUN QUERY TO POPULATE CT_DATA BASED ON DIMENSIONS , SELECTION CRITERIA **.
lo_query->run_rsdri_query(
EXPORTING
it_dim_name = lt_dim_name " BPC: Dimension List
it_range = it_sel " BPC: Selection condition
if_check_security = abap_false " BPC: Generic indicator
IMPORTING
et_data = <lt_tx_data>
et_message = lt_message " BPC: Messages
).
CATCH cx_ujo_read. " Exception of common read
ENDTRY.
** 定义匹配结构
data:lo_data type REF TO data.
create data lo_data like LINE OF et_data.
ASSIGN lo_data->* to FIELD-SYMBOL(<fs_line>).
LOOP AT <lt_tx_data> INTO <ls_data> .
MOVE-CORRESPONDING <ls_data> to <fs_line>.
APPEND <fs_line> TO et_data .
ENDLOOP .
ENDMETHOD.
IT_SEL结构:
只需要赋值:
dimension = 维度名称.
sign = 'I'.
option = 'EQ'.
low = 要限制的维度值.
调用方法:
CALL METHOD ZCL_BPC_TOOL=>READ_BPC_CUBE
EXPORTING
IV_APPSET = 环境ID
IV_APPL_ID = 模型ID
IT_SEL = 限制条件内表
IMPORTING
ET_DATA = 返回结果内表.