zoukankan      html  css  js  c++  java
  • ABAP程序相互调用--SUBMIT

    (1) 调用其他程序:

       * Trigger the IDOC
       SUBMIT zpcppmd001_idoc AND RETURN.

    (2) 调用其他程序参数传递参数:

    *当被调用的程序的屏幕有输入参数时: 
    
           SUBMIT zreport with p_param1 = 'value1'
                                   with p_param2 = 'value2'. 
    
    *当要传递一个内表到被调用的程序时,需要用SAP MEMORY或者ABAP MEMORY: 
    
    *在调用的程序中:
    EXPORT it_tab TO MEMORY 'Z_MEMORY'. 
    
    *在被调用的程序中:
    IMPORT T_ITAB FROM MEMORY 'Z_MEMORY'.

    (3) RANGE表:

    *Code used to populate 'select-options' & execute report
     DATA: seltab type table of rsparams,
           seltab_wa like line of seltab. 
    
      seltab_wa-selname = 'PNPPERNR'.
       seltab_wa-sign    = 'I'.
       seltab_wa-option  = 'EQ'. 
    
    * load each personnel number accessed from the structure into
     * parameters to be used in the report
       loop at pnppernr.
         seltab_wa-low = pnppernr-low.
         append seltab_wa to seltab.
       endloop.
       SUBMIT zreport with selection-table seltab
                                     via selection-screen.

    (4)其他情况:

    *Submit report and return to current program afterwards 
    
    SUBMIT zreport AND RETURN. 
    
    *Submit report via its own selection screen 
    
    SUBMIT zreport VIA SELECTION-SCREEN. 
    
    *Submit report using selection screen variant 
    
    SUBMIT zreport USING SELECTION-SET 'VARIANT1'. 
    REPORT ZPPR0051.
    
    TABLES:AUFM.
    
    DATA: IT_SELTAB TYPE TABLE OF RSPARAMS,
          IW_SELTAB LIKE LINE OF IT_SELTAB.
    
    SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: S_WERKS FOR AUFM-WERKS OBLIGATORY NO INTERVALS,
                    S_AUFNR FOR AUFM-AUFNR.
    SELECTION-SCREEN END OF BLOCK BLK.
    
    *----------------------------------------------------------------------*
    * START-OF-SELECTION.
    *----------------------------------------------------------------------*
    
    START-OF-SELECTION.
    
    LOOP AT S_WERKS.
     IW_SELTAB-SELNAME = 'S_WERKS'.
     IW_SELTAB-SIGN    = S_WERKS-SIGN .
     IW_SELTAB-OPTION  = S_WERKS-OPTION.
     IW_SELTAB-LOW     = S_WERKS-LOW.
     APPEND IW_SELTAB TO IT_SELTAB.
    ENDLOOP.
    
    LOOP AT S_AUFNR .
     IW_SELTAB-SELNAME = 'S_AUFNR'.
     IW_SELTAB-SIGN    = S_AUFNR-SIGN .
     IW_SELTAB-OPTION  = S_AUFNR-OPTION.
     IW_SELTAB-LOW     = S_AUFNR-LOW.
     IW_SELTAB-HIGH    = S_AUFNR-HIGH.
     APPEND IW_SELTAB TO IT_SELTAB.
    ENDLOOP.
    
    SUBMIT ZPPR0015 WITH SELECTION-TABLE IT_SELTAB.

     *---------------------------------------------------------------------------

    1、最普通的用法
    
    *Code used to execute a report
    SUBMIT Zreport.
    
    
    2、带select-options程序的Submit的用法
    
    *Code used to populate 'select-options' & execute report
    DATA: seltab type table of rsparams,
           seltab_wa like line of seltab.
    
       seltab_wa-selname = 'PNPPERNR'.
       seltab_wa-sign    = 'I'.
       seltab_wa-option  = 'EQ'.
    
     * load each personnel number accessed from the structure into
     * parameters to be used in the report
       loop at pnppernr.
         seltab_wa-low = pnppernr-low.
         append seltab_wa to seltab.
       endloop.
       SUBMIT zreport with selection-table seltab
                                     via selection-screen.
    
    3、带parameters程序的Submit的用法
    
    *Code used to populate 'parameters' & execute report
    
    SUBMIT zreport with p_param1 = 'value'
    with p_param2 = 'value'.
    
    
    4、其他情况
    
    *Submit report and return to current program afterwards
    
    SUBMIT zreport AND RETURN.
    
    *Submit report via its own selection screen
    SUBMIT zreport VIA SELECTION-SCREEN.
    
    *Submit report using selection screen variant
    SUBMIT zreport USING SELECTION-SET 'VARIANT1'.
    
    *Submit report but export resultant list to memory, rather than
    *it being displayed on screen
    SUBMIT zreport EXPORTING LIST TO MEMORY.
    *  Once report has finished and control has returned to calling
    *  program, use function modules LIST_FROM_MEMORY, WRITE_LIST and
    *  DISPLAY_LIST to retrieve and display report.
    
    *Example Code (Retrieving list from memory)
    DATA  BEGIN OF itab_list OCCURS 0.
    INCLUDE STRUCTURE abaplist.
    DATA  END OF itab_list.
    
    DATA: BEGIN OF vlist OCCURS 0,
    filler1(01)   TYPE c,
    field1(06)    TYPE c,
    filler(08)    TYPE c,
    field2(10)    TYPE c,
    filler3(01)   TYPE c,
    field3(10)    TYPE c,
    filler4(01)   TYPE c,
    field4(3)     TYPE c,
    filler5(02)   TYPE c,
    field5(15)    TYPE c,
    filler6(02)   TYPE c,
    field6(30)    TYPE c,
    filler7(43)   TYPE c,
    field7(10)    TYPE c,
    END OF vlist.
    
    SUBMIT zreport EXPORTING LIST TO MEMORY.
    
    CALL FUNCTION 'LIST_FROM_MEMORY'
    TABLES
    listobject = itab_list
    EXCEPTIONS
    not_found  = 4
    OTHERS     = 8.
    
    CALL FUNCTION 'LIST_TO_ASCI'
    EXPORTING
    list_index         = -1
    TABLES
    listasci           = vlist
    listobject         = itab_list
    EXCEPTIONS
    empty_list         = 1
    list_index_invalid = 2
    OTHERS             = 3.
    
    IF sy-subrc NE '0'.
    WRITE:/ 'LIST_TO_ASCI error !! ', sy-subrc.
    ENDIF.
    
    
    
    
    
    5、Submit为后台执行
    
    *Submit report as job(i.e. in background)
    
    data: jobname like tbtcjob-jobname value
    ' TRANSFER TRANSLATION'.
    data: jobcount like tbtcjob-jobcount,
    host like msxxlist-host.
    data: begin of starttime.
    include structure tbtcstrt.
    data: end of starttime.
    data: starttimeimmediate like btch0000-char1.
    
    * Job open
    call function 'JOB_OPEN'
    exporting
    delanfrep        = ' '
    jobgroup         = ' '
    jobname          = jobname
    sdlstrtdt        = sy-datum
    sdlstrttm        = sy-uzeit
    importing
    jobcount         = jobcount
    exceptions
    cant_create_job  = 01
    invalid_job_data = 02
    jobname_missing  = 03.
    if sy-subrc ne 0.
    "error processing
    endif.
    
    * Insert process into job
    SUBMIT zreport and return
    with p_param1 = 'value'
    with p_param2 = 'value'
    user sy-uname
    via job jobname
    number jobcount.
    if sy-subrc > 0.
    "error processing
    endif.
    
    * Close job
    starttime-sdlstrtdt = sy-datum + 1.
    starttime-sdlstrttm = '220000'.
    call function 'JOB_CLOSE'
    exporting
    event_id             = starttime-eventid
    event_param          = starttime-eventparm
    event_periodic       = starttime-periodic
    jobcount             = jobcount
    jobname              = jobname
    laststrtdt           = starttime-laststrtdt
    laststrttm           = starttime-laststrttm
    prddays              = 1
    prdhours             = 0
    prdmins              = 0
    prdmonths            = 0
    prdweeks             = 0
    sdlstrtdt            = starttime-sdlstrtdt
    sdlstrttm            = starttime-sdlstrttm
    strtimmed            = starttimeimmediate
    targetsystem         = host
    exceptions
    cant_start_immediate = 01
    invalid_startdate    = 02
    jobname_missing      = 03
    job_close_failed     = 04
    job_nosteps          = 05
    job_notex            = 06
    lock_failed          = 07
    others               = 99.
    if sy-subrc eq 0.
    "error processing
    endif.
    程序间获取ALV数据的两种方法:
    方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点;
    方法2:SUBMIT前屏蔽ALV GRID的显示,SUBMIT,然后调用CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF方法获取数据,该方法不需要修改目标程序,但不能设置目标程序的中断点,需显示ALV的函数执行完毕方可获取到数据。
     
    示例:
    START-OF-SELECTION.   
    
    PERFORM GET_DATA.
    *&———————————————————————* 
    
    *&      Form  GET_DATA 
    
    *&———————————————————————* 
    
    *       text 
    *———————————————————————-* 
    
    *  –>  p1        text 
    
    *  <–  p2        text 
    
    *———————————————————————-* 
    
    FORM GET_DATA.   
    
      DATA:LS_DATA TYPE REF TO DATA.   
    
      FIELD-SYMBOLS: <LT_DATA> TYPE TABLE,                  
    
                                <L_DATA>  TYPE DATA.
       CL_SALV_BS_RUNTIME_INFO=>SET(   DISPLAY  = ''     
    
                                                               METADATA = ''    
    
                                                               DATA     = 'X'  ).
    
    
       SUBMIT ZMM000000 WITH ZBUDAT IN ZBUDAT AND RETURN.
    
    
       TRY.       
    
         CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF(       
    
                                                   IMPORTING R_DATA = LS_DATA ).      
    
         ASSIGN LS_DATA->* TO <LT_DATA>.
    
      CATCH CX_SALV_BS_SC_RUNTIME_INFO.       
    
         MESSAGE 'UNABLE TO RETRIEVE ALV DATA' TYPE 'E'.
    
      ENDTRY.
    
    
       CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ).
    
    
       LOOP AT <LT_DATA> ASSIGNING <L_DATA>.   
    
        MOVE-CORRESPONDING <L_DATA> TO GT_TAB.  
    
        APPEND GT_TAB.   
    
      ENDLOOP. 
    
    ENDFORM.
  • 相关阅读:
    栅栏与自由
    如何种玉米和黄豆
    除了CRUD也要注意IO
    奶糖测试
    看你知道不知道VB6的模块之间循环关系
    [zz]C++类模板
    [zz]C++中std::tr1::function和bind 组件的使用
    [zz]c/c++一些库
    [zz] Python性能鸡汤
    [zz]Linux 下 socket 编程示例
  • 原文地址:https://www.cnblogs.com/mingdashu/p/5609503.html
Copyright © 2011-2022 走看看