ABAP中对变式的处理

转载:http://blog.csdn.net/zhongguomao/article/details/52028095

1、通过函数获取当前程序的变式值列表

CALL FUNCTION 'RS_VARIANT_CONTENTS'
EXPORTING
report = 报表程序名
variant = 变式名
* MOVE_OR_WRITE = 'W'
* NO_IMPORT = ' '
* EXECUTE_DIRECT = ' '
* IMPORTING
* SP =
TABLES
* L_PARAMS =
* L_PARAMS_NONV =
* L_SELOP =
* L_SELOP_NONV =
valutab = lt_val_old "变式对应的值列表
* objects =
* FREE_SELECTIONS_DESC =
* FREE_SELECTIONS_VALUE =
EXCEPTIONS
variant_non_existent = 1
variant_obsolete = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

2、通过函数创建程序运行的变式

data: lt_val_new type standard table of rsparams, "变式运行值列表
lt_varit TYPE STANDARD TABLE OF varit, "变式对象

lw_varid TYPE varid
CLEAR lw_val.
lw_val-selname = 'S_MATNR'. "选择屏幕字段名
lw_val-kind = 'S'. "选择屏幕字段类型(P->PARAMETERS;S->SELECT-OPTIONS)
lw_val-sign = 'I'. "标识(I->包含;E->排除)
lw_val-option = 'EQ'. "选项
lw_val-low = <fs_vbep>-matnr. "从(下限)
APPEND lw_val TO lt_val_new.
CLEAR lw_val.
lw_val-selname = 'S_WERKS'. "选择屏幕字段名
lw_val-kind = 'S'. "选择屏幕字段类型(P->PARAMETERS;S->SELECT-OPTIONS)
lw_val-sign = 'I'. "标识(I->包含;E->排除)
lw_val-option = 'EQ'. "选项
lw_val-low = <fs_vbep>-werks. "从(下限)
APPEND lw_val TO lt_val_new.

"填充变式目录
lw_varid-mandt = sy-mandt. "集团号
lw_varid-report = c_prog. "程序名
lw_varid-variant = l_curr_var. "变式名
lw_varid-flag1 = space.
lw_varid-flag2 = space.
lw_varid-transport = space.
lw_varid-environmnt = 'B'. "变式的适用环境,B(仅用于后台处理)
lw_varid-protected = space.
lw_varid-secu = space.
lw_varid-version = '1'. "变式版本号
lw_varid-ename = sy-uname. "用户名
lw_varid-edat = sy-datum. "日期
lw_varid-etime = sy-uzeit. "时间
lw_varid-aename = space.
lw_varid-aedat = space.
lw_varid-aetime = space.
lw_varid-mlangu = sy-langu.
"填充变式对象
lw_varit-mandt = sy-mandt.
lw_varit-langu = sy-langu.
lw_varit-report = c_prog.
lw_varit-variant = l_curr_var.
lw_varit-vtext = 'test variant'. “变式描述
APPEND lw_varit TO lt_varit.

"调用函数创建程序变式
CALL FUNCTION 'RS_CREATE_VARIANT'
EXPORTING
curr_report = c_prog
curr_variant = l_curr_var
vari_desc = lw_varid
TABLES
vari_contents = lt_val_new
vari_text = lt_varit
* VSCREENS =
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.
3、创建后台作业

DATA: l_jobcount TYPE tbtcjob-jobcount, "JOB作业编号
l_date TYPE sy-datum, "JOB运行日期
l_time TYPE sy-uzeit, "JOB运行时间

l_job_name TYPE tbtcjob-jobname, ”后台作业名
"调用无窗口安排后台作业
CALL FUNCTION 'JOB_OPEN'
EXPORTING
* DELANFREP = ' '
* JOBGROUP = ' '
jobname = l_job_name "后台作业名
sdlstrtdt = l_date "作业启动日期
sdlstrttm = l_time "作业启动时间
* JOBCLASS =
IMPORTING
jobcount = l_jobcount "后台作业号
* CHANGING
* RET =
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 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.
"提交后台作业
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
* ARCPARAMS =
authcknam = c_authname "用户名(执行后台作业的用户)
* COMMANDNAME = ' '
* OPERATINGSYSTEM = ' '
* EXTPGM_NAME = ' '
* EXTPGM_PARAM = ' '
* EXTPGM_SET_TRACE_ON = ' '
* EXTPGM_STDERR_IN_JOBLOG = 'X'
* EXTPGM_STDOUT_IN_JOBLOG = 'X'
* EXTPGM_SYSTEM = ' '
* EXTPGM_RFCDEST = ' '
* EXTPGM_WAIT_FOR_TERMINATION = 'X'
jobcount = l_jobcount "后台作业号
jobname = l_job_name "后台作业名
* LANGUAGE = SY-LANGU
* PRIPARAMS = ' '
report = c_prog "后台作业程序名
variant = l_curr_var "变式名
* IMPORTING
* STEP_NUMBER =
EXCEPTIONS
bad_priparams = 1
bad_xpgflags = 2
invalid_jobdata = 3
jobname_missing = 4
job_notex = 5
job_submit_failed = 6
lock_failed = 7
program_missing = 8
prog_abap_and_extpg_set = 9
OTHERS = 10
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
"释放后台作业
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = l_jobcount "后台作业号
jobname = l_job_name "作业名
sdlstrtdt = l_date "开始日期
sdlstrttm = l_time "开始时间
* strtimmed = space "立即执行,如果需要立即执行则设置为'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.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.

4、删除变式

变式对应数据库表为varid.

"删除报表变式
CALL FUNCTION 'RS_VARIANT_DELETE'
EXPORTING
report = <fs_varid>-report
variant = <fs_varid>-variant
flag_confirmscreen = 'X'
flag_delallclient = 'X'
* IMPORTING
* VARIANT =
EXCEPTIONS
not_authorized = 1
not_executed = 2
no_report = 3
report_not_existent = 4
report_not_supplied = 5
variant_locked = 6
variant_not_existent = 7
no_corr_insert = 8
variant_protected = 9
OTHERS = 10
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

 

 

 

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值