如何提交ABAP后台作业且不打印假脱机文件,仅保留SM37可查看?
解决后台作业假脱机文件自动打印问题
核心思路是通过配置打印参数,强制后台作业生成的假脱机请求仅保存而不自动打印,同时保留在SM37中查看的权限,且无需切换系统用户规避权限问题。
具体修改步骤及代码示例
- 新增打印参数变量,调用
GET_PRINT_PARAMETERS函数配置不自动打印的参数 - 在
SUBMIT语句中引入该打印参数控制行为
修改后的完整代码如下:
DATA: v_jobname TYPE tbtcjob-jobname, v_jobcount TYPE tbtcjob-jobcount, ls_print_params TYPE pri_params. CALL FUNCTION 'JOB_OPEN' EXPORTING jobname = v_jobname sdlstrtdt = sy-datum sdlstrttm = sy-uzeit IMPORTING jobcount = v_jobcount. * 获取不自动打印的参数配置 CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING no_print = abap_true " 禁止假脱机请求自动发送到打印机 release = abap_true " 释放假脱机请求,确保可在SM37中查看 immediately = abap_false " 不立即触发打印流程 IMPORTING out_parameters = ls_print_params EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. " 此处可添加异常处理逻辑,比如抛出提示消息或终止作业 ENDIF. SUBMIT (gc_report) AND RETURN USING SELECTION-SET gc_variant WITH SELECTION-TABLE t_seltab USER sy-uname VIA JOB v_jobname NUMBER v_jobcount USING PRINT PARAMETERS ls_print_params. " 引入打印参数控制打印行为 CALL FUNCTION 'JOB_CLOSE' EXPORTING jobcount = v_jobcount jobname = v_jobname strtimmed = abap_true.
参数说明
no_print = abap_true:核心控制参数,确保假脱机请求生成后不会自动发送至用户默认打印机release = abap_true:保证假脱机请求被正常释放,可在SM37的作业详情中查看、下载或后续手动触发打印- 该方案无需切换系统用户,完全规避了跨用户调度的权限限制,同时兼容绝大多数标准和自定义报表
内容的提问来源于stack exchange,提问作者mmgro27
相关产品推荐
相关产品推荐

