如何更改 FM "FREE_SELECTIONS_INIT"事件的值


我创建了一些动态选择选项。在我的表中,我想要为用户预定义一个不可更改的参数。我用事件的回调表单做的不可更改的:
data: LS_EVENTS type RSDSEVENTS,
    LT_EVENTS type standard table of RSDSEVENTS.
LS_EVENTS-EVENT = 'O'. "at selection screen output §§§
LS_EVENTS-PROG = SY-REPID.
LS_EVENTS-FORM = 'AT_SELECTION_SCREEN_OUT'.
append LS_EVENTS to LT_EVENTS.
call function 'FREE_SELECTIONS_INIT'
 exporting
  KIND                     = 'F' "
importing
  SELECTION_ID             = GV_SELECTION_ID
tables
  TABLES_TAB               = GT_TABLE
  FIELDS_TAB               = GT_FIELDSTAB
  EVENTS                   = LT_EVENTS
exceptions
 ...
  others                   = 20.

现在回调表单如下:

form AT_SELECTION_SCREEN_OUT tables
      LT_RSSELDYN "selections
      LT_RSFLDNUM. "dynpro info
  field-symbols <FS_LINE> type ANY.
  field-symbols <FS_FIELD> type ANY.

  read table LT_RSFLDNUM  assigning <FS_LINE> with key
  ('TABLENAME') = 'MyTab' ('FIELDNAME') = 'MyField' .
  if <FS_LINE> is assigned.
    assign component 'GROUP1' of structure <FS_LINE> to <FS_FIELD>.
    if <FS_FIELD> is assigned. "Group1 ausgelesen
      loop at screen.
        if SCREEN-GROUP1 = <FS_FIELD>.
          "Eingabe deaktiviert
          SCREEN-INPUT = '0'.
          "Ausblenden unnötiger Felder
          if SCREEN-GROUP3 = 'TOT'
             or SCREEN-GROUP3 = 'HGH'
             or SCREEN-GROUP3 = 'VPU'.
            SCREEN-INVISIBLE = 1.
          endif.
          modify screen."änderungen auf Screen speichern
        endif.
      endloop.
    endif.
  endif.
  unassign: <FS_FIELD>, <FS_LINE>.

这很管用。它设定了不可改变的正确价值观。正如文档所说,在第一个表中,保存了当前值。但如果我改变它们,那是行不通的。

  read table LT_RSSELDYN  assigning <FS_LINE> with key
  ('TABLENAME') = 'MyTab' ('FIELDNAME') = 'MyField' .
  if <FS_LINE> is assigned.
    "<>-low = 'MyValue', <>-sign = 'I', <>-option = 'EQ'
    assign component 'LOW' of structure <FS_LINE> to <FS_FIELD>.
    if <FS_FIELD> is assigned.
      <FS_FIELD> = 'MyValue'.
    endif.
    unassign <FS_FIELD>.
    assign component 'SIGN' of structure <FS_LINE> to <FS_FIELD>.
    if <FS_FIELD> is assigned.
      <FS_FIELD> = 'I'.
    endif.
    unassign <FS_FIELD>.
    assign component 'OPTION' of structure <FS_LINE> to <FS_FIELD>.
    if <FS_FIELD> is assigned.
      <FS_FIELD> = 'EQ'.
    endif.
    unassign <FS_FIELD>. 
  endif.
  unassign: <FS_FIELD>, <FS_LINE>.
endform.

是否有可能限制这些值的变化?我只希望它们显示在Selectoptions中(如果有的话(。

作为一个选项,您可以隐藏不想被用户更改的字段,并在wads后手动填充表达式和where选项卡。对于此tabfields_not_display参数存在。

  DATA: table                      TYPE string,
        ev_expressions             TYPE rsds_texpr,
        ev_field_ranges            TYPE rsds_trange,
        ev_number_of_active_fields LIKE sy-tfill,
        lt_field_tab               TYPE TABLE OF rsdsfields,
        lt_tabfields_not_display   TYPE TABLE OF rsdsfields.
  DATA: table_tab TYPE TABLE OF rsdstabs,
        selid     TYPE  rsdynsel-selid,
        cond_tab  TYPE rsds_twhere.
  table = 'USR02'.
  table_tab = VALUE #( ( prim_tab = table ) ).
  APPEND VALUE rsdsfields( tablename = 'USR02' fieldname = 'BNAME' ) TO lt_tabfields_not_display.
  APPEND VALUE rsdsfields( tablename = 'USR02' fieldname = 'GLTGV' ) TO lt_tabfields_not_display.
  CALL FUNCTION 'FREE_SELECTIONS_INIT'
    EXPORTING
      kind                  = 'T'
    IMPORTING
      selection_id          = selid
    TABLES
      tables_tab            = table_tab
      tabfields_not_display = lt_tabfields_not_display
    EXCEPTIONS
      OTHERS                = 4.
  CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
    EXPORTING
      selection_id            = selid
      title                   = 'Free Selection'
      as_window               = ' '
    IMPORTING
      where_clauses           = cond_tab
      expressions             = ev_expressions
      field_ranges            = ev_field_ranges
      number_of_active_fields = ev_number_of_active_fields
    TABLES
      fields_tab              = lt_field_tab
    EXCEPTIONS
      OTHERS                  = 4.
  APPEND VALUE rsds_expr( tablename = table
                          expr_tab = VALUE rsds_expr_tab(
                          ( logop = 'AND' arity = '2' )
                          ( arity = '0' fieldname = 'BNAME' option = 'EQ' low = 'my_user' )
                          ( arity = '0' fieldname = 'GLTGV' option = 'EQ' low = '20190503' ) )
                         ) TO ev_expressions.
  APPEND VALUE rsds_where( tablename = table
                          where_tab = VALUE rsds_where_tab(
                          ( line = `    ( BNAME EQ          'my_user'  ) ` )
                          ( line = ` AND ( GLTGV EQ         '20190503' )  `  ) )
                         ) TO cond_tab.

相关内容

  • 没有找到相关文章

最新更新