BW4-AE中含AMDP函数的规划序列执行时出现转储问题求助
问题描述
- 在BW4-AE环境中,自定义实现
IF_RSPLFA_SRVTYPE_IMP_EXEC、IF_RSPLFA_SRVTYPE_TREX_EXEC接口的规划函数类ZICL_RSPLS_SCRIPT,ES_DATA结构完全匹配规划序列的聚合层级 - 在
RSPLF1中创建规划函数时,设置为:- "without blocks"
- "process empty records"
- 在
RSPLAN执行规划序列时触发转储,错误码:UNCAUGHT_EXCEPTION、CX_RSR_X_MESSAGE、SAPLRRMS,转储关键错误为RSR_PE 005,系统字段显示会话无效 - 调试发现调用
execute_sql_script方法时崩溃,未进入R_CALC方法,曾尝试修改内表字段名但未解决
完整类代码:
CLASS zicl_rspls_script DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_amdp_marker_hdb. INTERFACES if_rsplfa_srvtype_imp_exec. INTERFACES if_rsplfa_srvtype_trex_exec. TYPES: BEGIN OF es_data, infoprov TYPE rsinfoprov, icaccfem TYPE /bic/oiicaccfem, icbunit TYPE /bic/oiicbunit, icesuvers TYPE /bic/oiicesuvers, icfipasst TYPE /bic/oiicfipasst, icfipproj TYPE /bic/oiicfipproj, icinesuvr TYPE /bic/oiicinesuvr, icrstep TYPE /bic/oiicrstep, icvrplfem TYPE /bic/oiicvrplfem, ifkeyfig TYPE /bic/oiifkeyfig, END OF es_data. " Table type TYPES et_data TYPE STANDARD TABLE OF es_data WITH EMPTY KEY. CLASS-METHODS r_calc IMPORTING VALUE(i_view) TYPE et_data EXPORTING VALUE(e_view) TYPE et_data. ENDCLASS. CLASS zicl_rspls_script IMPLEMENTATION. METHOD if_rsplfa_srvtype_imp_exec~execute. ENDMETHOD. METHOD if_rsplfa_srvtype_imp_exec~finish_execution. ENDMETHOD. METHOD if_rsplfa_srvtype_trex_exec~init_and_check. e_trex_supported = rs_c_true. ENDMETHOD. METHOD if_rsplfa_srvtype_imp_exec~init_execution. ENDMETHOD. METHOD if_rsplfa_srvtype_trex_exec~trex_execute. DATA lr_sql_script TYPE REF TO if_rspls_sql_script. DATA lv_procedure_name TYPE string. DATA lt_iobj_param TYPE if_rsr_pe_adapter=>tn_t_iobj_param. lr_sql_script = cl_rspls_session_store_manager=>get_sql_script_instance( i_r_store = i_r_store ). lr_sql_script->get_parameter_values( EXPORTING i_r_param_set = i_r_param_set i_para_name_for_procedure = 'R_CALC' IMPORTING e_procedure_name = lv_procedure_name e_t_iobj_param = lt_iobj_param ). lv_procedure_name = 'ZICL_RSPLS_SCRIPT=>R_CALC'. r_s_view-view = lr_sql_script->execute_sql_script( i_view = i_view i_t_iobj_param = lt_iobj_param i_proc_name = lv_procedure_name i_sql_script_returns_ai = abap_true i_r_msg = i_r_msg ). ENDMETHOD. METHOD r_calc BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY. E_VIEW = SELECT * FROM I_VIEV; ENDMETHOD. ENDCLASS.
排查建议
- 修正SQL Script参数拼写错误:
R_CALC方法中写的SELECT * FROM I_VIEV存在拼写错误,正确应为I_VIEW,这个错误会导致HDB存储过程执行失败,直接触发会话无效的异常。 - 验证SQL Script会话实例有效性:
在调用cl_rspls_session_store_manager=>get_sql_script_instance后,检查lr_sql_script是否为非空引用,若实例获取失败,后续调用必然报错。可添加检查代码:IF lr_sql_script IS INITIAL. MESSAGE '无法获取SQL Script会话实例' TYPE 'E'. ENDIF. - 核对规划函数参数映射:
在RSPLF1中确认所有特征、关键指标与自定义类ES_DATA结构的字段名、数据类型完全匹配,HDB对大小写敏感,需确保字段名大小写一致。 - 检查AMDP方法激活状态:
在SE24中确认ZICL_RSPLS_SCRIPT类的R_CALC方法已成功激活,无语法错误;也可在HANA Studio中查看对应存储过程是否存在且可用。 - 临时禁用空记录处理:
取消"process empty records"设置后重新执行规划序列,排除空记录输入导致的会话异常。 - 深挖转储日志细节:
在转储界面查看CX_RSR_X_MESSAGE的详细消息文本,以及SAPLRRMS的调用栈,定位具体错误触发点,比如参数传递失败、权限问题或HDB连接异常。
内容的提问来源于stack exchange,提问作者Kinli
相关产品推荐
相关产品推荐

