Kein Varianten-Admin im Splitter-Container auf Default Screen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

Kein Varianten-Admin im Splitter-Container auf Default Screen

Beitrag von tonyparzonka (ForumUser / 2 / 1 / 0 ) »
Hallo zusammen,

ich bin neu im Forum und möchte mich kurz vorstellen.
Ich bin 43 Jahre alt und bei einem mittelständigem Deutschen Unternehmen als Leiter Prozessoptimierung und zusätzlich in der Abteilung Digitalisierung beschäftigt. Seit drei Monaten erst entwickle ich in ABAP.

Nun zu meiner Frage: Ich habe ein seltsames Verhalten des ALV festgestellt, wenn dieser in einem Splitter-Container (cl_gui_splitter_container) auf dem Default-Screen ausgegeben wird. Dann ist weder der Layout-Admin (Layouts verwalten), noch die ALV-Listanzeige aufzurufen. Beide Tools erzeugen jeweils einen leeren Bildschirm.

Ich habe das Verhalten hier mal dargestellt: Variante 3 ist die, welche das seltsame Verhalten zeigt. Die anderen Varianten funktionieren. Vielleicht hat jemand eine Idee, warum das so ist, und wie man das auch ohne Custom-Container ordentlich zum Laufen bekommt?

Hier ein Testprogramm dazu.

Der verwendete Datentyp 'ZCAS_TEST' ist wie folgt definiert:
matnr type mara-matnr
ernam type mara-ernam

Zusätzlich habe ich zwei Dynpros angelegt:
9000 - leer
9001 - mit Custom-Container 'CC'

Code: Alles auswählen.

REPORT z_container_test.

* Deklarationen
DATA: ok_code             TYPE syucomm,
      lt_data             TYPE TABLE OF zcas_test,                 " Datentabelle
      ls_variant          TYPE disvariant,                         " Struktur zur Layout-Konfiguration
      lo_container        TYPE REF TO cl_gui_container,            " Containerklasse
      lo_custom_container TYPE REF TO cl_gui_custom_container,     " Custom-Container-Klasse
      lo_splitter         TYPE REF TO cl_gui_splitter_container,   " Splittercontainer-Klasse
      lo_alv              TYPE REF TO cl_gui_alv_grid,             " ALV-Klasse
      lv_variante         TYPE int1.                               " Auswahl der Container-Variante

* Select und Vorbereitung
SELECT matnr, ernam FROM mara INTO TABLE @lt_data UP TO 100 ROWS.

* Konfiguration des Layouts, damit der Layout-Admin läuft
ls_variant-username = sy-uname.
ls_variant-REPORT = sy-repid.
ls_variant-handle = 'testprogramm'.

PARAMETERS pv_var LIKE lv_variante.

START-OF-SELECTION.

* Hier die Container-Variante festlegen: Variante 3 ist die, die nicht funktioniert...
  lv_variante = pv_var. " 1,2,3 oder 4
*                         1: Default-Screen -> ALV (Layout-Admin funktioniert)
*                         2: Custom-Container -> ALV (Layout-Admin funktioniert)
* !!!!!                   3: Default-Screen -> Splitter-Container -> Container -> ALV (Layout-Admin funktioniert NICHT!!!)
*                         4: Default-Screen -> Custom-Container -> Splitter-Container -> Container -> ALV (Layout-Admin funktioniert)

  CASE lv_variante.
    WHEN 1.
      PERFORM alv_in_custom_container.
    WHEN 2.
      PERFORM alv_on_default_screen.
    WHEN 3.
      PERFORM alv_in_splitter_on_def_screen.
    WHEN 4.
      PERFORM alv_in_splitter_on_cc.
  ENDCASE.

* Unterprogramme mit den verschiedenen Varianten
FORM alv_on_default_screen. " Default-Screen -> ALV
  lo_alv = NEW #( i_parent = cl_gui_container=>default_screen ).

  lo_alv->set_table_for_first_display( EXPORTING i_structure_name = 'ZCAS_TEST'
                                                 is_variant       = ls_variant
                                                 i_save           = 'A'
                                       CHANGING  it_outtab        = lt_data
    ).

  CALL SCREEN 9000. " Screen 9000 ist vollständig leer
ENDFORM.

FORM alv_in_custom_container. " Custom-Container -> ALV
  lo_custom_container = NEW #( container_name = 'CC' ).

  lo_alv = NEW #( i_parent = lo_custom_container ).

  lo_alv->set_table_for_first_display( EXPORTING i_structure_name = 'ZCAS_TEST'
                                                 is_variant       = ls_variant
                                                 i_save           = 'A'
                                       CHANGING  it_outtab        = lt_data
    ).

  CALL SCREEN 9001. " Screen 9001 enthält einen Custom-Container
ENDFORM.

FORM alv_in_splitter_on_def_screen. " Default-Screen -> Splitter-Container -> Container -> ALV
  lo_splitter = NEW #( parent = cl_gui_container=>default_screen
      no_autodef_progid_dynnr = abap_true
      rows                    = 1
      columns                 = 2
  ).

  lo_container = lo_splitter->get_container( row = 1 column = 1 ).

  lo_alv = NEW #( i_parent = lo_container ).

  lo_alv->set_table_for_first_display( EXPORTING i_structure_name = 'ZCAS_TEST'
                                                 is_variant       = ls_variant
                                                 i_save           = 'A'
                                       CHANGING  it_outtab        = lt_data
    ).

  CALL SCREEN 9000. " Screen 9000 ist vollständig leer
ENDFORM.

FORM alv_in_splitter_on_cc. " Custom-Container -> Splitter-Container -> Container -> ALV
  lo_custom_container = NEW #( container_name = 'CC' ).

  lo_splitter = NEW #( parent = lo_custom_container
      no_autodef_progid_dynnr = abap_true
      rows                    = 1
      columns                 = 2
  ).

  lo_container = lo_splitter->get_container( row = 1 column = 1 ).

  lo_alv = NEW #( i_parent = lo_container ).

  lo_alv->set_table_for_first_display( EXPORTING i_structure_name = 'ZCAS_TEST'
                                                 is_variant       = ls_variant
                                                 i_save           = 'A'
                                       CHANGING  it_outtab        = lt_data
    ).

  CALL SCREEN 9001. " Screen 9001 enthält einen Custom-Container
ENDFORM.

* PBOs und PAIs
*&---------------------------------------------------------------------*
*&  Include           Z_CONTAINER_TEST_PBO_PAI
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'STATUS_9000'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  CASE ok_code.
  WHEN 'OK'.
  WHEN 'CANCEL'.
    LEAVE TO SCREEN 0.
  WHEN 'BACK'.
    LEAVE TO SCREEN 0.
  WHEN 'EXIT'.
    LEAVE TO SCREEN 0.
  WHEN OTHERS.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
  SET PF-STATUS 'STATUS_9001'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
  CASE ok_code.
  WHEN 'OK'.
  WHEN 'CANCEL'.
    LEAVE TO SCREEN 0.
  WHEN 'BACK'.
    LEAVE TO SCREEN 0.
  WHEN 'EXIT'.
    LEAVE TO SCREEN 0.
  WHEN OTHERS.
  ENDCASE.
ENDMODULE.
Danke im Voraus und viele Grüße an das Forum!

Tony Parzonka
Zuletzt geändert von tonyparzonka am 10.03.2023 13:54, insgesamt 1-mal geändert.

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


Re: Kein Varianten-Admin im Splitter-Container auf Default Screen

Beitrag von ewx (Top Expert / 4824 / 304 / 635 ) »
Hi Tony! Ich kann das Verhalten bestätigen. Allerdings ist mir das Verhalten noch nie aufgefallen. Warum das nicht funktioniert, kann ich nur vermuten. Meine Vermutung wäre, dass der ALV beim Absprung in die genannten Funktionen bestimmte Konstellationen berücksichtigt, aber gerade die von dir gefundene nicht erkennt.

Du kannst das Verhalten aber korrigieren, in dem du den Splitter wie folgt erzeugst:

Code: Alles auswählen.

  lo_splitter = NEW #( parent = cl_gui_container=>default_screen
      no_autodef_progid_dynnr = abap_false
      link_dynnr              = '9000'
      link_repid              = sy-cprog
      rows                    = 1
      columns                 = 2 ).

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
tonyparzonka


Re: Kein Varianten-Admin im Splitter-Container auf Default Screen

Beitrag von tonyparzonka (ForumUser / 2 / 1 / 0 ) »
Hi ewx! Vielen Dank für den Tipp! Das funktioniert so tatsächlich problemlos. :) Ich denke, es wird etliche Programme da draußen geben, bei denen das Verhalten einfach nur noch nicht aufgefallen ist.

Seite 1 von 1

Vergleichbare Themen

6
Antw.
4023
Views
SALV-Varianten - Admin-Button verstecken
von DUTZMIC » 20.02.2015 09:42 • Verfasst in ABAP Objects®
4
Antw.
2061
Views
Andruck Splitter Container
von marc.luebeck » 28.10.2014 08:13 • Verfasst in ABAP Objects®
1
Antw.
1870
Views
Container Splitter und Tabstrip
von Lukas R. » 27.01.2017 07:10 • Verfasst in ABAP® für Anfänger
6
Antw.
6043
Views
Split Container / Splitter
von dawns » 21.03.2007 14:52 • Verfasst in ABAP Objects®
1
Antw.
1686
Views
REUSE Splitter Container?
von Kleenmex » 18.06.2008 10:07 • Verfasst in ABAP Objects®

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.