Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Zeile?

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Zeile?

Beitrag von mknueppel (ForumUser / 26 / 3 / 0 ) »
Hallo Leute,

weis einer wie ich verschiedene ALV-Zellen mit verschiedenen Funktionalitäten hinterlege.
In diesem Beispiel öffnet sich bei Doppelklick in eine beliebige Zeile die dazugehörige EKAB in einem weiteren ALVG, nun ist mein Anliegen, nicht nur zeilenspezifisch sondern zellenspezifisch zu arbeiten.
Sprich das "alte" Ereignis soll nun nur bei Doppelklick auf Belegnummerzelle geschehen und das neue mit Doppelklick auf die Materialnummer...
Welche Parameter meines Fubaus sind hierfür relevant?


Code: Alles auswählen.

SELECT *
  FROM zzz_kontrakt1 INTO CORRESPONDING FIELDS OF TABLE it_ekko where ekorg in ekorg1 and ebeln in ekbel and matnr in p_matnr and lifnr in lfnr and ekgrp in ekgrup.


cALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
*    I_PROGRAM_NAME               = sy-cprog
*     I_INTERNAL_TABNAME           =
  i_structure_name             = 'ZZZ_KONTRAKT1'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_INCLNAME                   =
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
     CHANGING
       ct_fieldcat                  = lt_fc2
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
i_callback_program                =  sy-cprog
*     I_CALLBACK_PF_STATUS_SET          = ' '
     I_CALLBACK_USER_COMMAND           = 'ALV_USER_COMMAND '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
*     IS_LAYOUT                         =
   it_fieldcat                       = lt_fc2
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*    I_DEFAULT                         = ' '
i_save                            = 'A'


*   IS_VARIANT                        = 'A'
*     IT_EVENTS                         =
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
  TABLES
    t_outtab                          = it_ekko
 EXCEPTIONS
   program_error                     = 1
   OTHERS                            = 2.

IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.



*&---------------------------------------------------------------------*
*&      Form  alv_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM alv_user_command  CHANGING  r_ucomm LIKE sy-ucomm      "#EC CALLED
                                 rs_selfield TYPE slis_selfield.


clear it_ekab.

  DATA: ls_ekko LIKE LINE OF it_ekko.

  READ TABLE it_ekko INDEX rs_selfield-tabindex INTO ls_ekko.


  CASE r_ucomm.
    WHEN '&IC1'.

      SELECT * FROM ekab INTO CORRESPONDING FIELDS OF TABLE it_ekab WHERE ekab~konnr = ls_ekko-ebeln.


      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
*    I_PROGRAM_NAME               = sy-cprog
*     I_INTERNAL_TABNAME           =
      i_structure_name             = 'EKAB'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_INCLNAME                   =
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
         CHANGING
           ct_fieldcat                  = lt_fc3
        EXCEPTIONS
          inconsistent_interface       = 1
          program_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.



      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
    i_callback_program                =  sy-repid
*     I_CALLBACK_PF_STATUS_SET          = ' '
         i_callback_user_command           = 'ALV_USER_COMMAND1'
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
*     IS_LAYOUT                         =
       it_fieldcat                       = lt_fc3
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = ' '
          i_save                            = 'A'

*
*   IS_VARIANT                        = G_REPID
*     IT_EVENTS                         = gt_events[]
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
      TABLES
        t_outtab                          = it_ekab
     EXCEPTIONS
       program_error                     = 1
       OTHERS                            = 2.

      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.


    WHEN OTHERS.
      BREAK-POINT.

 endcase.

  IF rs_selfield-refresh = 'X'.
    rs_selfield-col_stable = 'X'.
    rs_selfield-row_stable = 'X'.
  ENDIF.

   endform.                "alv_user_command

*&---------------------------------------------------------------------*
*&      Form  alv_user_command1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM alv_user_command1  CHANGING  r_ucomm LIKE sy-ucomm     "#EC CALLED
                                 rs_selfield TYPE slis_selfield.

  data: ls_ekab LIKE LINE OF it_ekab.


  READ TABLE it_ekab INDEX rs_selfield-tabindex INTO ls_ekab.
* break knueppel.

  CASE r_ucomm .

    WHEN '&IC1'.
      SET PARAMETER ID 'BES' FIELD ls_ekab-ebeln.
      call TRANSACTION 'ME23N'.

  endcase.
endform.                    "alv_user_command1


FORM alv_user_command1  CHANGING  r_ucomm LIKE sy-ucomm     "#EC CALLED
                                 rs_selfield TYPE slis_selfield.

  data: ls_ekab LIKE LINE OF it_ekab.


  READ TABLE it_ekab INDEX rs_selfield-tabindex INTO ls_ekab.
* break knueppel.

  CASE r_ucomm.
    WHEN '&IC1'.
      SET PARAMETER ID 'MAT' FIELD ls_ekab-matnr.
      call TRANSACTION 'MD04'.

  endcase.
endform.

mfg

Manu

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


Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von weigo (ForumUser / 45 / 0 / 6 ) »
Hi Manu,

hättest du auf mich gehört und die OO Variante genommen, dann hätte ich dir das jetzt einfach erklären können :-)

Aber das sollte dir auch weiterhelfen:

Code: Alles auswählen.

data : GT_EVENTS TYPE SLIS_T_EVENT.

constants : C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'.


* get event
PERFORM BUILD_EVENT_TOPOFPAGE USING GT_EVENTS[].

* display alv data
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = W_xxxxx
IT_FIELDCAT = GT_xxxx
IT_EVENTS = GT_EVENTS[]
TABLES
T_OUTTAB = T_xxxx
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.


* get event perform
FORM BUILD_EVENT_TOPOFPAGE USING LT_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
*
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = LT_EVENTS.

* DOUBLE CLICK EVENT
READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE C_USER_COMMAND TO LS_EVENT-FORM.
APPEND LS_EVENT TO LT_EVENTS.
ENDIF.
ENDFORM. " BUILD_EVENT_TOPOFPAGE


* define user_command ( perform user_command -> x )
* only form user_command ........ endform -> o )

FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM
LS_SELFIELD TYPE SLIS_SELFIELD.

CASE L_UCOMM.
WHEN '&IC1'. "f2code
READ TABLE T_xxxxx INDEX LS_SELFIELD-TABINDEX.
CASE LS_SELFIELD-SEL_TAB_FIELD. "select Column
WHEN 'T_xxx-xxx'. " double click column
WHEN 'T_xxxx-xxxx'. " double click column
ENDCASE.
ENDCASE.
ENDFORM. " USER_COMMAND 
Also &#91; = [ und &#93; = ].

Der Code stammt überigens von http://www.sapfans.com/forums/viewtopic.php?t=11601.

Hoffe, das hilft dir weiter.

Viele Grüße
weigo

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo Manu,

mir scheint ich bin derjenige der für steinzeitliche Techniken zuständig ist. *lach*

In deinem Fall ist es sehr einfach. Setze mal einen Breakpoint in die Routine "alv_user_command" und schau dir dann gemütlich im Debugger das übergebene Feld "RS_SELFIELD" an. Damit solltest du dann wissen wie du vorzugehen hast und lernst weiterhin noch, dass das Feld ein paar weitere Parameter hat, die du evtl. später mal brauche könntest.



P.S. Warum hast du eigentlich die Routine "alv_user_command1" 2x im Programm definiert? Gibt das neuerdings keine Syntaxfehler mehr?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von mknueppel (ForumUser / 26 / 3 / 0 ) »
Danke @ all.

Kann mir jemand erklären warum das hier nicht funktioniert ^^ ?
Abfrage des Feldes selfield-fieldname bei ebeln do x bei matnr do y ...?

Code: Alles auswählen.

FORM alv_user_command  CHANGING  r_ucomm LIKE sy-ucomm      "#EC CALLED
                                 rs_selfield TYPE slis_selfield.


  CLEAR it_ekab.

  DATA: ls_ekko LIKE LINE OF it_ekko.

  READ TABLE it_ekko INDEX rs_selfield-tabindex INTO ls_ekko.



  CASE r_ucomm.
    WHEN '&IC1'.
      case rs_selfield-fieldname.
        when 'EBELN'.
        SELECT * FROM ekab INTO CORRESPONDING FIELDS OF TABLE it_ekab WHERE ekab~konnr = ls_ekko-ebeln.
*
        when 'MATNR'.
        SET PARAMETER ID 'MAT' FIELD ls_ekko-matnr.
        CALL TRANSACTION 'MD04'.
Habs auch mit ner if-Anweisung versucht und kläglich gescheitert...

mfg

Manu

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von mknueppel (ForumUser / 26 / 3 / 0 ) »
Habs hinbekommen, thx @ all.

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von weigo (ForumUser / 45 / 0 / 6 ) »
Hi Manu,

hast du dir das mal im Debugger angesehen?
Dann solltest du die Lösung eigentlich finden können.

Du musst einfach vergleichen, ob die Werte in rs_selfield-fieldname mit 'EBELN' bzw. 'MATNR' übereinstimmen.
Falls nicht, was der Unterschied ist.

Ob du Case oder IF nimmst, macht keinen Unterschied.
Case ist hier aber die schönere Variante.

Viele Grüße
weigo

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von mknueppel (ForumUser / 26 / 3 / 0 ) »
Hi Weigo,

Jo habe ich gemacht und gemerkt das der Programmablauf fehlerhaft war ^^. Hab es nun mit ner if gelöst, ist das schlimm?

mfg

Manu

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von weigo (ForumUser / 45 / 0 / 6 ) »
Hi Manu,

wie gesagt, IF und CASE sind sich sehr ähnlich.
Du kannst ein CASE auch mit IF und ELSEIF machen, sieht aber nicht so hübsch aus.
Wenn du nur einen Wert prüfen musst, dann kannst du den CASE vorziehen.
Brauchst du mehrere Werte als Bedingung, dann kommst du um den IF ... ELSEIF nicht herum.

Schlimm ist es aber nicht, wenn du einfach einen IF nimmst.
Kannst ja bei Gelegenheit mal den CASE ausprobieren und dann selbst entscheiden :-)

Viele Grüße
weigo

Re: Verschiedene Ereignisse (Verknüpfungen) in einer ALVG-Ze

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
weigo hat geschrieben:hättest du auf mich gehört und die OO Variante genommen, dann hätte ich dir das jetzt einfach erklären können :-)
Vielleicht erkennst du nun selber die Nachteile, wenn man zwar ein OO-Experte ist, aber mit anderen Techniken nicht so firm ist.

Seite 1 von 1

Vergleichbare Themen

6
Antw.
3752
Views
Table_control und Ereignisse
von christian123 » 05.02.2008 14:15 • Verfasst in Dialogprogrammierung
4
Antw.
3143
Views
Abap Objekt Ereignisse
von msentaburlar » 06.02.2020 14:26 • Verfasst in ABAP® für Anfänger
1
Antw.
1745
Views
events - seltsame Ereignisse
von Grayhound » 20.03.2007 14:47 • Verfasst in ABAP Objects®
5
Antw.
2438
Views
Tabellen / Datenbanken - Ansicht der Verknüpfungen?
von Nourie » 19.01.2005 15:20 • Verfasst in ABAP® für Anfänger
0
Antw.
2149
Views
Verknüpfungen zwischen Excel und BEx-Analyzer
von Creat-Dan » 21.10.2008 16:03 • Verfasst in Sonstige Module

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 3 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 17 Stunden von Bright4.5 3 / 1486

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.

Aktuelle Forenbeiträge

Regex in where
vor 3 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 17 Stunden von Bright4.5 3 / 1486

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821