如何调试事务代码内部通过RFC提交到后台执行的程序/函数
一些事务代码在内部通过RFC提交一个程序/函数到后台执行,在此场景下,如果想调试那一段程序/函数,一般通用的debug方式往往力不从心,因为点击F5键的话,debugger不会进入,并直接跳到下一行。以下图为例,可执行MRP的函数 MRP_KD_AUFTRAG_RFC 在事务代码VA01通过RFC提交到后台执行,为了查明此函数如何执行MRP, 点击F5键希望进入函数里面的源代码,但是debugger直接跳到函数的下一行代码 endloop,即,无法进入函数MRP_KD_AUFTRAG_RFC。
这种情况下,可采取以下方法. (RFC 一般可通过两种方式提交,一种是 queue RFC, 被提交的程序/函数通过事务代码 SMQ1和SMQ2顺序执行并且可以在那些事务代码里debug. 另外一种是 transactional RFC,就是我们在此要讨论的)。
刚进入debugger后,到下图显示的菜单 (这是新一代debugger)。
在弹出的对话框里选择下图显示的选项后,点击F8键一直执行到结束。
(在前一代debugger, 到菜单'Settings' > 'Display and change all', 选择 'In background task: Do not process'去触发相同功能。 菜单项 'Display and change all' 只有当 debugger 进入到屏幕的PBO Module子程序后才出现)。
现在,因为选择了菜单里的上述项目,即使事务代码已经执行完,函数MRP_KD_AUFTRAG_RFC并没有被执行,而是如下图暂挂到事务代码SM58等待用户手动执行并可以在那里debug。
用光标选择相关行后,到下图显示的菜单,点击‘Debug LUW’, 就可以debug函数MRP_KD_AUFTRAG_RFC。