SUBMIT – Pass parameters to Program

代码段显示了使用 ABAP SUBMIT 语句将参数从主程序传递到提交程序的不同方法

1.提交程序

REPORT ztest_np_2.
 
DATA: v_erdat TYPE vbak-erdat.
DATA: v_auart TYPE vbak-auart.
 
SELECT-OPTIONS: s_erdat FOR v_erdat,
                s_auart FOR v_auart.
PARAMETERS:p_bukrs LIKE bkpf-bukrs.
 
START-OF-SELECTION.
  DATA: lv_line TYPE i.
  lv_line = LINES( s_erdat ).
  WRITE: / 'S_ERDAT', lv_line.
 
  lv_line = LINES( s_auart ).
  WRITE: / 'S_AUART', lv_line.

  lv_line = LINES( p_bukrs ).
  WRITE: / 'P_BUKRS, lv_line.

 

2.程序共同部分

DATA: v_erdat TYPE vbak-erdat.
SELECT-OPTIONS: so_date FOR v_erdat.
PARAMETERS: p_bukrs LIKE bkpf-bukrs.
START-OF-SELECTION.

 

3 传递数据用 SELECTION-TABLE

  DATA: lt_seltab  TYPE TABLE OF rsparams,
        ls_seltab  LIKE LINE OF lt_seltab.
 
  LOOP AT so_date.
    ls_seltab-selname = 'S_ERDAT'.          " Name of parameter on submitted program
    ls_seltab-KIND    = 'S'.
    ls_seltab-SIGN    = so_date-SIGN.
    ls_seltab-OPTION  = so_date-OPTION.
    ls_seltab-LOW     = so_date-LOW.
    ls_seltab-HIGH    = so_date-HIGH.
    APPEND ls_seltab TO lt_seltab.
  ENDLOOP.
 
  ls_seltab-selname = 'S_AUART'.
  ls_seltab-KIND    = 'S'.
  ls_seltab-SIGN    = 'I'.
  ls_seltab-OPTION  = 'EQ'.
  ls_seltab-LOW     = 'OR'.
  APPEND ls_seltab TO lt_seltab.

  CLEAR:ls_seltab.  
  ls_seltab-selname = 'P_BUKRS'.
  ls_seltab-KIND    = 'P'.
  ls_seltab-LOW     = '1000'.
  APPEND ls_seltab TO lt_seltab.
 
  SUBMIT ztest_np_2
    WITH SELECTION-TABLE lt_seltab
    AND RETURN.

 

4 直接传递参数

*==== Passing Parameters directly
  SUBMIT ztest_np_2
    WITH s_erdat IN so_date
    WITH s_auart EQ 'OR' SIGN 'I'
     WITH p_bukrs = p_bukrs 
    AND RETURN.

 

5 传参通过变式

*==== Passing parameters from Variant
  " DEFAULT is the variant on the program ZTEST_NP_2
  SUBMIT ztest_np_2
    USING SELECTION-SET 'DEFAULT'
    AND RETURN.
 

 

6 传参通过生成变式

*==== Passing parameters with generated variant
  DATA:  ls_varid       TYPE          varid,
         lt_varit       TYPE TABLE OF varit,
         ls_varit       TYPE          varit.
 
  DATA: lt_seltab  TYPE TABLE OF rsparams,
        ls_seltab  LIKE LINE OF lt_seltab.
 
* Populate the selection table
  LOOP AT so_date.
    ls_seltab-selname = 'S_ERDAT'.          " Name of parameter on submitted program
    ls_seltab-KIND    = 'S'.
    ls_seltab-SIGN    = so_date-SIGN.
    ls_seltab-OPTION  = so_date-OPTION.
    ls_seltab-LOW     = so_date-LOW.
    ls_seltab-HIGH    = so_date-HIGH.
    APPEND ls_seltab TO lt_seltab.
  ENDLOOP.
 
  ls_seltab-selname = 'S_AUART'.
  ls_seltab-KIND    = 'S'.
  ls_seltab-SIGN    = 'I'.
  ls_seltab-OPTION  = 'EQ'.
  ls_seltab-LOW     = 'OR'.
  APPEND ls_seltab TO lt_seltab.
 
* Populate the Variant Directory
  ls_varid-REPORT  = 'ZTEST_NP_2'.
  ls_varid-variant = sy-datum && sy-uzeit && sy-uname.
  ls_varid-ename   = sy-uname.
  ls_varid-edat    = sy-datlo.
 
* Populate the Variant texts table
  ls_varit-langu   = sy-langu.
  ls_varit-REPORT  = ls_varid-REPORT.
  ls_varit-variant = ls_varid-variant.
  ls_varit-vtext   = 'Generated Variant'.
  APPEND ls_varit TO lt_varit.
 
  CALL FUNCTION 'RS_CREATE_VARIANT'
    EXPORTING
      curr_report               = ls_varid-REPORT
      curr_variant              = ls_varid-variant
      vari_desc                 = ls_varid
    TABLES
      vari_contents             = lt_seltab
      vari_text                 = lt_varit
    EXCEPTIONS
      illegal_report_or_variant = 1
      illegal_variantname       = 2
      not_authorized            = 3
      not_executed              = 4
      report_not_existent       = 5
      report_not_supplied       = 6
      variant_exists            = 7
      variant_locked            = 8
      OTHERS                    = 9.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
 
  SUBMIT ztest_np_2
    USING SELECTION-SET ls_varid-variant
    AND RETURN.

 

PARAMETERS:p_bukrs LIKE bkpf-bukrs.
posted @ 2022-05-13 09:03  ultraluck  阅读(63)  评论(0)    收藏  举报