需要动态选择字段

时间:2017-09-19 12:46:08

标签: sap sap-erp

我需要根据需要定义一个动态选择字段,我在运行tcode时使用一个起始变量。

在变量属性屏幕分配上,动态选择上没有“必填字段”选项,只有“保护字段”。 知道如何实现这个吗?

2 个答案:

答案 0 :(得分:0)

  

在变体属性屏幕分配上,没有必填字段   动态选择选项

屏幕变体中有 Required属性,它非常适用于强制常规字段和in dynamic selections too

enter image description here

如果缺少它,请检查您的版本或者您的安装是否已损坏。我不相信它是依赖于tcode的。

答案 1 :(得分:0)

如果您在谈论Dynamic Selections,则只能保护字段。演示程序DEMO_LIST_OUTPUT(基于F1S逻辑数据库)的示例:

Dynamic selections in DEMO_LIST_OUTPUT

Program variant for dynamic selections in DEMO_LIST_OUTPUT

您只能保护这些字段以防输入,并且所有其他属性均被停用(如程序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_INITFREE_SELECTIONS_DIALOG显式实现动态选择。