You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.
排查建议
  1. 修正SQL Script参数拼写错误:
    R_CALC方法中写的SELECT * FROM I_VIEV存在拼写错误,正确应为I_VIEW,这个错误会导致HDB存储过程执行失败,直接触发会话无效的异常。
  2. 验证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.
    
  3. 核对规划函数参数映射:
    在RSPLF1中确认所有特征、关键指标与自定义类ES_DATA结构的字段名、数据类型完全匹配,HDB对大小写敏感,需确保字段名大小写一致。
  4. 检查AMDP方法激活状态:
    在SE24中确认ZICL_RSPLS_SCRIPT类的R_CALC方法已成功激活,无语法错误;也可在HANA Studio中查看对应存储过程是否存在且可用。
  5. 临时禁用空记录处理:
    取消"process empty records"设置后重新执行规划序列,排除空记录输入导致的会话异常。
  6. 深挖转储日志细节:
    在转储界面查看CX_RSR_X_MESSAGE的详细消息文本,以及SAPLRRMS的调用栈,定位具体错误触发点,比如参数传递失败、权限问题或HDB连接异常。

内容的提问来源于stack exchange,提问作者Kinli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:07:35