子曰花开2015

导航

程序启用后台JOB自动发送邮件给邮箱

示例效果:

每半个小时自动发邮件给邮箱,邮件内容如下:

 

1.配置SAP发送邮件功能:

1.1 SU01更改如下:

可参考:https://blog.csdn.net/wangjolly/article/details/38367203

 

1.2 SCOT 更改如下:

1.3 配置完成后可使用SBWP及SOST测试是否配置成功。

2.程序自动跑JOB参考如下:

https://blog.csdn.net/weixin_41725521/article/details/83473283

2.SE38编写程序如下(如果程序中已经制定了自动JOB,则运行一次之后,后续会自动schedule job):

*&---------------------------------------------------------------------*
*& Report ZTEST2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST2.

*======================================================================*
*  说明书编号       :
*  程序名称         :  ZTEST005
*  程序描述         :
*  功能顾问         : XIONGHN
*  开发顾问         :
*  开始日期         :
*  完成日期         :
*======================================================================*
*                     修改历史.
*----------------------------------------------------------------------*
*
*序号. 修改人         日期             描述
*--- -----------      ----             -----------
*
*


*======================================================================*
*                   Tables used in the program
*======================================================================*
TABLES: vbak,vbap,vbkd,cdhdr.

*======================================================================*
*                Type declarations in the program
*======================================================================*
TYPE-POOLS:slis.
*------定义输出表结构
TYPESBEGIN OF ty_lockso,
        vkorg TYPE vbak-vkorg"销售组织
        vbeln TYPE vbak-vbeln"销售凭证
        kunnr TYPE vbak-kunnr"售达方
        erdat TYPE vbak-erdat"创建日期
       END OF ty_lockso.

TYPES:BEGIN OF ty_vbakpd,
      vkorg    TYPE vbak-vkorg,
      cmgst    TYPE vbak-cmgst,     "信用状态
      vbeln    TYPE vbak-vbeln,     "销售订单号
      kunnr    TYPE vbak-kunnr,
      erdat    TYPE vbak-erdat,
      posnr    TYPE vbap-posnr,
      lfgsa    TYPE vbap-lfgsa,     "总体交货状态
      pltyp    TYPE vbkd-pltyp,     "订单审核状态
      objectid TYPE cdhdr-objectid,
      END OF ty_vbakpd.

TYPESBEGIN OF ty_chghist,
       objectid TYPE cdhdr-objectid,
       username TYPE cdhdr-username"更改人
       tcode    TYPE cdhdr-tcode,    "更改事务代码
       END OF ty_chghist.

DATA: SEND_REQUEST TYPE REF TO CL_BCS,
      DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
      FAIL TYPE REF TO CX_BCS,
      RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.

DATA: LS TYPE STRING,
      MAIN_TEXT TYPE BCSY_TEXT,
      TITLE TYPE SO_OBJ_DES.

*======================================================================*
*                Internal Tables used in the program
*======================================================================*

DATA : gt_fcat TYPE TABLE OF lvc_s_fcat,
       gs_fcat TYPE lvc_s_fcat,
       gs_layo TYPE lvc_s_layo.

DATA: gt_data TYPE TABLE OF ty_lockso,
      gs_data TYPE ty_lockso.

DATA: gt_vbakpd TYPE TABLE OF ty_vbakpd,
      gs_vbakpd TYPE ty_vbakpd.

DATA: gt_chghist TYPE TABLE OF ty_chghist,
      gs_chghist TYPE ty_chghist.

DATA: lt_valutab   TYPE STANDARD TABLE OF rsparams,
       lv_jobname   TYPE tbtcjob-jobname,
       lv_jobcount  TYPE tbtcjob-jobcount,
       lv_info      TYPE i,
       lv_ret       TYPE i,
       lv_jobstatus TYPE tbtco-status,
       ls_tbtcv     TYPE tbtcv,
       lv_count     TYPE i.

DATA  lv_uname TYPE sy-uname.


*======================================================================*
*                Data declarations in the program
*======================================================================*

*======================================================================*
*                       CONSTANTS
*======================================================================*

*======================================================================*
*                      Input Selection Screen
*======================================================================*
SELECTION-SCREEN:BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS:s_vkorg FOR vbak-vkorg,
                   s_vbeln FOR vbak-vbeln"销售订单
                   s_kunnr FOR vbak-kunnr,
                   s_erdat FOR vbak-erdat.
SELECTION-SCREEN:END OF BLOCK a1.

PARAMETERS: mailto TYPE ad_smtpadr DEFAULT '904718441@qq.com'.

*======================================================================*
*                          Initialization
*======================================================================*
INITIALIZATION.





*======================================================================*
*                        At Selection Screen
*======================================================================*
AT SELECTION-SCREEN.

*======================================================================*
*                       AT SELECTION-SCREEN OUTPUT
*======================================================================*
AT SELECTION-SCREEN OUTPUT .
*======================================================================*
*                       AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*



*======================================================================*
*                        Start of Selection
*======================================================================*
START-OF-SELECTION.
  PERFORM gt_data.
  PERFORM handle_data.

  PERFORM create_content.
  PERFORM send_email.
  PERFORM auto_runjob.

  IF gt_data IS NOT INITIAL.
    PERFORM alv_show.
  ELSE.
    MESSAGE '没有符合的数据,请重新查询' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.

*======================================================================*
*                         End of Selection
*======================================================================*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  GT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GT_DATA .

  CLEAR gt_vbakpd.
  CLEAR gt_chghist.

  SELECT vbak~cmgst vbak~vbeln vbak~vkorg vbak~kunnr vbak~erdat
         vbap~posnr vbap~lfgsa
         vbkd~pltyp
  FROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbeln
            INNER JOIN vbkd ON vbap~vbeln = vbkd~vbeln
  INTO CORRESPONDING FIELDS OF TABLE gt_vbakpd
    WHERE vbak~cmgst <> 'A' AND vbak~cmgst <> 'D' AND vbak~cmgst <> ' '
    AND   vbap~lfgsa <> 'C'
    AND   vbkd~pltyp '20'
    AND   vbak~vkorg IN s_vkorg
    AND   vbak~vbeln IN s_vbeln
    AND   vbak~kunnr IN s_kunnr
    AND   vbak~erdat IN s_erdat.

    CLEAR gs_vbakpd.
    LOOP AT gt_vbakpd INTO gs_vbakpd.
      gs_vbakpd-objectid = gs_vbakpd-vbeln.
      MODIFY gt_vbakpd FROM gs_vbakpd.
    ENDLOOP.
    SORT gt_vbakpd BY vbeln.
    DELETE ADJACENT DUPLICATES FROM gt_vbakpd COMPARING vbeln posnr.

  IF gt_vbakpd[] IS NOT INITIAL.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_chghist
             FROM cdhdr
             FOR ALL ENTRIES IN gt_vbakpd
             WHERE cdhdr~objectid = gt_vbakpd-objectid
             AND   cdhdr~username LIKE 'FI%'
             AND   cdhdr~tcode 'VKM1' OR tcode 'VKM4'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM HANDLE_DATA .
  CLEAR gs_vbakpd.
  CLEAR gs_chghist.
  CLEAR gs_data.
  REFRESH gt_data.
  LOOP AT gt_chghist INTO gs_chghist.

    READ TABLE gt_vbakpd INTO gs_vbakpd WITH KEY objectid = gs_chghist-objectid .
    IF sy-subrc 0.
      gs_data-vkorg = gs_vbakpd-vkorg.
      gs_data-vbeln = gs_vbakpd-vbeln.
      gs_data-kunnr = gs_vbakpd-kunnr.
      gs_data-erdat = gs_vbakpd-erdat.

      APPEND gs_data TO gt_data.
      SORT gt_data BY vkorg vbeln kunnr erdat.
      DELETE ADJACENT DUPLICATES FROM gt_data COMPARING vkorg vbeln kunnr erdat.     

ENDIF.   

ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_SHOW .   

PERFORM init_layout.   
PERFORM set_fieldcat.   
PERFORM output_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  INIT_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INIT_LAYOUT .   
CLEAR gs_layo.   gs_layo
-cwidth_opt 'X'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_FIELDCAT .   

PERFORM frm_init_fieldcat USING 'VKORG' '销售组织' 10.   
PERFORM frm_init_fieldcat USING 'VBELN' '销售凭证' 6.   
PERFORM frm_init_fieldcat USING 'KUNNR' '客户编码' 6.   
PERFORM frm_init_fieldcat USING 'ERDAT' '创建日期' 6.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0398   text
*      -->P_0399   text
*      -->P_10     text
*----------------------------------------------------------------------*
FORM FRM_INIT_FIELDCAT  USING    VALUE(p_fnameTYPE lvc_fname                                  
VALUE(p_scrtextTYPE scrtext_l                                  
VALUE(p_lenTYPE lvc_outlen.   gs_fcat
-fieldname = p_fname.   gs_fcat
-scrtext_l = p_scrtext.   gs_fcat
-outputlen = p_len.   

APPEND gs_fcat TO gt_fcat.   
CLEAR  gs_fcat.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  OUTPUT_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OUTPUT_ALV .   

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'     
EXPORTING       i_callback_program       
= sy-repid       is_layout_lvc            
= gs_layo       it_fieldcat_lvc          
= gt_fcat       i_callback_pf_status_set 
'F_STATUS'       i_callback_user_command  
'ALV_USER_COMMAND'     
TABLES       t_outtab                 
= gt_data     
EXCEPTIONS       program_error            
1       
OTHERS                   2.   
IF sy-subrc <> 0.
* Implement suitable error handling here   
ENDIF.


ENDFORM.



FORM alv_user_command USING r_ucomm LIKE sy-ucomm                        rs_selfield 
TYPE slis_selfield.   

CASE r_ucomm.     
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.       
LEAVE TO SCREEN 0.   
ENDCASE.

ENDFORM.


FORM f_status USING rt_extab TYPE slis_t_extab.   
SET PF-STATUS '9000' EXCLUDING rt_extab.                             
"frm_platform_o
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_CONTENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_CONTENT .   

CONCATENATE '<table border="1"><tr>'               
'<th>销售组织</th>'               
'<th>销售订单</th>'               
'<th>客户编码</th>'               
'<th>创建日期</th>'               
'</tr>'               
INTO ls.   

LOOP AT gt_data INTO gs_data .     
CONCATENATE ls '<tr>'                 
'<td>' gs_data-vkorg'</td>'                 
'<td>' gs_data-vbeln'</td>'                 
'<td>' gs_data-kunnr'</td>'                 
'<td>' gs_data-erdat'</td>'                 
'</tr>'                 
INTO ls.   
ENDLOOP.     
CONCATENATE ls '</table>' INTO ls.     
APPEND ls TO main_text.     
title 'VKM1/VKM4需IT再次解锁销售订单2019!'.

ENDFORM.
**&---------------------------------------------------------------------*
**&      Form  SEND_EMAIL
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------*
FORM SEND_EMAIL .   

TRY.     SEND_REQUEST 
= CL_BCS=>CREATE_PERSISTENT).                        
" 邮件内容        document 
= cl_document_bcs=>create_document(          i_type    
'HTM'          i_text    
= main_text          i_subject 
title ).      " 邮件主题名

*     add document object to send request        send_request
->set_document( document ).

*     --------- add recipient (e-mail address) -----------------------
*     create recipient object        recipient 
= cl_cam_address_bcs=>create_internet_address( mailto ).

*     add recipient object to send request        send_request
->add_recipient( recipient ).

*     ---------- send document ---------------------------------------  SEND_REQUEST
->SEND( I_WITH_ERROR_SCREEN 'X' ).     
COMMIT WORK AND WAIT.     

CATCH CX_BCS INTO FAIL.  
ENDTRY.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  AUTO_RUNJOB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM AUTO_RUNJOB .   

DATA: lv_datum TYPE sy-datum,         lv_uzeit 
TYPE sy-uzeit,         lv_datum1 
TYPE sy-datum,         lv_uzeit1 
TYPE sy-uzeit,         lv_uz    
TYPE string.     lv_uname 

= sy-uname.     lv_datum 

= sy-datum.     lv_uzeit 
= sy-uzeit.   


CLEAR lv_uz.   lv_uz 
= sy-uzeit+0(2).   
CONDENSE lv_uz.   

CLEAR: lv_datum1,lv_uzeit1.   
IF lv_uz >= 23.     
"日期加1     lv_datum1 
= lv_datum + 1.     lv_uzeit1 
'000000'.   

ELSE.     lv_datum1 
= lv_datum.     lv_uzeit1 
= lv_uzeit + 1800.   
ENDIF.   

CLEAR lv_jobname.   
CONCATENATE 'ZTEST2_LIST_'lv_datum1'_'lv_uzeit1 INTO lv_jobname.   

CALL FUNCTION 'JOB_OPEN'      
EXPORTING        jobname          
= lv_jobname      
IMPORTING        jobcount         
= lv_jobcount        info             
= lv_info      
CHANGING        ret              
= lv_ret      
EXCEPTIONS        cant_create_job  
1        invalid_job_data 
2        jobname_missing  
3        
OTHERS           4.    
IF sy-subrc <> 0.
* Implement suitable error handling here    
ENDIF.

*执行后台作业    
"调用需要跑JOB的程序    
SUBMIT ZTEST2    USER lv_uname    VIA JOB lv_jobname 

NUMBER lv_jobcount AND RETURN.    

IF sy-subrc 0.      
CALL FUNCTION 'JOB_CLOSE'        
EXPORTING          jobcount             
= lv_jobcount          jobname              
= lv_jobname          sdlstrtdt            
= lv_datum1          sdlstrttm            
= lv_uzeit1        
EXCEPTIONS          cant_start_immediate 
1          invalid_startdate    
2          jobname_missing      
3          job_close_failed     
4          job_nosteps          
5          job_notex            
6          lock_failed          
7          invalid_target       
8          invalid_time_zone    
9          
OTHERS               10.      
IF sy-subrc <> 0.        
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.      
ENDIF.    
ENDIF.  

MESSAGE '执行完毕,请TOCDE:SM37检查' TYPE 'S'.
ENDFORM.

4.文本元素设置:

4. 设置GUI状态:

5.SM36设置自动跑JOB(如果已经在程序中设置了自动job,在SM36就不需要再次设置job):

参考链接:https://jingyan.baidu.com/article/358570f6a2c1e7ce4724fc3f.html

5.SM37job执行情况:

 

 

posted on 2019-01-15 14:26  子曰花开2015  阅读(502)  评论(0编辑  收藏  举报