Initialisieren einer Select-Option mit DYNP_VALUES_UPDATE

Benutzeroberflächen in SAP Systemen.

Initialisieren einer Select-Option mit DYNP_VALUES_UPDATE

Postby Ursula4506 » Thu Jan 29, 2009 3:43 pm

Hallo Zusammen,

Problem gelöst, Fehler war, dass ich den DYNP_VALUES_UPDATE zweimal aufgerufen habe, statt gemeinsam für P_ATTR01 und S_VALU01


ich bin gerade am verzweifeln, vielleicht hat jemand eine Idee:
- Auf einem Selektionsbild habe ich einen Parameter P_ATTR01 und eine Select-Option S_VALU01.
- P_ATTR01 kann nur über eine Werthilfe ausgewählt werden.
- Wenn sich P_ATTR01 ändert, soll S_VALU01 initialisiert werden.

Hier mein Coding (Beispiel):
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *&---------------------------------------------------------------------*
  2. *& Report  Z_TEST_SELOPT
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  z_test_selopt.
  10.   BEGIN OF ty_selection_s,
  11.     atnam TYPE atnam,
  12.     atwrt TYPE atwrt,
  13.   END   OF ty_selection_s,
  14.   BEGIN OF ty_f4_attr_s,
  15.     atinn TYPE atinn,
  16.     atnam TYPE atnam,
  17.     atbez TYPE atbez,
  18.   END   OF ty_f4_attr_s,
  19.   tty_f4_attr TYPE STANDARD TABLE OF ty_f4_attr_s,
  20.   ty_range_atwrt        TYPE RANGE OF atwrt.
  21.  
  22.   gv_prog                 TYPE sy-cprog,
  23.   gv_dynnr                TYPE sy-dynnr,
  24.   gs_selection            TYPE ty_selection_s.
  25.  
  26. PARAMETERS: p_attr01 TYPE atnam MODIF ID att.
  27. SELECT-OPTIONS: s_valu01   FOR gs_selection-atwrt MODIF ID a01.
  28.  
  29.   gv_prog  = sy-cprog.
  30.   gv_dynnr = sy-dynnr.
  31.  
  32.  
  33. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_attr01.
  34.   PERFORM f4_attr USING '1'
  35.                         gv_prog
  36.                         gv_dynnr.
  37.  
  38. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_valu01-low.
  39.   PERFORM f4_valu CHANGING s_valu01[].
  40.  
  41. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_valu01-high.
  42.   PERFORM f4_valu CHANGING s_valu01[].
  43.  
  44. AT SELECTION-SCREEN OUTPUT.
  45.   LOOP AT SCREEN.
  46.     CASE screen-group1.
  47.       WHEN 'ATT'.
  48.         screen-input = 0.
  49.     ENDCASE.
  50.     MODIFY SCREEN.
  51.  
  52.  
  53.  
  54. *&---------------------------------------------------------------------*
  55. *&      Form  f4_attr
  56. *&---------------------------------------------------------------------*
  57. *       text
  58. *----------------------------------------------------------------------*
  59. *      -->P_INDEX    text
  60. *      -->P_PROG     text
  61. *      -->P_DYNNR    text
  62. *----------------------------------------------------------------------*
  63. FORM f4_attr  USING    p_index
  64.                        p_prog
  65.                        p_dynnr.
  66.   DATA:
  67.     lv_num                TYPE num02,
  68.     lv_attr               TYPE dynfnam,
  69.     lv_comm               TYPE dynfnam,
  70.     lv_old_value          TYPE dynfieldvalue,
  71.     lt_values             TYPE STANDARD TABLE OF M_MERKB,
  72.     ls_value              LIKE LINE OF lt_values,
  73.     lt_return             TYPE rsdm_f4_return_values,
  74.     ls_return             LIKE LINE OF lt_return,
  75.     lt_help_values        TYPE wrf_fields,
  76.     ls_help_value         TYPE help_value,
  77.     lt_mapping            TYPE icl_dselc_t,
  78.     ls_mapping            LIKE LINE OF lt_mapping,
  79.     lt_dynpfields         TYPE dynpread_tabtype,
  80.     ls_dynpfield          LIKE LINE OF lt_dynpfields.
  81.  
  82.   lv_num = p_index.
  83.   CONCATENATE 'P_ATTR' lv_num INTO lv_attr.
  84.   CONCATENATE 'COMM'   lv_num INTO lv_comm.
  85.  
  86.   ls_dynpfield-fieldname  = lv_attr.
  87.   APPEND ls_dynpfield TO lt_dynpfields.
  88.  
  89.   CALL FUNCTION 'DYNP_VALUES_READ'
  90.     EXPORTING
  91.       dyname     = p_prog
  92.       dynumb     = p_dynnr
  93.     TABLES
  94.       dynpfields = lt_dynpfields.
  95.  
  96.   READ TABLE lt_dynpfields INTO ls_dynpfield INDEX 1.
  97.   lv_old_value = ls_dynpfield-fieldvalue.
  98.  
  99.   ls_value-atnam  = 'ATNAM01'.
  100.   ls_value-atbez  = 'ATBEZ01'.
  101.   APPEND ls_value TO lt_values.
  102.   ls_value-atnam  = 'ATNAM02'.
  103.   ls_value-atbez  = 'ATBEZ02'.
  104.   APPEND ls_value TO lt_values.
  105.   ls_value-atnam  = 'ATNAM03'.
  106.   ls_value-atbez  = 'ATBEZ03'.
  107.   APPEND ls_value TO lt_values.
  108.  
  109.   ls_mapping-fldname = 'ATBEZ'.
  110.   ls_mapping-dyfldname = lv_comm.
  111.   APPEND ls_mapping TO lt_mapping.
  112.  
  113.   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  114.     EXPORTING
  115.       ddic_structure         = 'M_MERKB'
  116.       retfield               = 'ATNAM'
  117.       dynpprog               = p_prog
  118.       dynpnr                 = p_dynnr
  119.       dynprofield            = lv_attr
  120.       value_org              = 'S'
  121.       display                = 'F'
  122. *     CALLBACK_PROGRAM       = ' '
  123. *     CALLBACK_FORM          = ' '
  124. *     MARK_TAB               = MARK_TAB
  125. *   IMPORTING
  126. *     USER_RESET             = USER_RESET
  127.     TABLES
  128.       value_tab              = lt_values
  129. *      field_tab              = lt_help_values
  130.       return_tab             = lt_return
  131.       dynpfld_mapping        = lt_mapping.
  132.  
  133.   IF lt_return IS NOT INITIAL.
  134.     CLEAR:
  135.       ls_dynpfield,
  136.       lt_dynpfields.
  137.     LOOP AT lt_return INTO ls_return WHERE fieldname = 'ATNAM'.
  138.       ls_dynpfield-fieldname  = ls_return-retfield.
  139.       ls_dynpfield-fieldvalue = ls_return-fieldval.
  140.       APPEND ls_dynpfield TO lt_dynpfields.
  141.     ENDLOOP.
  142.  
  143.     IF ls_dynpfield-fieldvalue <> lv_old_value.
  144.       PERFORM clear_s_valu USING p_index
  145.                                  p_prog
  146.                                  p_dynnr.
  147.     ENDIF.
  148.  
  149.     CALL FUNCTION 'DYNP_VALUES_UPDATE'
  150.       EXPORTING
  151.         dyname     = p_prog
  152.         dynumb     = p_dynnr
  153.       TABLES
  154.         dynpfields = lt_dynpfields.
  155.   ENDIF.
  156.  
  157. ENDFORM.                                                    " F4_ATTR
  158. *&---------------------------------------------------------------------*
  159. *&      Form  CLEAR_S_VALU
  160. *&---------------------------------------------------------------------*
  161. *       text
  162. *----------------------------------------------------------------------*
  163. *      -->P_P_INDEX  text
  164. *----------------------------------------------------------------------*
  165. FORM clear_s_valu  USING    p_index TYPE sy-tabix
  166.                             p_prog  LIKE gv_prog
  167.                             p_dynnr LIKE gv_dynnr.
  168.  
  169.   DATA:
  170.     lv_num                TYPE num02,
  171.     lv_idx                TYPE num4,
  172.     lv_s_valu             TYPE string,
  173.     lt_dynpfields         TYPE dynpread_tabtype,
  174.     ls_dynpfield          LIKE LINE OF lt_dynpfields.
  175.  
  176.     <s_valu>              TYPE ty_range_atwrt,
  177.     <s_valu_line>         LIKE LINE OF <s_valu>.
  178. *----------------------------------------------------------------------*
  179. * assigning the corresponding select-option to field-symbol &#40;body&#41;
  180. *----------------------------------------------------------------------*
  181.   lv_num = p_index.
  182.   CONCATENATE 'S_VALU' lv_num '[]' INTO lv_s_valu.
  183.   ASSIGN &#40;lv_s_valu&#41; TO <s_valu>.
  184.  
  185. *----------------------------------------------------------------------*
  186. * each filled line of select-option has to be cleared
  187. *----------------------------------------------------------------------*
  188.   LOOP AT <s_valu> ASSIGNING <s_valu_line>.
  189.     lv_idx = sy-tabix.
  190.     CLEAR:
  191.       ls_dynpfield,
  192.       lt_dynpfields.
  193.  
  194.     CONCATENATE 'S_VALU' lv_num '[' lv_idx ']-SIGN' INTO lv_s_valu.
  195.     ls_dynpfield-fieldname  = lv_s_valu.
  196.     ls_dynpfield-fieldvalue = space.
  197.     APPEND ls_dynpfield TO lt_dynpfields.
  198.     CONCATENATE 'S_VALU' lv_num '[' lv_idx ']-OPTION' INTO lv_s_valu.
  199.     ls_dynpfield-fieldname  = lv_s_valu.
  200.     ls_dynpfield-fieldvalue = space.
  201.     APPEND ls_dynpfield TO lt_dynpfields.
  202.     CONCATENATE 'S_VALU' lv_num '[' lv_idx ']-LOW' INTO lv_s_valu.
  203.     ls_dynpfield-fieldname  = lv_s_valu.
  204.     ls_dynpfield-fieldvalue = space.
  205.     APPEND ls_dynpfield TO lt_dynpfields.
  206.     CONCATENATE 'S_VALU' lv_num '[' lv_idx ']-HIGH' INTO lv_s_valu.
  207.     ls_dynpfield-fieldname  = lv_s_valu.
  208.     ls_dynpfield-fieldvalue = space.
  209.     APPEND ls_dynpfield TO lt_dynpfields.
  210.  
  211.  
  212. *----------------------------------------------------------------------*
  213. * header line of select-option has to be cleared
  214. *----------------------------------------------------------------------*
  215.     CONCATENATE 'S_VALU' lv_num '-SIGN' INTO lv_s_valu.
  216.     ls_dynpfield-fieldname  = lv_s_valu.
  217.     ls_dynpfield-fieldvalue = space.
  218.     APPEND ls_dynpfield TO lt_dynpfields.
  219.     CONCATENATE 'S_VALU' lv_num '-OPTION' INTO lv_s_valu.
  220.     ls_dynpfield-fieldname  = lv_s_valu.
  221.     ls_dynpfield-fieldvalue = space.
  222.     APPEND ls_dynpfield TO lt_dynpfields.
  223.     CONCATENATE 'S_VALU' lv_num '-LOW' INTO lv_s_valu.
  224.     ls_dynpfield-fieldname  = lv_s_valu.
  225.     ls_dynpfield-fieldvalue = space.
  226.     APPEND ls_dynpfield TO lt_dynpfields.
  227.     CONCATENATE 'S_VALU' lv_num '-HIGH' INTO lv_s_valu.
  228.     ls_dynpfield-fieldname  = lv_s_valu.
  229.     ls_dynpfield-fieldvalue = space.
  230.     APPEND ls_dynpfield TO lt_dynpfields.
  231.  
  232. *----------------------------------------------------------------------*
  233. * clear dynpro data of select-option
  234. *----------------------------------------------------------------------*
  235.   CALL FUNCTION 'DYNP_VALUES_UPDATE'
  236.     EXPORTING
  237.       dyname     = p_prog
  238.       dynumb     = p_dynnr
  239.     TABLES
  240.       dynpfields = lt_dynpfields.
  241.  
  242.  
  243. *  CLEAR:
  244. *    ls_dynpfield,
  245. *    lt_dynpfields.
  246. *  ls_dynpfield-fieldname  = 'RSCSEL-SLOW_I'.
  247. *  ls_dynpfield-stepl      = '1'.
  248. *  ls_dynpfield-fieldvalue = space.
  249. *  APPEND ls_dynpfield TO lt_dynpfields.
  250. *
  251. *  CALL FUNCTION 'DYNP_VALUES_UPDATE'
  252. *    EXPORTING
  253. *      dyname     = 'SAPLALDB'
  254. *      dynumb     = '3010'
  255. *    TABLES
  256. *      dynpfields = lt_dynpfields.
  257.  
  258. *----------------------------------------------------------------------*
  259. * clear program data &#40;body and header&#41; of select-option
  260. *----------------------------------------------------------------------*
  261.   CONCATENATE 'S_VALU' lv_num INTO lv_s_valu.
  262.   ASSIGN &#40;lv_s_valu&#41; TO <s_valu_line>.
  263.   CLEAR:
  264.     <s_valu>,
  265.     <s_valu_line>.
  266.  
  267.  
  268. ENDFORM.                    " CLEAR_S_VALU
  269. *&---------------------------------------------------------------------*
  270. *&      Form  f4_valu
  271. *&---------------------------------------------------------------------*
  272. *       text
  273. *----------------------------------------------------------------------*
  274. *      -->S_VALU     text
  275. *----------------------------------------------------------------------*
  276. FORM f4_valu  CHANGING s_valu TYPE ty_range_atwrt.
  277. *  PERFORM dynp_values_read.
  278. ENDFORM.                                                    " F4_VALU
  279.  
GeSHi ©



Das Programm sollte bei euch lauffähig sein, wer sich die Mühe machen möchte :lol:

Ich habe mir eine Variante angelegt mit P_ATTR01 = 'ATNAM01'
und S_VALU01 mit 4 Werten A B C und D.

Wenn ich P_ATTR01 über die Werthilfe wechsle, bleibt leider immer Wert A in S_VALU01 stehen.

Vielleicht sehe ich mittlerweile den Wald vor lauter Bäumen nicht mehr :?
Hat jemand eine Idee?

Gruß

Frank
Ursula4506
...
...
 
Posts: 286
Joined: Fri Apr 15, 2005 8:40 am

Postby Vanessa2987 » Fri Sep 18, 2009 12:31 pm

Die Anfrage ist zwar schon etwas lange her - da ich aber ein ähnliches Problem gerade selber mit Hilfe des Forums gelöst habe sein hier auf den Beitrag von ereglam (Befehl SUPPRESS DIALOG) hier verwiesen:

http://bb1.gate2app.com/viewtopic.php?t=13144

Der Befehl führt (wenn in at selection screen on value request eingesetzt) zu einem erneuten PBO - da kann man dann eigentlich alles so setzen wie man es aufgrund der Eingabe in der Wertehilfe möchte.
Vanessa2987
..
..
 
Posts: 44
Joined: Tue Feb 05, 2008 1:16 pm


Return to Dialogprogrammierung

Who is online

Users browsing this forum: No registered users and 15 guests