ABAP how to get Background Job Status Report Code

本文介绍了一个ABAP程序,用于生成后台作业的状态报告。该程序可以显示作业名称、运行日期、运行时间及作业状态等信息,并通过循环检查作业状态直至作业完成或取消。

转载自:https://archive.sap.com/discussions/thread/689425

-----------

Problem

-----------

Hi Experts,

My requirement is to Genarate a report that will display the background job Status.

I.e. job cancelled or job abended or job still running like that.

My selection screen will be :

Job Name.

Run Date .

Run time .

Status of Job .

Can any one please send me the report code , i searched in google in many ways but i didnt get suitable report for my above requirement.

Its very urgent ...Help me.


Thank you & Regards,

Vanky.


-----------

Code

-----------

types: begin of gty_jobs,
           JOBCOUNT     type         TBTCO-JOBCOUNT,
           JOBNAME      type	TBTCO-JOBNAME,
           ABORTED	type	TBTCV-ABORT,
           FINISHED	type	TBTCV-FIN,
           PRELIMINARY	type	TBTCV-PRELIM,
           READY	type	TBTCV-READY,
           RUNNING	type	TBTCV-RUN,
           SCHEDULED	type	TBTCV-SCHED,
       end of gty_jobs.
 
types: gty_t_jobs type table of gty_jobs,
 
  data: gt_jobs type gty_t_jobs,
        gv_subrc type sysubrc,
        gv_aborted type i,
        gv_finished type i,
        gv_total type i.
 
  field-symbols: <lfs_jobs> type gty_jobs.
 
* Get the job status
  loop at gt_jobs assigning <lfs_jobs>.
    CALL FUNCTION 'SHOW_JOBSTATE'
      EXPORTING
        jobcount               = <lfs_jobs>-jobcount
        jobname                = <lfs_jobs>-jobname
       IMPORTING
         ABORTED                = <lfs_jobs>-ABORTED
         FINISHED               = <lfs_jobs>-FINISHED
         PRELIMINARY            = <lfs_jobs>-PRELIMINARY
         READY                  = <lfs_jobs>-READY
         RUNNING                = <lfs_jobs>-RUNNING
         SCHEDULED              = <lfs_jobs>-SCHEDULED
       EXCEPTIONS
         JOBCOUNT_MISSING       = 1
         JOBNAME_MISSING        = 2
         JOB_NOTEX              = 3
         OTHERS                 = 4
              .
  endloop.
 
* keep on checking the job status until it is finished or cancelled
  while gv_subrc eq 0.
 
    loop at gt_jobs assigning <lfs_jobs>.
      if <lfs_jobs>-finished ne 'X' and
         <lfs_jobs>-aborted ne 'X'.
 
**      reduce the frequency of checking the job status to *reduce the network traffic
        wait up to 60 seconds.       
 
        CALL FUNCTION 'SHOW_JOBSTATE'
          EXPORTING
            jobcount               = <lfs_jobs>-jobcount
            jobname                = <lfs_jobs>-jobname
           IMPORTING
             ABORTED                = <lfs_jobs>-ABORTED
             FINISHED               = <lfs_jobs>-FINISHED
             PRELIMINARY            = <lfs_jobs>-PRELIMINARY
             READY                  = <lfs_jobs>-READY
             RUNNING                = <lfs_jobs>-RUNNING
             SCHEDULED              = <lfs_jobs>-SCHEDULED
           EXCEPTIONS
             JOBCOUNT_MISSING       = 1
             JOBNAME_MISSING        = 2
             JOB_NOTEX              = 3
             OTHERS                 = 4
                  .
        IF sy-subrc <> 0.
           MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
 
        gv_subrc = 0.
        exit.
 
      else.
        gv_subrc = 4.
      endif.
    endloop.
  endwhile.
 
* Output job summary
  write: /55  'J O B   S U M M A R Y' color 4.
  write: / sy-uline(150).
  skip 2.
  describe table gt_jobs lines gv_total.
 
 
*  loop at gt_jobs assigning <lfs_jobs> where finished ne 'X'.
  loop at gt_jobs assigning <lfs_jobs>.
 
    if <lfs_jobs>-aborted eq 'X'.
      add 1 to gv_aborted.
      write: / 'Jobname :', <lfs_jobs>-jobname,
            50 'Job ID :', <lfs_jobs>-jobcount color 6.
      write: / sy-uline(150).
 
    elseif <lfs_jobs>-finished eq 'X'.
      add 1 to gv_finished.
      write: / 'Jobname :', <lfs_jobs>-jobname,
            50 'Job ID :', <lfs_jobs>-jobcount.
      write: / sy-uline(150).
    endif.
  endloop.
      write: / 'Jobs Cancelled :', 15 gv_aborted color 6.
      write: / 'Jobs Finished :', 15 gv_finished.
      write: / 'Total Jobs :', 15 gv_total.
 
 
*  clear: gv_aborted, gv_finished, gv_total, gt_jobs.
  clear: gv_aborted, gv_finished, gv_total.



<think>我们参考了用户提供的引用内容,这些内容主要涉及ABAP ALV报表的布局控制、布局保存、布局搜索帮助以及布局定义等方面。用户的问题是如何在ABAP中选择报表布局,这通常涉及到在运行ALV报表时让用户能够选择之前保存的布局,或者动态调整布局。 根据引用内容,我们可以总结以下几点: 1. 在调用ALV函数(如`REUSE_ALV_GRID_DISPLAY`)时,可以通过参数`i_save`来设置布局保存的范围(如`'A'`表示全局布局,`'U'`表示用户特定布局,`'X'`表示不保存)[^2]。 2. 可以通过选择屏幕上的参数(如`p_var`)来让用户输入或选择布局变式(variant),并利用函数模块`REUSE_ALV_VARIANT_F4`为这个参数提供搜索帮助(F4帮助)[^3]。 3. 在显示ALV报表时,可以将用户选择的布局变式传递给ALV函数,这样报表就会按照该布局的设置(如列顺序、宽度、排序、过滤等)显示。 因此,实现ABAP报表布局选择的主要步骤包括: - 在报表的选择屏幕上定义一个参数用于输入布局变式。 - 为该参数提供F4帮助,让用户可以选择已保存的布局。 - 在调用ALV显示函数时,将用户选择的布局变式传递给函数。 下面我们详细说明这些步骤: ### 步骤1: 定义选择屏幕 在报表的选择屏幕中定义一个参数来接收布局变式名称。 ```abap SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_var TYPE disvariant-variant. " 用于输入布局变式 SELECTION-SCREEN END OF BLOCK blk1. ``` ### 步骤2: 为布局变式参数提供F4帮助 在`AT SELECTION-SCREEN`事件中,当用户请求该参数的F4帮助时,调用函数`REUSE_ALV_VARIANT_F4`弹出布局选择对话框。 ```abap AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var. PERFORM f4_for_variant. FORM f4_for_variant. DATA: ls_variant TYPE disvariant, lv_exit TYPE c. " 设置变式所属的程序和句柄(通常句柄可以省略或用空格) ls_variant-report = sy-repid. ls_variant-handle = ' '. " 通常用空格,如果有多个ALV可以指定不同句柄区分 " 调用函数弹出变式选择对话框 CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = ls_variant i_save = 'A' " 允许选择全局和用户特定的布局 IMPORTING e_exit = lv_exit es_variant = ls_variant EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc = 0 AND lv_exit = space. p_var = ls_variant-variant. " 将用户选择的变式名称赋给参数 ENDIF. ENDFORM. ``` ### 步骤3: 在显示ALV时应用布局变式 在调用ALV显示函数(如`REUSE_ALV_GRID_DISPLAY`)时,需要将用户选择的布局变式传递给函数的参数。 ```abap DATA: gs_layout TYPE slis_layout_alv. " 设置布局参数,包括变式 gs_layout-colwidth_optimize = 'X'. " 优化列宽 gs_layout-zebra = 'X'. " 斑马纹 " 其他布局设置... " 调用ALV显示函数 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = gs_layout i_save = 'A' " 允许保存布局为全局或用户特定 it_fieldcat = gt_fieldcat " 字段目录 i_default = ' ' " 不允许使用默认布局 i_grid_title = '标题' " 传递变式名称,如果用户选择了变式则使用,否则使用初始值(将显示默认布局) variant = VALUE disvariant( report = sy-repid variant = p_var ) TABLES t_outtab = gt_alv EXCEPTIONS program_error = 1 OTHERS = 2. ``` ### 说明: 1. **布局变式(Variant)**:是保存的ALV布局,包括列的位置、宽度、排序、过滤条件等。用户可以在运行报表时选择已保存的布局。 2. **参数`i_save`**:在调用函数`REUSE_ALV_GRID_DISPLAY`时,`i_save`参数控制布局保存的范围: - `'A'`:允许保存全局布局和用户特定布局。 - `'U'`:只允许用户特定布局。 - `'X'`:不允许保存布局。 3. **变式选择对话框**:通过函数`REUSE_ALV_VARIANT_F4`提供,用户可以选择已保存的布局变式。 4. **变式传递**:在调用ALV显示函数时,通过`variant`参数传递变式名称(包括程序名和变式名),这样ALV就会按照该变式设置显示。 ### 注意事项: - 如果用户没有输入变式名称,则ALV将使用默认布局(即字段目录中定义的顺序和宽度,以及布局参数中的设置)。 - 在保存布局变式时,需要确保程序名(`sy-repid`)与变式所属的程序一致。 通过以上步骤,用户可以在运行报表时通过选择屏幕上的布局变式参数来选择不同的布局,从而改变ALV报表的显示方式。 --- §§相关问题§§: 1. 如何在ABAP中保存ALV报表的布局? 2. 如何通过代码动态修改ALV报表的布局(如列顺序、宽度)? 3. 如何实现ALV报表的多个布局变式管理? 4. 在SAP Fiori应用中,如何实现类似ALV布局变式的功能?</think>### ABAP报表布局选择方法详解 #### 一、布局选择核心机制 在ABAP ALV报表中,布局选择通过**变式(Variant)** 实现,允许用户保存和调用不同的显示配置(列顺序、宽度、排序规则等)。关键参数: ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_save = 'A' " 布局保存模式 i_default = 'X' " 允许默认布局 is_variant = ls_variant " 布局变式 TABLES t_outtab = gt_data. ``` **保存模式(`i_save`)** 配置选项: - `' '`:禁止保存布局 - `'U'`:仅用户特定布局 - `'X'`:仅全局布局 - `'A'`:同时支持用户+全局布局 **[^2]** --- #### 二、实现布局选择步骤 1. **定义选择屏幕参数** ```abap SELECTION-SCREEN BEGIN OF BLOCK blk1. PARAMETERS: p_var TYPE disvariant-variant. " 布局选择字段 SELECTION-SCREEN END OF BLOCK blk1. ``` 2. **添加F4搜索帮助** ```abap AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var. PERFORM f4_for_variant. FORM f4_for_variant. DATA: ls_variant TYPE disvariant. ls_variant = VALUE #( report = sy-repid ). CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = ls_variant i_save = 'A' " 与ALV调用参数一致 IMPORTING es_variant = ls_variant EXCEPTIONS not_found = 1. IF sy-subrc = 0. p_var = ls_variant-variant. " 回填选定布局名 ENDIF. ENDFORM. **[^3]** ``` 3. **应用选定布局** ```abap DATA(ls_variant) = VALUE disvariant( report = sy-repid variant = p_var " 用户选择的布局名 ). CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING is_variant = ls_variant " 传入布局配置 i_save = 'A' is_layout = VALUE lvc_s_layo( zebra = 'X' cwidth_opt = 'X' ) " 基础布局设置[^4] TABLES t_outtab = gt_data. ``` --- #### 三、高级布局控制技巧 1. **动态布局切换** ```abap " 根据权限动态加载布局 IF sy-uname = 'ADMIN'. ls_variant-variant = 'ADMIN_LAYOUT'. ELSE. ls_variant-variant = 'USER_LAYOUT'. ENDIF. ``` 2. **强制默认布局** ```abap IF p_var IS INITIAL. ls_variant-variant = 'DEFAULT_LAYOUT'. " 当用户未选择时使用默认 ENDIF. ``` 3. **布局有效性验证** ```abap CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' is_variant = ls_variant EXCEPTIONS not_found = 1. IF sy-subrc <> 0. MESSAGE '无效布局配置' TYPE 'E'. ENDIF. ``` --- ### 最佳实践建议 1. **布局初始化**:在程序`INITIALIZATION`事件中预加载默认布局名 2. **权限控制**:使用`AUTHORITY-CHECK`限制敏感布局访问 3. **自动恢复**:在`AT SELECTION-SCREEN OUTPUT`中自动恢复用户上次使用的布局 > **关键点**:布局变式实际存储于表`INDX`中,键值组合为`REPORT名+布局名`。开发时可使用事务码`SE11`查看`INDX`表内容验证布局存储 **[^1]**。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值