Suchhilfe-Exit - Mehrfachselektion Thema ist als GELÖST markiert

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

Suchhilfe-Exit - Mehrfachselektion

Beitrag von walda33 (ForumUser / 15 / 1 / 0 ) »
Hallo liebe ABAPler,

ich habe für unsere User eine Suchhilfe angelegt, wo diese zukünftig aus unserem Qualifikationskatalog mehrere Qualifikationen auswählen können.

Leider ist es mir nicht möglich, aus dem Suchhilfe-Exit mehr als eine Qualifikationen an das Select-Option Feld zurückzugeben.
Wenn der User mehr als eine Qualifikation auswählt, wird nur immer die letzte gewählte QK in das Select-Option Feld übergeben.

Meine Coding im Suchhilfe-Exit sieht momentan wie folgt aus:

Code: Alles auswählen.

-----------------------------------------------------------------------------------------------
FUNCTION ztest.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  EXPORTING
*"     REFERENCE(ET_SHLP_TAB) TYPE  SHLP_DESCR_TAB_T
*"     REFERENCE(ET_RECORD_TAB) TYPE  DDSHRESLTS
*"  TABLES
*"      SHLP_TAB TYPE  SHLP_DESCR_TAB_T
*"      RECORD_TAB STRUCTURE  SEAHLPRES
*"  CHANGING
*"     VALUE(SHLP) TYPE  SHLP_DESCR_T
*"     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
*"----------------------------------------------------------------------

  TYPES:
    BEGIN OF ty_s_record,
      sobid TYPE sobid,
    END OF ty_s_record.

  DATA: lt_selected_objects TYPE TABLE OF hrsobid.

  FIELD-SYMBOLS: <s_lt_selected_objects> LIKE LINE OF lt_selected_objects,
                 <s_record>              TYPE ty_s_record,
                 <s_shlp_tab>            LIKE LINE OF shlp_tab,
                 <s_shlp_tab-selop>      LIKE LINE OF shlp_tab-selopt,
                 <s_et_record_tab>       LIKE LINE OF et_record_tab,
                 <s_record_tab>          LIKE LINE OF record_tab.

  IF callcontrol-step = 'SELECT'.
    callcontrol-multisel = 'X'.

**  callcontrol-sortoff = true.
*
    CALL FUNCTION 'RHPE_SHOW_QUALI_CATALOGUE'
      EXPORTING
        plvar            = '01'
        begda            = sy-datum
        endda            = '99991231'
        popup            = 'X'
        maintain         = ' '
      TABLES
        selected_objects = lt_selected_objects
      EXCEPTIONS
        no_authority     = 1
        OTHERS           = 2.

    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
*
    LOOP AT lt_selected_objects ASSIGNING <s_lt_selected_objects>.

      APPEND INITIAL LINE TO record_tab ASSIGNING <s_record> CASTING.
      <s_record>-sobid = <s_lt_selected_objects>-sobid.
    ENDLOOP.

    callcontrol-hide_list = 'X'.
    callcontrol-step = 'DISP'.

  ENDIF.
ENDFUNCTION.
----------------------------------------------------------------------------------------

Weiß evtl. einer von euch, was ich hier falsch mache bzw. was ich hier noch tun muss?

Da es die Möglichkeit einer Mehrfachselektion gibt, muss dies ja funktionieren...

Es wäre super nett, wenn mir hier jemand weiterhelfen könnte!

Vielen Dank im Voraus!

Viele Grüße,
Walda33
Zuletzt geändert von walda33 am 07.04.2021 10:43, insgesamt 1-mal geändert.


Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von walda33 (ForumUser / 15 / 1 / 0 ) »
Hallo zusammen,

hat hier keiner Erfahrungen mit einer Mehrfachselektion in einer Suchhilfe?

Vielen Dank im Voraus!

Viele Grüße,
Walda33

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von a-dead-trousers (Top Expert / 3684 / 133 / 959 ) »
hi.

Ich würde zum Befüllen des Ergebnisses erst mal den von der SAP dafür vorgesehenen Funktionsbaustein F4UT_RESULTS_MAP empfehlen.
Da ich eine Mehrfachauswahl aus einer Suchhilfe heraus für eine F4-Hilfe einer Select-Option noch nie in Aktion gesehen hätte, würde ich mal darauf tippen, dass das nicht geht. Zumindest nicht über den Standard "process on value-request" der ja nur ein einziges Feld transportieren kann.
Aber ich will es jetzt mal nicht in Abrede stellen, nur weil ich es noch nicht gesehen hätte, dass es nicht doch funktionieren kann. Als erstes würde ich daher mal versuchen, dass "multisel = 'X'" gleich beim allerersten Aufruf der Suchhilfe zu setzen und nicht erst im "SELECT" Step.

Der "traditionelle" Weg, wäre die F4-Hilfe im jeweiligen Programm/Report im Event "ON VALUE-REQUEST FOR ..." ohne Verwendung einer Suchhilfe umzusetzen. Da kann man dann auch mehr als nur eine Zeile in die Select-option einfügen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von a-dead-trousers (Top Expert / 3684 / 133 / 959 ) »
Habs gerade selbst noch versucht und es funktioniert über Suchhilfen definitiv nicht.
Der Grund ist eigentlich auch schnell erklärt:
Die Suchhilfen sind, wie gesagt, für POV ausgelegt. Daher wird in der Schnittstelle (SHLP-INTERFACE) auch nur der Feldname auf dem Dynpro übergeben. Somit kennt der Suchhilfe-Prozessor auch nicht die darunterliegende Datenstruktur um dort die weiteren Datenzeilen reinschreiben zu können. Im Falle einer Select-Option mit Namen TEST wäre das die interne Tabelle TEST[] und nur weil die beiden annähernd gleich heißen kann der Suchhilfe-Prozessor trotzdem nicht darauf zugreifen, weil anhand des Namens nicht gewährleistet werden kann, ob es sich nun um eine Tabelle oder um ein flaches Feld handelt. (Dass zusätzlich noch der Programmname für ein Dirty-Assign fehlt, lass ich mal so im Raum stehen)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von walda33 (ForumUser / 15 / 1 / 0 ) »
a-dead-trousers hat geschrieben:
07.04.2021 11:08
Der "traditionelle" Weg, wäre die F4-Hilfe im jeweiligen Programm/Report im Event "ON VALUE-REQUEST FOR ..." ohne Verwendung einer Suchhilfe umzusetzen. Da kann man dann auch mehr als nur eine Zeile in die Select-option einfügen.
Hallo!

Vielen Dank für die schnelle Antwort.
Nun bin ich von Lösung mit der F4-Hilfe weg, allerdings schaffe ich es nicht, im Event "ON
Value-Request" mehr als eine Zeile zu übergeben:

Code: Alles auswählen.

********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_sobid-low.

  CALL FUNCTION 'F4_FIELD_ON_VALUE_REQUEST'
    EXPORTING
      tabname           = 'ZTEST'
      dynprofield       = 'S_SOBID'
      multiple_choice   = 'X'
      selection_screen  = 'X'
    TABLES
      return_tab        = lt_return_tab
    EXCEPTIONS
      field_not_found   = 1
      no_help_for_field = 2
      inconsistent_help = 3
      no_values_found   = 4
      OTHERS            = 5.

  IF sy-subrc = 0.

    DATA updatevalues TYPE STANDARD TABLE OF rsselread.

    FIELD-SYMBOLS: <s_updatevalues> LIKE LINE OF updatevalues.

    LOOP AT lt_return_tab ASSIGNING <s_lt_return_tab>.

      APPEND INITIAL LINE TO updatevalues ASSIGNING <s_updatevalues>.
      <s_updatevalues>-name = 'S_SOBID'.
*      IF sy-tabix = '1'.
        <s_updatevalues>-position = 'LOW'.
*      ELSE.
*        <s_updatevalues>-position = 'HIGH'.
*      ENDIF.
      <s_updatevalues>-fieldvalue = <s_lt_return_tab>-fieldval.
      <s_updatevalues>-kind = 'S'.

    ENDLOOP.
*
*
********Funktioniert nur mit LOW und HIGH
    CALL FUNCTION 'RS_SELECTIONSCREEN_UPDATE'
      EXPORTING
        program      = sy-repid
        dynnr        = sy-dynnr
      TABLES
        updatevalues = updatevalues
* EXCEPTIONS
*       NO_HIGH_FIELD       = 1
*       OTHERS       = 2
      .
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    ENDIF.
********************************************************************
In der internen Tabelle lt_return_tab sind alle Qualifikationen erhalten, die der User ausgewählt hat.
Wenn ich diese Einträge in die interne Tabelle updatevalues übergebe, dann bekomme ich nur immer den letzten ausgewählten Eintrag ins Select-Options Feld übergeben...

Was mache ich hier falsch?
Musss ich hier einen anderen FuBa als 'RS_SELECTIONSCREEN_UPDATE' nutzen?

Vielen Dank im Voraus!

Viele Grüße,
Walda33

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von a-dead-trousers (Top Expert / 3684 / 133 / 959 ) »
Du musst die zusätzlichen Zeilen aus deinem LT_RETURN_TAB in deine Select-option S_SOBID einfügen.
Mit RS_SELECTIONSCREEN_UPDATE werden nur die Werte im Selectionsbild (Dynpro) geändert und die werden erst mit einem PAI/PBO zurück in die Select-Option übertragen.

In deinem Fall würde ich en Aufruf so gestallten:
1) Ist S_SOBID leer?
2) Alle Zeilen aus LT_RETURN_TAB an die S_SOBID anhängen.
3) War S_SOBID zuvor leer, Aufruf von RS_SELECTIONSCREEN_UPDATE mit den Informationen aus der ersten Zeile von S_SOBID.

Was du noch genauer durchdenken musst ist, wie das Verhalten von LOW zu HIGH sein soll. Wird die Mehrfachauswahl bei HIGH an die vorhandenen Zeilen von LOW angehängt? Ist bei HIGH die Mehrfachauswahl deaktiviert?
Dafür gibt es meines Erachtens kein Best-Practise und muss mit den Anwendern geklärt werden wie die Erwartungshaltung ist. Dann ist da auch noch die Frage wie sich das Ganze verhalten soll wenn der Aufruf über den Mehrfachselektionsdialog erfolgt.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von ewx (Top Expert / 4391 / 216 / 486 ) »
So ein Verhalten gibt es im SAP-Standard nicht und ist auch nicht vorgesehen.
Um eine Mehrfachauswahl einfach und ohne große Umwege zu realisieren, kannst du die Suchhilfe "anpinnen". Dann bleibt das Fenster mit den Ergebnissen aus der Suchhilfe stehen, nachdem ein Wert ausgewählt wurde. du kannst dann in das nächste Eingabefeld springen und den nächsten Wert per Doppelklick auswählen.

Wenn nicht täglich hunderte von Mitarbeitenden dieses Verhalten täglich in einer wichtigen Transaktion nutzen, dann würde ich keine Minute Entwicklung in so eine Sonderlösung investieren.

Zudem gibt es auch die Möglichkeit, sich häufig genutzte Werte per Variante abzuspeichern und wieder zu laden.

Da du aber bereits die Mehrfachsuchhilfe gebaut hast, wäre mein Vorschlag, dass du analog zu dem "Aus der Zwischenablage Einfügen"-Drucktaste eine eigene Funktion "Mehrfachauswahl" einbaust, in der du direkt die Ergebnisse deiner Suchhilfe in die Select-Options übernimmst. Ansonsten hast du IMHO keine Chance, das Verhalten in die Standardfunktionalität zu übernehmen.

adt hat zwar generell einen Vorschlag gemacht, der jedoch nur funktioniert, wenn du direkt im Selektionsbild auf F4 einer Select-Option klickst. Die Select-Options haben aber auch noch die Mehrfachauswahl (also Klick auf den Button rechts neben LOW und HIGH). Da sollte es dann ja auch funktionieren...

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von walda33 (ForumUser / 15 / 1 / 0 ) »
a-dead-trousers hat geschrieben:
19.04.2021 09:30
Du musst die zusätzlichen Zeilen aus deinem LT_RETURN_TAB in deine Select-option S_SOBID einfügen.
Mit RS_SELECTIONSCREEN_UPDATE werden nur die Werte im Selectionsbild (Dynpro) geändert und die werden erst mit einem PAI/PBO zurück in die Select-Option übertragen.

In deinem Fall würde ich en Aufruf so gestallten:
1) Ist S_SOBID leer?
2) Alle Zeilen aus LT_RETURN_TAB an die S_SOBID anhängen.
3) War S_SOBID zuvor leer, Aufruf von RS_SELECTIONSCREEN_UPDATE mit den Informationen aus der ersten Zeile von S_SOBID.

Was du noch genauer durchdenken musst ist, wie das Verhalten von LOW zu HIGH sein soll. Wird die Mehrfachauswahl bei HIGH an die vorhandenen Zeilen von LOW angehängt? Ist bei HIGH die Mehrfachauswahl deaktiviert?
Dafür gibt es meines Erachtens kein Best-Practise und muss mit den Anwendern geklärt werden wie die Erwartungshaltung ist. Dann ist da auch noch die Frage wie sich das Ganze verhalten soll wenn der Aufruf über den Mehrfachselektionsdialog erfolgt.
Guten Morgen zusammen,

vielen Dank für die Rückmeldung!

Nun habe ich noch ein Problem:
Wenn ich mehr als eine Qualifikation auswähle, wird die erste gewählte ID mit der letzten gewählten ID auf den Selection-Screen überschrieben...

Beispiel Auswahl:
1. 001
2. 002
3. 003

Ausgabe:
1. 003 <--- Fehler
2. 002
3. 003

Code: Alles auswählen.

**********************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_sobid-low.

  TYPES: BEGIN OF ty_sobid,
           sobid TYPE sobid,
         END OF ty_sobid.

  DATA: lt_return_tab TYPE STANDARD TABLE OF ddshretval,
        lt_field_tab  TYPE TABLE OF dfies.
  DATA: lt_sobid TYPE TABLE OF ty_sobid.
  FIELD-SYMBOLS: <s_sobid>         LIKE LINE OF s_sobid,
                 <s_lt_sobid>      LIKE LINE OF lt_sobid,
                 <s_lt_return_tab> LIKE LINE OF lt_return_tab,
                 <s_lt_field_tab>  LIKE LINE OF lt_field_tab.

  CALL FUNCTION 'F4_FIELD_ON_VALUE_REQUEST'
    EXPORTING
      tabname           = 'ZTEST'
      dynprofield       = 'S_SOBID'
      multiple_choice   = 'X'
      selection_screen  = 'X'
    TABLES
      return_tab        = lt_return_tab
    EXCEPTIONS
      field_not_found   = 1
      no_help_for_field = 2
      inconsistent_help = 3
      no_values_found   = 4
      OTHERS            = 5.

  IF sy-subrc = 0.

    DATA: updatevalues      TYPE STANDARD TABLE OF rsselread,
          ls_sobid          LIKE LINE OF s_sobid,
          s_sobid_not_clear TYPE xfeld.

    FIELD-SYMBOLS: <s_updatevalues> LIKE LINE OF updatevalues.

    LOOP AT lt_return_tab ASSIGNING <s_lt_return_tab>.

      APPEND INITIAL LINE TO updatevalues ASSIGNING <s_updatevalues>.
      <s_updatevalues>-name = 'S_SOBID'.
      <s_updatevalues>-position = 'LOW'.
      <s_updatevalues>-fieldvalue = <s_lt_return_tab>-fieldval.
      <s_updatevalues>-kind = 'S'.

      IF s_sobid IS INITIAL.
        CLEAR ls_sobid.
        ls_sobid-sign = 'I'.
        ls_sobid-option = 'EQ'.
        ls_sobid-low = <s_lt_return_tab>-fieldval.
        APPEND ls_sobid TO s_sobid.
      ELSE.
        s_sobid_not_clear = 'X'.
      ENDIF.
    ENDLOOP.

    IF s_sobid_not_clear IS INITIAL.
*********Funktioniert nur mit LOW und HIGH
      CALL FUNCTION 'RS_SELECTIONSCREEN_UPDATE'
        EXPORTING
          program      = sy-repid
          dynnr        = sy-dynnr
        TABLES
          updatevalues = updatevalues
* EXCEPTIONS
*         NO_HIGH_FIELD       = 1
*         OTHERS       = 2
        .
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.
    ENDIF.

  ENDIF.
**********************************************************
An was kann dies liegen?
Die Einträge im Select-Option Feld stimmen, allerdings werden sie dann auf dem Selection-Screen falsch dargestellt --> siehe obiges Beispiel...

Vielen Dank im Voraus!

Viele Grüße,
Walda33

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von a-dead-trousers (Top Expert / 3684 / 133 / 959 ) »
Bitte verwende in Zukunft die CODE-Tags im Forum.

Zu deinem Problem:
Du darfst nur die ERSTE Zeile aus S_SOBID in deine "updatevalues" reinschreiben und nicht JEDE Zeile in deinem LOOP.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
walda33

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Suchhilfe-Exit - Mehrfachselektion

Beitrag von walda33 (ForumUser / 15 / 1 / 0 ) »
Hallo,

sorry, kannte die CODE-Tags noch nicht.
Werde ich in Zukunft nutzen!

Vielen Dank für die Hilfe, dein Lösungsvorschlag funktioniert einwandfrei!

Seite 1 von 1

Vergleichbare Themen

Suchhilfe mit Mehrfachselektion im Dynpro
von Embryo » 07.08.2013 07:40
Suchhilfe-Exit VA3*
von MKA » 21.07.2015 14:44
Suchhilfe-Exit
von cut1 » 19.09.2006 14:58
Suchhilfe-Exit
von Jurko » 11.08.2005 15:02