如何在选择画面中创建动态的select-options

1, 用到的函数,类方法

下面介绍一个能根据所选表字段自动创建动态select-options的例子代码,代码中用到了以下函数和类方法:

1, FREE_SELECTIONS_INIT:初始化动态选择画面

2, FREE_SELECTIONS_DIALOG:弹出生成动态select-options的字段选择窗口

3, FREE_SELECTIONS_WHERE_2_EX:转换数据格式,RSDS_TWHERE ==> RSDS_TEXPR

4, cl_alv_table_create=>create_dynamic_table :创建动态内表

2, 例子代码

完整代码如下:感兴趣可以自己debug看看。

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 REPORT ztest_dynamic_selection. *---------------------------------------------------------------------- *Tables * *---------------------------------------------------------------------- TABLES : sscrfields, "Fields on selection screens          dd03l. "Table Fields *---------------------------------------------------------------------- *Type Pools * *---------------------------------------------------------------------- TYPE-POOLS:rsds. *---------------------------------------------------------------------- *Selection Screen * *---------------------------------------------------------------------- SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001, SKIP, BEGIN OF LINE, COMMENT 1(5) text-002. PARAMETERS : p_tab LIKE dd03l-tabname OBLIGATORY. "Table name SELECTION-SCREEN : PUSHBUTTON 45(8) p_btn USER-COMMAND clk, "Select-options END OF LINE, END OF BLOCK b1. *---------------------------------------------------------------------- *Types * *---------------------------------------------------------------------- TYPES: BEGIN OF t_dd03l,          tabname    LIKE dd03l-tabname, "Table Name          fieldname  LIKE dd03l-fieldname, "Field Name          keyflag    LIKE dd03l-keyflag, "Key Flag          rollname   LIKE dd03l-rollname, "Roll Name          position   LIKE dd03l-position, "Position          ddtext(30), "Description        END OF t_dd03l,        BEGIN OF t_fields.         INCLUDE STRUCTURE dd03l. TYPES: END OF t_fields. TYPES : BEGIN OF t_tabs. "To hold the table names         INCLUDE STRUCTURE rsdstabs. TYPES : END OF t_tabs. TYPES : BEGIN OF t_flds. "To hold the field names         INCLUDE STRUCTURE rsdsfields. TYPES : END OF t_flds. TYPES : BEGIN OF t_fname, "To hold the field names           fld LIKE dd03l-fieldname,         END OF t_fname. *---------------------------------------------------------------------- *Internal Tables * *---------------------------------------------------------------------- DATA : it_dd03l  TYPE TABLE OF t_dd03l, "To hold the field names        it_tabs   TYPE TABLE OF t_tabs, "To hold the table names        it_flds   TYPE TABLE OF t_flds, "To hold the field names        it_temp   TYPE TABLE OF t_flds, "Temp. table to hold field names        it_fields TYPE TABLE OF t_fields, "To hold the field names        it_cat    TYPE TABLE OF lvc_s_fcat, "To hold Field Catalog        it_fname  TYPE TABLE OF t_fname. *---------------------------------------------------------------------- *Work areas * *---------------------------------------------------------------------- DATA: d_ref     TYPE REF TO data , "Data reference       wa_dd03l  LIKE LINE OF it_dd03l, "Workarea for IT_DD03L       wa_tabs   LIKE LINE OF it_tabs, "Workarea for IT_TABS       wa_flds   LIKE LINE OF it_flds, "Workarea for IT_FLDS       wa_temp   LIKE LINE OF it_temp, "Workarea for IT_TEMP       wa_fields LIKE LINE OF it_fields, "Workarea for IT_FIELDS       wa_cat    LIKE LINE OF it_cat , "Workarea for IT_CAT       wa_fname  LIKE LINE OF it_fname. "Workarea for IT_FNAME *---------------------------------------------------------------------- *Field Symbols * *---------------------------------------------------------------------- FIELD-SYMBOLS : <f_fs> TYPE table. "FieldSymbol for holding fields *---------------------------------------------------------------------- *Variables * *---------------------------------------------------------------------- DATA: gx_texpr         TYPE rsds_texpr, "Variable to hold Expression       gx_twhere        TYPE rsds_twhere, "Variable to hold Where Clause       gv_selid         LIKE rsdynsel-selid, "Variable to hold Selid       gv_actnum        LIKE sy-tfill, "Variable to hold no of fields       gv_title         LIKE sy-title, "Variable to hold Title       gv_where_cl(100) TYPE c, "Variable to hold Where clause       gv_tbname        LIKE dd03l-tabname,       gv_temp. SELECT-OPTIONS: s_fld   FOR dd03l-fieldname NO-DISPLAY, "To hold fields selected s_selop FOR dd03l-fieldname NO-DISPLAY, "To hold fields for creating dyn. select-options s_where FOR gv_where_cl NO-DISPLAY. "To hold where condition PARAMETERS: gv_t_old LIKE dd03l-tabname NO-DISPLAY. "Earlier Table name DATA : gt_grid TYPE REF TO cl_gui_alv_grid,        gt_cust TYPE REF TO cl_gui_custom_container, "Custom Container        cust    TYPE scrfname VALUE 'CC_OUTPUT'. "Custom controller *---------------------------------------------------------------------- *Constants * *---------------------------------------------------------------------- CONSTANTS: gc_i     TYPE c VALUE 'I',            gc_eq(2) TYPE c VALUE 'EQ'. *---------------------------------------------------------------------- *Initialization * *---------------------------------------------------------------------- INITIALIZATION. **--Initialize values   PERFORM initialize. *---------------------------------------------------------------------- *At Selection Screen * *---------------------------------------------------------------------- AT SELECTION-SCREEN. *--Select the fields of the input table   PERFORM select_flds. *---------------------------------------------------------------------- *Start Of Selection * *---------------------------------------------------------------------- START-OF-SELECTION. *--Fetch data to display output   PERFORM fetch_data. *---------------------------------------------------------------------- *End Of Selection * *---------------------------------------------------------------------- END-OF-SELECTION.   CALL SCREEN '0300'. *---------------------------------------------------------------------- *At User Command * *---------------------------------------------------------------------- AT USER-COMMAND.   CASE sy-ucomm.     WHEN 'OK'.       REFRESH it_temp.       CLEAR it_temp.       MOVE 'S' TO wa_temp-type.       MOVE gv_tbname TO wa_temp-tablename.       DO.         READ LINE sy-index FIELD VALUE gv_temp INTO gv_temp.         IF sy-subrc NE 0.           EXIT.         ENDIF.         IF gv_temp EQ 'X'.           sy-index = sy-index - 1.           READ TABLE it_dd03l INTO wa_dd03l INDEX sy-index.           IF sy-subrc = 0.             MOVE wa_dd03l-fieldname TO wa_temp-fieldname.             APPEND wa_temp TO it_temp.             CLEAR gv_temp.           ENDIF.         ENDIF.       ENDDO.       DESCRIBE TABLE it_temp.       IF sy-tfill GT 70. **--More than 70 fields can not be selected         MESSAGE 'Cannot select more than 70 Parameters' TYPE 'I'.         REFRESH it_temp[].         CLEAR it_temp.       ELSE.         LEAVE LIST-PROCESSING.       ENDIF.     WHEN 'CANCEL'.       LEAVE LIST-PROCESSING.     WHEN 'SELALL'. **--Select all fields       CLEAR wa_dd03l-fieldname.       DO.         READ LINE sy-index.         IF sy-subrc EQ 0 AND         wa_dd03l-fieldname NE space.           gv_temp = 'X'.           MODIFY LINE sy-index INDEX 0 FIELD VALUE gv_temp.           HIDE gv_temp.           CLEAR wa_dd03l-fieldname.         ELSEIF sy-subrc NE 0.           EXIT.         ENDIF.       ENDDO.     WHEN 'DSELALL'. **--Deselect all fields       CLEAR gv_temp.       DO.         READ LINE sy-index.         IF sy-subrc EQ 0.           CLEAR gv_temp.           MODIFY LINE sy-index INDEX 0 FIELD VALUE gv_temp FROM gv_temp.           HIDE gv_temp.         ELSEIF sy-subrc NE 0.           EXIT.         ENDIF.       ENDDO.   ENDCASE.   sy-lsind = 0. *&--------------------------------------------------------------------- *& Form INITIALIZE *&--------------------------------------------------------------------- * Initialize values on selection-screen *---------------------------------------------------------------------- FORM initialize .   p_btn = 'Options'(003). ENDFORM. " INITIALIZE *&--------------------------------------------------------------------- *& Form SELECT_FLDS *&--------------------------------------------------------------------- * Select fields from the table *---------------------------------------------------------------------- FORM select_flds .   CASE sscrfields-ucomm.     WHEN 'CLK'. **--Display Screen with the list of fields       PERFORM genr_scr.   ENDCASE. ENDFORM. " SELECT_FLDS *&--------------------------------------------------------------------- *& Form genr_scr *&--------------------------------------------------------------------- * Display a screen with list of fields *---------------------------------------------------------------------- FORM genr_scr. **--If table in the parameter is not the same as the old table and **--old table is not blank, then initialise all the variables associated   IF p_tab NE gv_t_old AND gv_t_old IS NOT INITIAL.     REFRESH: it_tabs, it_flds,     gx_texpr, gx_twhere,     s_where, s_selop.     CLEAR: gv_selid. **--Pass current table parameter value to Old table parameter     gv_t_old = p_tab.   ENDIF. **--Pass the current table name to old table variable   IF gv_t_old EQ space.     gv_t_old = p_tab.   ENDIF. **--Check if table name is given before clicking the button   IF p_tab IS INITIAL.     MESSAGE 'Enter the Table name' TYPE 'E'.   ENDIF. **--Get the list of fields of a given table   PERFORM get_selections. **--If none of the fields, provide the list of fields for selecting   IF it_flds[] IS INITIAL.     CLEAR gv_selid.     PERFORM select_fieldlist.   ENDIF. **--Show message if none of the fields are selected   IF it_flds[] IS INITIAL.     MESSAGE 'No parameters selected' TYPE 'S'.     EXIT.   ENDIF. **--Generate dynamic select-options   REFRESH it_tabs.   CLEAR : it_tabs, wa_tabs.   wa_tabs-prim_tab = p_tab.   APPEND wa_tabs TO it_tabs.   PERFORM set_values. **--Generate Expression from Where clause   CALL FUNCTION 'FREE_SELECTIONS_WHERE_2_EX'     EXPORTING       where_clauses        = gx_twhere     IMPORTING       expressions          = gx_texpr     EXCEPTIONS       incorrect_expression = 1       OTHERS               = 2.   IF sy-subrc NE 0.     MESSAGE 'Error in Dynamic screen generation' TYPE 'I'.     EXIT.   ENDIF.   IF gx_texpr IS NOT INITIAL. **--Populate values to select-options from expression     PERFORM set_values.   ENDIF. **--Display screen with the fields listed   IF gv_selid IS NOT INITIAL.     PERFORM call_screen.   ENDIF. ENDFORM. " genr_scr *&--------------------------------------------------------------------- *& Form GET_SELECTIONS *&--------------------------------------------------------------------- * Fetch the fields in the table given *---------------------------------------------------------------------- FORM get_selections.   DATA : wa_where LIKE LINE OF gx_twhere.   REFRESH: it_flds, gx_twhere.   CLEAR : wa_flds.   wa_flds-tablename = p_tab.   wa_flds-type = 'S'.   LOOP AT s_selop. **--Populate all the fields selected that are previously selected     wa_flds-fieldname = s_selop-low.     APPEND wa_flds TO it_flds.   ENDLOOP.   IF s_where[] IS NOT INITIAL. **--Populate values to where condition if any data is previously given **--to the dynamic select-options     wa_where-tablename = p_tab.     LOOP AT s_where.       APPEND s_where-low TO wa_where-where_tab.     ENDLOOP.     APPEND wa_where TO gx_twhere.   ENDIF. ENDFORM. " GET_SELECTIONS *&--------------------------------------------------------------------- *& Form SELECT_FIELDLIST *&--------------------------------------------------------------------- * Display the list of fields *---------------------------------------------------------------------- FORM select_fieldlist.   CLEAR: it_dd03l[], it_dd03l,   gv_tbname. **--Get field names for given table   SELECT tabname          fieldname          keyflag          rollname          position     FROM dd03l     INTO TABLE it_dd03l    WHERE tabname EQ p_tab      AND fieldname NE 'MANDT'.   IF sy-subrc = 0.     SORT it_dd03l BY position.     DELETE it_dd03l WHERE fieldname CP '.INCLU*'.   ENDIF. **--Get the description of the fields   LOOP AT it_dd03l INTO wa_dd03l.     IF NOT wa_dd03l-rollname IS INITIAL.       SELECT SINGLE ddtext       FROM dd04t       INTO wa_dd03l-ddtext       WHERE rollname EQ wa_dd03l-rollname       AND ddlanguage = sy-langu       AND as4local = 'A'.       MODIFY it_dd03l FROM wa_dd03l.     ELSE.       SELECT SINGLE ddtext       FROM dd03t       INTO wa_dd03l-ddtext       WHERE tabname EQ wa_dd03l-tabname       AND ddlanguage = sy-langu       AND as4local = 'A'       AND fieldname = wa_dd03l-fieldname.       MODIFY it_dd03l FROM wa_dd03l.     ENDIF.   ENDLOOP.   gv_tbname = p_tab. **--Display screen with the fields listed for the given table   CALL SCREEN 200 STARTING AT 10 2   ENDING AT 70 22. **--Clear all the fields selected   CLEAR : it_flds, it_flds[], gv_tbname. **--Populate the newly selected fields   it_flds[] = it_temp[]. **--Clear temporary table with the fields selected   CLEAR : it_temp, it_temp[]. ENDFORM. " SELECT_FIELDLIST *&--------------------------------------------------------------------- *& Form INITIALIZE_SCREEN *&--------------------------------------------------------------------- FORM initialize_screen.   CALL FUNCTION 'FREE_SELECTIONS_INIT'     EXPORTING       kind                     = 'T'       expressions              = gx_texpr     IMPORTING       selection_id             = gv_selid       number_of_active_fields  = gv_actnum     TABLES       tables_tab               = it_tabs       fields_tab               = it_flds     EXCEPTIONS       fields_incomplete        = 01       fields_no_join           = 02       field_not_found          = 03       no_tables                = 04       table_not_found          = 05       expression_not_supported = 06       incorrect_expression     = 07       illegal_kind             = 08       area_not_found           = 09       inconsistent_area        = 10       kind_f_no_fields_left    = 11       kind_f_no_fields         = 12       too_many_fields          = 13. ENDFORM. " INITIALIZE_SCREEN *&--------------------------------------------------------------------- *& Form SET_VALUES *&--------------------------------------------------------------------- * Set the values to the select-options *---------------------------------------------------------------------- FORM set_values.   CALL FUNCTION 'FREE_SELECTIONS_INIT'     EXPORTING       kind                     = 'T'       expressions              = gx_texpr     IMPORTING       selection_id             = gv_selid       number_of_active_fields  = gv_actnum     TABLES       tables_tab               = it_tabs       fields_tab               = it_flds     EXCEPTIONS       fields_incomplete        = 01       fields_no_join           = 02       field_not_found          = 03       no_tables                = 04       table_not_found          = 05       expression_not_supported = 06       incorrect_expression     = 07       illegal_kind             = 08       area_not_found           = 09       inconsistent_area        = 10       kind_f_no_fields_left    = 11       kind_f_no_fields         = 12       too_many_fields          = 13. ENDFORM. " SET_VALUES *&--------------------------------------------------------------------- *& Form CALL_SCREEN *&--------------------------------------------------------------------- * Call the screen to display the fields *---------------------------------------------------------------------- FORM call_screen.   DATA : wa_where LIKE LINE OF gx_twhere,          lv_txt   TYPE string.   lv_txt = 'Dynamic Selections Parameters for'(007).   CONCATENATE lv_txt p_tab   INTO gv_title SEPARATED BY space.   CALL FUNCTION 'FREE_SELECTIONS_DIALOG'     EXPORTING       selection_id            = gv_selid       title                   = gv_title       tree_visible            = ' '     IMPORTING       where_clauses           = gx_twhere       expressions             = gx_texpr       number_of_active_fields = gv_actnum     TABLES       fields_tab              = it_flds     EXCEPTIONS       internal_error          = 01       no_action               = 02       no_fields_selected      = 03       no_tables_selected      = 04       selid_not_found         = 05.   IF sy-subrc EQ 0.     REFRESH: s_where, s_selop. **--Populate the Where clause with selected values     s_where-sign = gc_i.     s_where-option = gc_eq.     CLEAR wa_where.     READ TABLE gx_twhere INDEX 1 INTO wa_where.     LOOP AT wa_where-where_tab INTO s_where-low.       APPEND s_where.     ENDLOOP. **--Populate all the fields     s_selop-sign = gc_i.     s_selop-option = gc_eq.     CLEAR : wa_flds.     LOOP AT it_flds INTO wa_flds.       s_selop-low = wa_flds-fieldname.       APPEND s_selop.     ENDLOOP.   ENDIF. ENDFORM. " CALL_SCREEN *&--------------------------------------------------------------------- *& Module STATUS_0200 OUTPUT *&--------------------------------------------------------------------- * Display screen with select-options *---------------------------------------------------------------------- MODULE status_0200 OUTPUT.   DATA: lv_txt TYPE string.   lv_txt = 'Selection Paramters List'(008).   SET PF-STATUS 'DIALOG'.   LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.   SUPPRESS DIALOG.   MOVE lv_txt TO sy-title. **--display list of fields that can be selected for creating dynamic select-options   LOOP AT it_dd03l INTO wa_dd03l.     AT FIRST.       WRITE: (60) sy-uline.     ENDAT.     READ TABLE it_flds INTO wa_flds WITH KEY fieldname = wa_dd03l-fieldname.     IF sy-subrc NE 0.       CLEAR gv_temp.     ELSE.       gv_temp = 'X'.     ENDIF.     WRITE:/ '|' ,gv_temp AS CHECKBOX.     WRITE: (20) wa_dd03l-fieldname,'|', wa_dd03l-ddtext, AT 60 '|'.     HIDE: gv_temp, wa_dd03l-fieldname, wa_dd03l-keyflag.     AT LAST.       WRITE: (60) sy-uline.     ENDAT.   ENDLOOP. ENDMODULE. " STATUS_0200 OUTPUT *&--------------------------------------------------------------------- *& Form FETCH_DATA *&--------------------------------------------------------------------- * Fetch data from table *---------------------------------------------------------------------- FORM fetch_data .   DATA: lv_where TYPE string,         lv_cnt   TYPE i. **--Check for the existance of the table   SELECT *   FROM dd03l   INTO TABLE it_fields   WHERE tabname = p_tab.   SORT it_fields BY position. **--Delete the fields starting with .INCLU   DELETE it_fields WHERE fieldname CP '.INCLU*'. **--Display the first 150 fields of the table   LOOP AT it_fields INTO wa_fields TO 150.     lv_cnt = lv_cnt + 1.     wa_cat-tabname = p_tab.     wa_cat-fieldname = wa_fields-fieldname.     wa_cat-col_pos = lv_cnt.     wa_cat-inttype = wa_fields-inttype.     wa_cat-datatype = wa_fields-datatype.     wa_cat-intlen = wa_fields-intlen.     wa_cat-seltext = wa_fields-fieldname.     wa_cat-decimals = wa_fields-decimals.     wa_cat-ref_field = wa_fields-fieldname.     wa_cat-ref_table = p_tab.     APPEND wa_cat TO it_cat.     CLEAR wa_cat.     wa_fname-fld = wa_fields-fieldname.     APPEND wa_fname TO it_fname.     CLEAR wa_fname.   ENDLOOP. **--Create a dynamic internal table with the 150 fields   CALL METHOD cl_alv_table_create=>create_dynamic_table     EXPORTING       it_fieldcatalog = it_cat     IMPORTING       ep_table        = d_ref.   ASSIGN d_ref->* TO <f_fs>. **--Populate the Where clause as a string   LOOP AT s_where.     CONCATENATE lv_where s_where-low INTO lv_where SEPARATED BY space.   ENDLOOP. **--Select the data from the table given as input and populate **--it into the dynamic internal table created based on the where condition   SELECT (it_fname)   FROM (p_tab)   INTO CORRESPONDING FIELDS OF TABLE <f_fs>   WHERE (lv_where). **--If no entries are found that satisfies the selection criteria   IF sy-subrc <> 0.     MESSAGE 'No data found' TYPE 'I'.   ENDIF. ENDFORM. " FETCH_DATA *&--------------------------------------------------------------------- *& Form DISPLAY_DATA *&--------------------------------------------------------------------- * Display data in the grid control *---------------------------------------------------------------------- FORM display_data .   IF gt_cust IS INITIAL.     CREATE OBJECT gt_cust       EXPORTING         container_name = cust.     CREATE OBJECT gt_grid       EXPORTING         i_parent = gt_cust. **--Display the data in the grid control     CALL METHOD gt_grid->set_table_for_first_display       EXPORTING         i_buffer_active               = 'X'         i_bypassing_buffer            = ' '       CHANGING         it_outtab                     = <f_fs>         it_fieldcatalog               = it_cat       EXCEPTIONS         invalid_parameter_combination = 1         program_error                 = 2         too_many_lines                = 3         OTHERS                        = 4.     IF sy-subrc <> 0.     ENDIF.   ENDIF. ENDFORM. " DISPLAY_DATA *&--------------------------------------------------------------------- *& Module DISPLAY_DATA OUTPUT *&--------------------------------------------------------------------- * Dispaly data in the output *---------------------------------------------------------------------- MODULE display_data OUTPUT.   PERFORM display_data. ENDMODULE. " DISPLAY_DATA OUTPUT *&--------------------------------------------------------------------- *& Module STATUS_0300 OUTPUT *&--------------------------------------------------------------------- * Pf-status for the screen *---------------------------------------------------------------------- MODULE status_0300 OUTPUT.   SET PF-STATUS '13317'. ENDMODULE. " STATUS_0300 OUTPUT *&--------------------------------------------------------------------- *& Module USER_COMMAND_0300 INPUT *&--------------------------------------------------------------------- * Handling the button clicks *---------------------------------------------------------------------- MODULE user_command_0300 INPUT.   CASE sy-ucomm. **--Go to the previous screen     WHEN 'BACK'.       LEAVE TO SCREEN 0. **--Come out of the program     WHEN 'EXIT'.       LEAVE PROGRAM.   ENDCASE. ENDMODULE. " USER_COMMAND_0300 INPUT

代码中用到了两个status:

1,DIALOG

如何在选择画面中创建动态的select-options

2,13317

如何在选择画面中创建动态的select-options

另外还要创建两个屏幕,200和300,

1,screen 0200

如何在选择画面中创建动态的select-options

代码:

 
1 2 3 4 PROCESS BEFORE OUTPUT. **--Set PF-STATUS MODULE STATUS_0200. PROCESS AFTER INPUT.

2,Screen 0300

如何在选择画面中创建动态的select-options

代码:

 
1 2 3 4 5 6 7 8 PROCESS BEFORE OUTPUT. **--Set PF-STATUS MODULE STATUS_0300. **--Display data using custom controller MODULE DISPLAY_DATA. PROCESS AFTER INPUT. **--Handle button clicks MODULE USER_COMMAND_0300.

 

3, 运行方法

运行如下:

输入表名后,点击options按钮选择动态select-options用到的字段,

如何在选择画面中创建动态的select-options

如何在选择画面中创建动态的select-options

然后进入下一屏,可以填入select-options的条件,也可以点击上面New field selection按钮添加或删除select-opions的字段。

如何在选择画面中创建动态的select-options

如何在选择画面中创建动态的select-options

最后,返回到初始选择画面,运行出结果,

如何在选择画面中创建动态的select-options

如何在选择画面中创建动态的select-options

以上。

 
上一篇:How to: Access the Report Parameters Object in Calculated Fields Expressions 如何:在计算字段表达式中访问报表参数对象


下一篇:flask全栈开发10 第十四章Flask-Restful