F4IF_INT_TABLE_VALUE_REQUEST

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

F4IF_INT_TABLE_VALUE_REQUEST

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo liebe Abap-Gemeinde.

Wer kennt den FuBa 'F4IF_INT_TABLE_VALUE_REQUEST'?

Mein Problem ist es, dass ich ihn verwenden kann, aber er gibt mir nur eine Spalte als Auswahl.

Der Aufruf sieht so aus:

Code: Alles auswählen.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
       EXPORTING
*   ddic_structure         = '/xxxx/txmlid'
      retfield               = 'XMLID'
*    PVALKEY                = ' '
       dynpprog               = lf_sycprog
       dynpnr                 = lf_sydynnr
       dynprofield            = 'xmlid'
*    STEPL                  = 0
*    WINDOW_TITLE           =
*    VALUE                  = ' '
         value_org              = 'S'
*    MULTIPLE_CHOICE        = ' '
*    DISPLAY                = ' '
*    CALLBACK_PROGRAM       = ' '
*    CALLBACK_FORM          = ' '
       TABLES
         value_tab              = gt_id                
*         field_tab              = lt_dfies
         return_tab             = lt_ret_tab.
gt_id hat folgenden Aufbau: (dies entspricht dem DDIC Tabellentyp: /xxxx/txmlid)

Code: Alles auswählen.

  TYPES:
        BEGIN OF typ_s_id,
             xmlid          TYPE /xxxx/xmlid,
             typ(80)        TYPE c,
        END   OF typ_s_id,
        typ_t_id            TYPE TABLE OF typ_s_id.
Das Feld 'xmlid' bekomm ich als Auswahl, ich will aber gleichzeitig den Wert der in 'typ' drin steht, mit in der Wertehilfe stehen haben...in die eigentliche Tabelle, wo F4 gedrückt wurde, soll dann nur 'xmlid' übernommen werden.

Hab das ganze schon mit dem FuBa 'DDIF_FIELDINFO_GET' versucht...aber die Ergebnistabelle bleibt leer :(
So hab ich den FuBa aufgerufen, vor dem FuBa-Aufruf von 'F4IF_INT_TABLE_VALUE_REQUEST'.

Code: Alles auswählen.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      tabname              = '/xxxx/txmlid'
*   FIELDNAME            = ' '
*   LANGU                = SY-LANGU
*   LFIELDNAME           = ' '
      all_types            = 'X'
* IMPORTING
*   X030L_WA             =
*   DDOBJTYPE            =
*   DFIES_WA             =
*   LINES_DESCR          =
    TABLES
      dfies_tab            = lt_dfies.

Wie bekomm ich 'typ' mit in der Wertehilfe angezeigt?

Thx 4 Help

Gruß
Markus

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Thomas R. (Expert / 766 / 84 / 40 ) »
Hallo Markus,
bist Du sicher, dass in TYP etwas drin steht.
Ich verwende diesen FuBa (ohne Dynpro-rückgabe) genau wie Du und habe keine Probleme, es werden alle Felder der VALUE_TAB angezeigt:

Code: Alles auswählen.

  call function 'F4IF_INT_TABLE_VALUE_REQUEST'
    exporting
      retfield        = 'TANUM'
      window_title    = 'Picking lists'(034)
      value_org       = 'S'
    tables
      value_tab       = ltab_ltak[]
      return_tab      = ltab_retvalues[]
    exceptions
      parameter_error = 1
      no_values_found = 2
      others          = 99.
MfG
Thomas R.

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo Thomas.

Ja ich bin mir sicher das in dem Tabellenfeld Typ was drinsteht.
die Tabelle 'gt_id' besteht aus 2 Komponenten "XMLID und TYP" beide Komponenten sind befüllt.


Zum Programmablauf.
Das ganze wird in einem Pflege-View ausgeführt. zum Zeitpunkt POV (Process on Value-Request) (dieser Zeitpunkt wurde von mir selbst eingefügt, da der Pflege-View natürlich generiert wurde)

Es wird ein Modul (create_F4) ausgeführt wenn auf dem Pflege-View auf dem Feld 'XMLID' die F4 TAste gedrückt wird. (Der Aufbau des Pflege-Views ist denke ich mal unrelevant...es sind auf jedenfall mehrere Felder)

Hier is mal der Code vom Modul:

Code: Alles auswählen.

MODULE create_f4 INPUT.

* Eigene Datenstruktur
*  TYPES: BEGIN OF ls_line,
*         xmlid  TYPE /xxxx/xmlid,
*          typ    TYPE /xxxx/typ,
*         END OF ls_line.

  TYPES:
        BEGIN OF typ_s_id,
             xmlid          TYPE /xxxx/xmlid,
             typ(80)        TYPE c,
        END   OF typ_s_id,
        typ_t_id            TYPE TABLE OF typ_s_id.

  DATA:
        gt_id               TYPE typ_t_id,
        gs_id               TYPE typ_s_id.

*  DATA: lt_tab       TYPE STANDARD TABLE OF ls_line.
  DATA: lt_ret_tab   TYPE STANDARD TABLE OF ddshretval,
        ls_ret_tab   LIKE LINE OF lt_ret_tab.

  DATA: lt_test    TYPE TABLE OF dynpread,
        ls_test    LIKE LINE OF lt_test.

  DATA: lf_sycprog LIKE sy-cprog,
        lf_sydynnr LIKE sy-dynnr.

* Tabelle mit exclude Werten säubern
  CLEAR gt_seltab.

* sy-cprog funktioniert hier nicht. Liegt wohl daran, da es ein FuBa ist.
  lf_sycprog = '/XXXX/SAPLVISG'.   "sy-cprog.
  lf_sydynnr = sy-dynnr.

* Hier werden die Werte, die schon auf dem Pflege-View Bild angezeigt werden
* ausgelesen und in die Tabelle lt_test geschrieben.
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname                         = lf_sycprog
      dynumb                         = lf_sydynnr
      translate_to_upper             = 'X'
      request                        = 'A'
*   PERFORM_CONVERSION_EXITS       = ' '
*   PERFORM_INPUT_CONVERSION       = ' '
*   determine_loop_index           = 'X'
    TABLES
      dynpfields                     = lt_test
EXCEPTIONS
      invalid_dynprofield            = 2
      OTHERS                         = 11
            .
  IF sy-subrc = 2.
*      MESSAGE s000 WITH 'Dynprofeld nicht vorhanden.'.
    EXIT.
  ELSEIF sy-subrc <> 0.
    MESSAGE x000 WITH 'Nicht nachvollziehbarer Fehler.'.
  ENDIF.


* Auslesen von lt_test, um schon vorhandene Werte auf dem Bildschirm in eine Range-Tabelle
* zu schreiben, damit diese Werte später aus der Wertehilfe-Tabelle entfernt werden können
  LOOP AT lt_test INTO ls_test.
    IF ls_test-fieldname = '/XXXX/VMAKP-XMLID' OR ls_test-fieldname = '/XXXX/VMAPO-XMLID'.
      IF NOT ls_test-fieldvalue IS INITIAL.
        MOVE 'E'                 TO gs_seltab-sign.
        MOVE 'EQ'                TO gs_seltab-option.
        MOVE ls_test-fieldvalue  TO gs_seltab-low.
        APPEND gs_seltab TO gt_seltab.
      ENDIF.
    ENDIF.
  ENDLOOP.

* FuBa um aus einem XML-File die ID-Kennungen zu bekommen
  CALL FUNCTION '/XXXX/VISX_GET_XMLIDS'
    EXPORTING
      if_xmltyp = 'hawa'
    IMPORTING
      et_id     = gt_id.

* Wertehilfe-Tabelle anpassen (löschen der schon vorhandenen Werte auf dem Pflegebildschirm)
  LOOP AT gt_seltab INTO gs_seltab.
    READ TABLE gt_id WITH KEY gs_seltab-low INTO gs_id.
    IF sy-subrc = 0.
      DELETE TABLE gt_id FROM gs_id.
    ENDIF.
  ENDLOOP.


* FuBa um die 'Beschreibung' einer Tabelle zu bekommen (funktioniert hier irgendwie nicht)
  DATA: lt_dfies TYPE TABLE OF dfies,
        ls_dfies TYPE dfies.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      tabname              = '/xxxx/txmlid'
*   FIELDNAME            = ' '
*   LANGU                = SY-LANGU
*   LFIELDNAME           = ' '
      all_types            = 'X'
*   GROUP_NAMES          = ' '
*   UCLEN                =
 IMPORTING
*   X030L_WA             =
*   DDOBJTYPE            =
      dfies_wa             = ls_dfies
*   LINES_DESCR          =
    TABLES
      dfies_tab            = lt_dfies
*   FIXED_VALUES         =
* EXCEPTIONS
*   NOT_FOUND            = 1
*   INTERNAL_ERROR       = 2
*   OTHERS               = 3
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* Anzeige der F4-Wertehilfe
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
       EXPORTING
*    ddic_structure         = '/xxxx/txmlid'
      retfield               = 'XMLID'
*    PVALKEY                = ' '
       dynpprog               = lf_sycprog
       dynpnr                 = lf_sydynnr
       dynprofield            = 'xmlid'
*    STEPL                  = 0
*    WINDOW_TITLE           =
*    VALUE                  = ' '
         value_org              = 'S'
*    MULTIPLE_CHOICE        = ' '
*    DISPLAY                = ' '
*    CALLBACK_PROGRAM       = ' '
*    CALLBACK_FORM          = ' '
       TABLES
         value_tab              = gt_id                           
*         field_tab              = lt_dfies
         return_tab             = lt_ret_tab.


ENDMODULE.                 " create_f4 INPUT
Es ist definitv so, dass gt_id gefüllt ist (beide Spalten)...aber bei der F4 Auswahlliste wird mir nur die Spalte XMLID angezeigt. Lt. Doku sollte eigentlich alles angezeigt werden aus der Tabelle die bei value_tab angegeben wird, aber das macht er bei mir nicht :(
Die Frage ist eben, Wieso?

Ich arbeite hier auf nem 620er System.

Gruß
Markus

Beitrag von Thomas R. (Expert / 766 / 84 / 40 ) »
Hallo Markus,
auch ich bin auf 620, von daher ist es seltsam.
Wenn Du den FuBa separat testest (SE37 oder kleines Testprogramm), klappt dann alles?

MfG
Thomas R.

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hab das ganze nun auch noch auf nem normalen Report ausprobiert. Also nen Report mit nem Dynpro, wo ein Table-Control drauf ist. Value_Tab enthält auch 2 Spalten. Wenn man die Wertehilfe holt (F4 drücken) dann werden mir auch beide Spalten angezeigt.

Per POV in der Dynpro Ablauflogik starte ich auch hier das Module für die F4 Hilfe. (Der Aufruf im 620er System ist identisch.

Code: Alles auswählen.

PROCESS ON VALUE-REQUEST.

  FIELD gs_mcdon-mcdonpr  MODULE create_f4_wertehilfe.
Quellcode des modules ist von der Grundidee identisch...nur etwas an der Logik anders, da meine Beispieldaten anders sind (dieser Report istauf einem 4.6c System)

Code: Alles auswählen.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield               = 'MCDONPR'
        dynpprog               = lf_sycprog
        dynpnr                 = lf_sydynnr
        dynprofield            = 'mcdonpr'  
        value_org              = 'S'
      TABLES
        value_tab              = lt_mcdon_tab
        return_tab             = lt_ret_tab.

Ich kann mir irgendwie nicht vorstellen das auf einem 620 der FuBa nicht mehr richtig funtioniert....wenn dieser doch auf nem 4.6c gut funktioniert.

Gruß
Markus

Beitrag von migrationshansel (ForumUser / 5 / 0 / 0 ) »
Versuchs doch mal so:

Code: Alles auswählen.


  DATA: lt_dynpfld TYPE STANDARD TABLE OF dselc,
             lf_dynpfld TYPE dselc.

  DATA: BEGIN OF lf_values,
          tabname   TYPE z_frmf-tabname,
          fieldname TYPE z_frmf-fieldname,
        END OF lf_values.
  DATA: lt_values LIKE STANDARD TABLE OF lf_values.

  lf_dynpfld-fldname   = 'F0001'.
  lf_dynpfld-dyfldname = 'Z_FRMF-TABNAME'.
  APPEND lf_dynpfld TO lt_dynpfld.
  lf_dynpfld-fldname   = 'F0002'.
  lf_dynpfld-dyfldname = 'Z_FRMF-FIELDNAME'.
  APPEND lf_dynpfld TO lt_dynpfld.

  SELECT tabname fieldname FROM z_result
    INTO CORRESPONDING FIELDS OF TABLE lt_values
    WHERE project   = z_frmf-project
    AND   tproject  = z_frmf-tproject
    AND   load_cust = gc_false.

* Tabelle für F4-Hilfe ausgeben
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'FIELDNAME'
      dynpprog        = l_repid
      dynpnr          = l_dynnr
      dynprofield     = 'Z_FRMF-FIELDNAME'
      value_org       = 'S'
    TABLES
      value_tab       = lt_values
      dynpfld_mapping = lt_dynpfld
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo migrationshansel,

ich hab deine Möglichkeit ausprobiert, aber auch das hat nix geholfen :(

Beim debuggen bin ich auf was 'abweichendes' gestossen.

Auf dem 4.6c hab ich mein Prog debugged, um genauzusein den Ablauf des FuBa 'F4IF_INT_TABLE_VALUE_REQUEST' in meinem Modul.
Das ganze gleichzeitig auf dem 620. (Im übrigen auf dem 620 ist die UNICODE Prüfung aktiv)

Im Quellcode des FuBa kommt relativ früh folgende IF-Abfrage:

Code: Alles auswählen.

IF VALUE_ORG = 'S' AND                   
   DDIC_STRUCTURE IS INITIAL AND         
   FIELD_TAB[] IS INITIAL.               
  PERFORM GET_FIELDS_OF_VALUE_TAB        
          TABLES VALUE_TAB FIELD_TAB     
          CHANGING RETFIELD.             
ENDIF.                                 


In diesem Perform (der name sagt es ja schon) sollten alle Felder der Value_Tab gefunden werden.
Nochmal zur Erinnerung, meine Value_Tab ist ja folgendermassen definiert:

Code: Alles auswählen.

Hier auf dem 620er System:
  TYPES:
        BEGIN OF typ_s_id,
             xmlid          TYPE /xxxx/xmlid,
             typ            TYPE char80s,
        END   OF typ_s_id.

  DATA:
        gt_id               TYPE STANDARD TABLE OF typ_s_id,
        gs_id               TYPE typ_s_id.

Hier auf dem 4.6c System:
  TYPES: 
        BEGIN OF ls_mcd_line,
             mcdonpr        TYPE /xxxx/mcdonpr,
             mcdontx        TYPE char80s,
         END OF ls_mcd_line.

  DATA: 
        lt_mcdon_tab        TYPE STANDARD TABLE OF ls_mcd_line.

Der einizge Unterschied, sind die Namen. Und die Datenbeschaffung. Auf dem 4.6 wird die Tabelle lt_mcdon_tab mittels Select gefüllt. Auf dem 620er, mittels eines FuBa der die zugehörigen Werte aus einer XML-Datei ausliest und in die Tabelle schreibt.

Jetzt kommts:
Der Perform fängt dann so an:

Code: Alles auswählen.

DESCRIBE FIELD VALUE_TAB HELP-ID HLP.                               
DO.                                                                 
  I = SY-INDEX.                                                     
  ASSIGN COMPONENT I OF STRUCTURE VALUE_TAB TO <F>.                 
  IF SY-SUBRC <> 0 . EXIT. ENDIF.                                   
  DESCRIBE FIELD <F> HELP-ID HLP.                                   
  SPLIT HLP AT '-' INTO TABNAME LFIELDNAME.                         
  CALL FUNCTION 'DDIF_FIELDINFO_GET'                                
       EXPORTING                                                    
            TABNAME        = TABNAME                                
            LFIELDNAME     = LFIELDNAME                             
            ALL_TYPES      = 'X'                                    
       IMPORTING                                                    
            X030L_WA       =                                        
            DDOBJTYPE      =                                        
            DFIES_WA       = DFIES_ZWI                              
       TABLES                                                       
            DFIES_TAB      = DFIES_ZWI                              
       EXCEPTIONS                                                   
            NOT_FOUND      = 1                                      
            INTERNAL_ERROR = 2                                      
            OTHERS         = 3.                                     
  CHECK SY-SUBRC = 0.                                               
  DESCRIBE DISTANCE BETWEEN VALUE_TAB AND <F> INTO DFIES_ZWI-OFFSET.
  CLEAR DFIES_ZWI-TABNAME.                                          
  N = I.                                                            
  CONCATENATE 'F' N INTO DFIES_ZWI-FIELDNAME.                       
  dfies_zwi-mask+2(1) = 'X'.
So hier beim 2ten 'DESCRIBE FIELD...', also der in der DO-Schleife, steht eigentlich immer der TYP-Name in hlp, sprich beim ersten Durchgang auf dem 4.6c ist der Wert von hlp '/xxxx/mcdonpr', beim 2ten Durchgang ist der Wert von hlp 'char80s'.
Auf dem 620er System läuft der erste Durchgang auch so...aber beim 2ten Durchgang (also die 2te Komponente der Struktur) bleibt der Inhalt leer. Somit fällt der folgende FuBa auf ne Exception und nachdem es ja kein 3tes Feld gibt, geht er komplett aus der Schleife raus und hat somit eben nur das erste Feld.
Deshalb bekomm ich in meiner Wertehilfe eben auch nur ein Feld angezeigt, obwohl meine Value_Tab 2Felder hat.
Aber wieso bekommt er kein Wert beim DESCRIBE FIELD...das konnte ich einfach nicht nachvollziehen...weiß einer von euch vllt nen Rat?

Thx

Gruß
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Tach.

Vielleicht wills ja der ein oder andere wissen :wink:

Hab das Projekt auf ein UNICODE System transferiert und musste dort den Datenbankview neugenerieren lassen. (Der code für die F4-Wertehilfe wurde nicht angefasst)

Hier gehts...der zeigt mir nun alle Felder der Value_tab in der Werteauswahl an. Unglaublich sowas. Ich glaub nicht das es am Unicode liegt...da is bestimmt irgendein Fehler beim transport gleich mal ausradiert worden 8)

Naja, also der FuBa funzt wie er soll... War wohl am alten System irgendne Macke

Gruß
Markus

Seite 1 von 1

Vergleichbare Themen

4
Antw.
5887
Views
HTTP Request
von carlie » 23.08.2019 20:28 • Verfasst in ABAP® für Anfänger
6
Antw.
13258
Views
HTTP Request
von vagans » 20.10.2011 11:11 • Verfasst in ABAP® Core
0
Antw.
3528
Views
ABAP HTTP-Request
von tohe » 05.02.2015 10:38 • Verfasst in ABAP® für Anfänger
1
Antw.
2154
Views
Releasing Request (Freigabe)
von Mustafapmk0 » 25.01.2017 13:00 • Verfasst in ABAP® für Anfänger
3
Antw.
6105
Views
PBO neu prozessieren -> aus PROCESS ON VALUE-REQUEST.
von cut1 » 24.10.2006 13:03 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Ermittlung der Arbeitstage (Mosid)
vor einer Stunde von DeathAndPain 10 / 45387
LSMW-Problem
vor einer Woche von DeathAndPain gelöst 6 / 3139
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor einer Woche von Sebastian82 gelöst 4 / 1746

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.