1.选择屏幕回车带出文本
2.对内容或者权限在选择屏幕上校验和报错
debug图
结果图
3.测试用例的代码
TABLES: likp,lips,vbak.
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_vkorg TYPE likp-vkorg .
SELECTION-SCREEN COMMENT 45(20) Lv_text. "销售组织
SELECTION-SCREEN SKIP 1."空一行
SELECT-OPTIONS: s_auart FOR vbak-auart NO-EXTENSION NO INTERVALS . " 订单类型
SELECTION-SCREEN COMMENT 45(20) Lv_text2."订单类型文本
SELECTION-SCREEN END OF BLOCK bl01.
INITIALIZATION .
AT SELECTION-SCREEN OUTPUT ."填写之后回车触发
SELECT SINGLE vtext
FROM tvkot
WHERE vkorg = @P_vkorg
AND spras = '1'
INTO @Lv_text. "销售组描述 .
SELECT SINGLE bezei
FROM tvakt
WHERE auart = @s_auart-low
AND spras = '1'
INTO @Lv_text2. "订单类型
MODIFY SCREEN.
START-OF-SELECTION.
"权限控制,填写内容控制
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO' "权限对象,问业务顾问来
ID 'ACTVT' FIELD '03' "显示
ID 'VKORG' FIELD p_vkorg.
IF sy-subrc <> 0.
"消息属性是S成功类型的,但是表现形式是E错误的
"这样会使错误信息保持着在选择屏幕上的。
MESSAGE '您分配的权限不允许使用' && p_vkorg TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
"如果填写下的内容是多个销售组织SELECT-OPTIONS,他的权限控制是这样写
* SELECT *
* INTO TABLE @DATA(lt_vkorg)
* FROM tvkot
* WHERE vkorg IN @s_vkorg
* AND spras = '1'.
* LOOP AT lt_vkorg INTO DATA(ls_vkorg).
* AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
* ID 'ACTVT' FIELD '03'
* ID 'VKORG' FIELD ls_vkorg-vkorg.
* IF sy-subrc <> 0.
* MESSAGE '您分配的权限不允许使用' && ls_vkorg-vkorg TYPE 'S' DISPLAY LIKE 'E'.
* STOP.
* ENDIF.
* ENDLOOP.
"取数,报表显示
WRITE:'成功进入报表'.
END-OF-SELECTION.
4.注意点
1.选择屏幕上,消息要 TYPE ‘S’ DISPLAY LIKE ‘E’ . STOP.才能在选择屏幕上报错。还有一种: LEAVE LIST-PROCESSING. 也是可以挡在选择屏幕的(经过杨大佬提醒)
2.在选择屏幕上,我暂时还没有发现除了回车之外的触发方式,如果你知道,你可以在下面留言提醒我。
3.权限校验,要根据业务的要求来设置拦截信息。
好了今天的分享到这
分享使我快乐,我是寒武青锋。