DUMP CX_HRPA_INVALID_PARAMETER/CX_SY_REF_IS_INITIAL LOAD-OF-PROGRAM

21 篇文章 2 订阅

DUMP:

发生场景:        调用function HR_INFOTYPE_OPERATION操作信息类型

类别        ABAP 编程错误

运行时错误        UNCAUGHT_EXCEPTION

异常        CX_HRPA_INVALID_PARAMETER

ABAP 程序        SAPFP50P

应用组件        PA-PA

代码解析:

原因及解决:参考note 493984,属于HR模块早期缓存设计的问题。无法通过打note的方式解决。官方建议在应用程序开始前使用PERFORM do_nothing(sapfp50p) 来完成对LOAD-OF-PROGRAM的触发,防止主程序中CL_HRPA_MASTERDATA_FACTORY的其它方法执行后触发LOAD-OF-PROGRAM,此时将调用方法SET_FRAMEWORK导致DUMP.

DUMP:

发生场景:使用function HRXSS_IN_INSERT_P0015写入信息类型0015数据

类别        ABAP 编程错误

运行时错误        OBJECTS_OBJREF_NOT_ASSIGNED

异常        CX_SY_REF_IS_INITIAL

ABAP 程序        CL_HRPA_INFTY_NNNN============CP

应用组件        PA-PA-XX

原因及解决:与上述类似,由于方法CL_HRPA_MASTERDATA_FACTORY=>SET_FRAMEWORK的调用,使得类CL_HRPA_MASTERDATA_FACTORY的静态属性对象关联到第一次执行时的数据缓存,而在函数HRXSS_IN_INSERT_P0015中调用如下方法获取infotype对象时无法获取当前函数中待更改数据对应的read_infotype对象,导致后续逻辑出现空对象报错。此处暂无法找到清空静态标记方法(指针访问清除不考虑),因此使用同步RFC(DESTINATION 'NONE')进行处理,防止全局缓存干扰。

知识点:LOAD-OF-PROGRAM

事件关键字定义了可执行程序、模块池、函数组或子程序池的程序构造函数。程序构造函数是一个事件块,其事件由ABAP 运行时环境,当上面提到的可执行程序之一被加载到内部会议。

当一个程序被调用时提交或使用交易代码,然后(在每次调用时)打开一个新的内部会话,并且在每次调用时执行一次事件块。您可以在此处初始化程序的全局数据对象。事件块必须完全执行,否则会发生运行时错误。这意味着可以指定退出事件块而不返回它的语句。

第一次外部程序(子程序或功能模块)或子屏幕 被称为,被调用过程的主程序加载到调用者的内部会话中,从而触发事件加载程序。事件块在被调用过程之前执行。每次同一个主程序的一个过程被同一个内部会话的调用者再次调用时,事件不会触发 LOAD-OF-PROGRAM 。

Notes:事件LOAD-OF-PROGRAM应该主要用于在调用外部程序时初始化全局数据或交易。如果您使用调用可执行程序提交,我们建议您使用事件 初始化,因为参数和选择标准的起始值在之后设置加载程序 (见之后的程序流程提交 )。如果一个程序只是因为需要声明而被加载,例如在使用时绝对类型 名称不会触发LOAD-OF-PROGRAM事件。只有在之后调用程序的可执行单元时,才会执行程序构造函数。

简单总结:

1. 可执行程序、模块池、函数组或子例程池的程序构造函数,类比类构造方法,在程序中对象加载时自动触发该事件(不包括加载声明)。

2. 同一个会话同一个进程下,只有在第一次调用程序内功能模块等时触发,异步RFC/SUBMIT/CALL DIALOG 等形式会刷新,但是主程序部分仅触发一次。

题外话:ABAP程序加载

Understanding Program Load (ABAP Load) - ABAP Development - Community Wiki

abap程序完成后需要加载编译才能被执行,一般为程序执行时自动加载.可以使用SGEN加载生成器.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值