SUBMIT指定用户名错误

1、SUBMIT说明

 在ABAP中,SUBMIT关键字用于运行另一个ABAP程序。通过SUBMIT关键字,可以在当前程序内部调用其他程序,而无需关闭当前程序。

SUBMIT语句的一般语法如下:

"--------------------@斌将军--------------------
SUBMIT <program> [VIA SELECTION-SCREEN|USING SELECTION-SET <selection_set>]
 [VIA JOB LV_JOBNAME NUMBER LV_JOBCOUNT]
  [AND RETURN] [EXPORTING LIST TO MEMORY]
  [WITH p1 = <value1> ... pn = <value_n>]
  [WITH p1 = <value1> ... WITH pn = <value_n>].
"--------------------@斌将军--------------------

2、指定账号

需求说明:在后台JOB中使用SUBMIT调用程序时,程序中需要指定某个账号来执行某些逻辑,所以使用USE LV_UNAME,用于指定运行目标程序的用户名。不管登录账号是哪个,都是使用账号BINGENERAL来执行目标程序YTESTJOB。

源程序代码如下:

"--------------------@斌将军--------------------
DATA: lv_number           TYPE tbtcjob-jobcount,
      lv_name             TYPE tbtcjob-jobname,
      lv_uname            TYPE syst_uname,
      lv_print_parameters TYPE pri_params.

CLEAR:lv_name ,lv_number.
lv_name = |后台作业测试|.

CALL FUNCTION 'JOB_OPEN'
  EXPORTING
    jobname          = lv_name
  IMPORTING
    jobcount         = lv_number
  EXCEPTIONS
    cant_create_job  = 1
    invalid_job_data = 2
    jobname_missing  = 3
    OTHERS           = 4.
IF sy-subrc = 0.

  lv_uname = 'BINGENERAL'."调用ytestjob时,用账号:BINGENERAL执行程序

  SUBMIT ytestjob TO SAP-SPOOL
                 SPOOL PARAMETERS lv_print_parameters
                 WITHOUT SPOOL DYNPRO
                 VIA JOB lv_name NUMBER lv_number
                 USER lv_uname
                 AND RETURN.
  IF sy-subrc = 0.
    CALL FUNCTION 'JOB_CLOSE'
      EXPORTING
        jobcount             = lv_number
        jobname              = lv_name
        strtimmed            = 'X'
      EXCEPTIONS
        cant_start_immediate = 1
        invalid_startdate    = 2
        jobname_missing      = 3
        job_close_failed     = 4
        job_nosteps          = 5
        job_notex            = 6
        lock_failed          = 7
        OTHERS               = 8.
    IF sy-subrc <> 0.

    ENDIF.
  ENDIF.
ENDIF.
"--------------------@斌将军--------------------

在YTESTJOB中校验用户是否有权限,目标程序代码如下:

"--------------------@斌将军--------------------
REPORT ytestjob.

DATA(lv_message) = '执行本程序的账号:' && sy-uname.

WRITE: lv_message.

AUTHORITY-CHECK OBJECT 'M_MRES_WWA'
 ID 'ACTVT' DUMMY
 ID 'WERKS' FIELD 'P010'.
IF sy-subrc <> 0.
  WRITE: / '权限校验失败'.
ELSE.
  WRITE: / '权限校验成功'.
ENDIF.
"--------------------@斌将军--------------------

3、存在问题

测试时,使用SAP_ALL权限的账号,没有问题,后台作业创建并执行成功

运行结果

但是此方法对于非SAP_ALL权限的账号TEST1103,执行时就出现了问题

 作业没有正常执行

检查后发现原来是权限问题,使用SU53发现缺少权限

官方解释

而且指定用户名时,要用大写,否则仍然检查失败

所以大家在使用此关键字指定用户时,需要注意以上问题。

而对于想通过指定大权限账号来跳过权限校验这个方案,也要考虑给登录用户分配S_BTCH_NAM权限的合理性。​

 

定期更文,欢迎关注

posted @ 2024-01-25 12:03  斌将军  阅读(49)  评论(0编辑  收藏  举报