我需要根据需要定义一个动态选择字段,我在运行tcode时使用一个起始变量。
在变量属性屏幕分配上,动态选择上没有“必填字段”选项,只有“保护字段”。 知道如何实现这个吗?
答案 0 :(得分:0)
在变体属性屏幕分配上,没有必填字段 动态选择选项
屏幕变体中有 Required
属性,它非常适用于强制常规字段和in dynamic selections too。
如果缺少它,请检查您的版本或者您的安装是否已损坏。我不相信它是依赖于tcode的。
答案 1 :(得分:0)
如果您在谈论Dynamic Selections,则只能保护字段。演示程序DEMO_LIST_OUTPUT
(基于F1S
逻辑数据库)的示例:
您只能保护这些字段以防输入,并且所有其他属性均被停用(如程序MODIFY_SCREEN
的子例程SAPLSSEL
所示,它们并未实现)。
模拟必填字段的唯一可能解决方法是在用户输入选择(或不输入)后实施ABAP代码。例如,在程序DEMO_LIST_OUTPUT
中,您可以添加以下ABAP代码,该代码可在用户执行程序时检查屏幕字段“连接号” 中是否包含值:
TABLES sscrfields.
AT SELECTION-SCREEN.
DATA dynsel TYPE rsds_trange.
CALL FUNCTION 'RS_REFRESH_FROM_DYNAMICAL_SEL'
EXPORTING
curr_report = sy-repid
mode_write_or_move = 'W'
IMPORTING
p_trange = dynsel
EXCEPTIONS
not_found = 1
wrong_type = 2.
DATA(connid) = VALUE spfli-connid(
dynsel[ tablename = 'SPFLI'
]-frange_t[ fieldname = 'CONNID'
]-selopt_t[ 1 ]-low OPTIONAL ).
IF sscrfields-ucomm = 'ONLI' AND connid IS INITIAL.
MESSAGE 'Flight Connection number is required' TYPE 'E'.
ENDIF.
NB:已通过ABAP 7.52测试。可以通过逻辑数据库(从ABAP 7.02或7.31开始已作废)隐式实现动态选择,也可以通过调用功能模块FREE_SELECTIONS_INIT
和FREE_SELECTIONS_DIALOG
显式实现动态选择。