Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
erp-bt
Ja, das ist es.erp-bt hat geschrieben:Habe gerade ein Dokument gefunden gefunden. Ist es das?
http://ajanzen.com/pdf_dokumente/sap_ab ... litter.pdf
Demoprogramm auch gefunden: DEMO_DYNPRO_SPLITTER_CONTROL
Wenn du das Resizing zwischen den Bereichen durch den User nicht brauchst, kannst du den Dynpro-Splitter klarerweise auch weglassen.erp-bt hat geschrieben:Wäre es evtl. auch eine Alternative das Dynpro in drei Subscreen-Bereiche aufzuteilen und dem jeweiligen Subscreen einen Control zuzuweisen? Subscreens lassen sich ja recht einfach austauschen auf dem Dynpro. Man müsste dann für die unterschiedlichen Control die in der rechten oberen Spalte erscheinen sollen, jeweils einen eigenen Subscreen definieren?!? Wäre das machbar? Wäre ja wahrscheinlich so ähnlich wie die Variante 2.
Geht beides. Ist halt eine Geschmacksfrage ob man alles mit Dynpro-Technologie abbildet, auf CFW-Mittel zurückgreift oder eine "Mischform" verwendet.erp-bt hat geschrieben:Jetzt stellt sich für mich nur noch die Frage, ob man ein Subscreen auch mit dem Dynpro-Splitter aufteilen kann, oder ob man dann da vielleicht besser mit einem Docking-Container arbeitet?
Da Du nicht schreibst, welche Controls genau Du verwenden willst und was Du damit genau vorhast, werfe ich einfach mal "Dynamic Documents" in den Raum.erp-bt hat geschrieben:Hallo zusammen,
ich habe momentan einen Custom-Container der in 3 Bereiche aufgeteilt ist. Eine linke Spalte, in der ein Tree abgebildet wird. Eine rechte Spalte, die wiederum in einen oberen und unteren Teil aufgteilt ist. Also insgesamt 3 Bereiche (Container).
Der Tree auf der linken Spalte kann nun unterschiedliche Knoten haben. Je nach dem welchen Knotentyp ich markiere möchte ich nun im oberen Container der rechten Spalte ein anderes GUI-Control aufrufen.
Ist sowas grundsätzlich möglich oder verrenne ich mich da gerade im Design? Wie würdet Ihr sowas abbilden? Mich würde da mal eure Erfahrungen so interessieren.
Vielen Dank und Grüße,
Schon mal was produktiv damit gemacht? Mit HTML kenne ich mich gar nicht aus, aber es sieht ja so aus als ob HTML nur im Hintergrund durch die jeweiligen Klassen generiert wird. Ist es vom Handling her aufwendig die unterschiedlichen Dokumente zu erzeugen? Kannst Du da was zu sagen?Unit605 hat geschrieben: Da Du nicht schreibst, welche Controls genau Du verwenden willst und was Du damit genau vorhast, werfe ich einfach mal "Dynamic Documents" in den Raum.
http://help.sap.com/saphelp_erp60_sp/he ... &node_id=3
Auch hier ware die Frage ob Du das schon mal produktiv genutzt hast? Wäre hier nicht auch das Problem mit den Events das a-dead-trousers weiter oben beschrieben hat, also das diese immmer am Parent_Container registriert sind?black_adept hat geschrieben: So weit ich weiß ist das Austauschen von Controls im Container im Allgemeinen ( speziell evtl. schon? ) nicht möglich - aber es ist möglich in einen Container mehrere Controls einzuhängen. Aber es wird nur das oberste(zuerst eingehängte) Control angezeigt.
ABER - Wenn man das oberst/erste Control "unsichtbar" macht - und die meisten Controls haben eine Set_Visible-Methode- kann man somit auch weiter hinten liegende Controls zur Anzeige bringen.
Das entspricht dann zwar keinem Austausch von Controls - aber der User wird das so empfinden, wenn einfach das aktuell darzustellende Control als einziges auf Visible steht.
Code: Alles auswählen.
REPORT.
*----------------------------------------------------------------------*
* CLASS lcl_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: handle_text_dblclick FOR EVENT dblclick OF cl_gui_textedit, " importing ... ist aber zur Demo egal
handle_grid_double_click FOR EVENT double_click OF cl_gui_alv_grid.
ENDCLASS. "lcl_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handler IMPLEMENTATION.
METHOD handle_text_dblclick.
*PAI triggern
cl_gui_cfw=>set_new_ok_code( EXPORTING new_code = 'Doubleclick in Textedit' ).
ENDMETHOD. "handle_text_DBLCLICK
METHOD handle_grid_double_click.
cl_gui_cfw=>set_new_ok_code( EXPORTING new_code = 'Doubleclick in Grid' ).
ENDMETHOD. "handle_grid_DOUBLE_CLICK
ENDCLASS. "lcl_handler IMPLEMENTATION
DATA: gt_data_alv TYPE STANDARD TABLE OF t000 WITH NON-UNIQUE DEFAULT KEY,
go_dock TYPE REF TO cl_gui_docking_container,
go_split TYPE REF TO cl_gui_easy_splitter_container,
go_text_l TYPE REF TO cl_gui_textedit,
go_text_r TYPE REF TO cl_gui_textedit,
go_grid TYPE REF TO cl_gui_alv_grid.
PARAMETERS: rb_text RADIOBUTTON GROUP rb1 DEFAULT 'X' USER-COMMAND space,
rb_grid RADIOBUTTON GROUP rb1,
p_out TYPE syucomm MODIF ID ni.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'NI'.
screen-input = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
AT SELECTION-SCREEN.
IF rb_grid = 'X'. " Grid anzeigen --> Textedit unsichtbar
go_text_r->set_visible( space ).
ELSE.
go_text_r->set_visible( 'X' ).
ENDIF.
p_out = sy-ucomm.
INITIALIZATION.
*--------------------------------------------------------------------*
* Ausgabe vorbereiten
* Dock am Selscree, Splitter im Dock,
* Links Textedit,
* rechts Textedit und ALV
*--------------------------------------------------------------------*
*Docker
CREATE OBJECT go_dock
EXPORTING
side = cl_gui_docking_container=>dock_at_bottom
ratio = 80
no_autodef_progid_dynnr = 'X'
EXCEPTIONS
OTHERS = 6.
* Splitter
CREATE OBJECT go_split
EXPORTING
parent = go_dock
orientation = 1
EXCEPTIONS
OTHERS = 3.
* Textedit links
CREATE OBJECT go_text_l
EXPORTING
parent = go_split->top_left_container
EXCEPTIONS
OTHERS = 6.
* Textedit rechts
CREATE OBJECT go_text_r
EXPORTING
parent = go_split->bottom_right_container
EXCEPTIONS
OTHERS = 6.
* ALV rechts
SELECT *
INTO TABLE gt_data_alv
FROM t000.
CREATE OBJECT go_grid
EXPORTING
i_parent = go_split->bottom_right_container
EXCEPTIONS
OTHERS = 5.
go_grid->set_table_for_first_display( EXPORTING
i_structure_name = 'T000'
CHANGING
it_outtab = gt_data_alv
EXCEPTIONS
OTHERS = 4 ).
*Eventhandler RECHTS definieren
SET HANDLER lcl_handler=>handle_grid_double_click FOR go_grid.
* grml - Textedit muss Doubleclick erst registrieren
DATA: lt_events TYPE cntl_simple_events,
ls_event LIKE LINE OF lt_events.
go_text_r->get_registered_events( IMPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
OTHERS = 2 ).
ls_event-eventid = cl_gui_textedit=>event_double_click.
* ls_event-appl_event = ' '.
APPEND ls_event TO lt_events.
go_text_r->set_registered_events( EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3
OTHERS = 4 ).
SET HANDLER lcl_handler=>handle_text_dblclick FOR go_text_r.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
erp-bt • ewx
Danke! Sieht gut aus... könnte so klappen.black_adept hat geschrieben:Hi erp-bt,
ja - habe ich schon gemacht.
Hier ein simples Beispiel ( inkl. Events )
Ich persönlich bin von den DD nicht begeistert. Das erzeugte HTML ist extrem klobig und "unsauber". Wenn man versucht es, wie der Name suggeriert, "dynamisch" zu ändern ist der Vorgang nicht gerade performant. Vorallem bei großen Dokumenten merkt man da schon Verzögerungen im Sekundenbereich, obwohl man eigentlich meint nur "ganz" wenig geändert zu haben. Da würde ich eher empfehlen etwas mehr Zeit zu investieren und eigenen HTML-Code mit den IXML-Klassen zu schreiben. Leider sind mir keine Wrapper-Frameworks ala DD bekannt die auf der IXML-Implementierung aufbauen.erp-bt hat geschrieben:Schon mal was produktiv damit gemacht? Mit HTML kenne ich mich gar nicht aus, aber es sieht ja so aus als ob HTML nur im Hintergrund durch die jeweiligen Klassen generiert wird. Ist es vom Handling her aufwendig die unterschiedlichen Dokumente zu erzeugen? Kannst Du da was zu sagen?Unit605 hat geschrieben:Da Du nicht schreibst, welche Controls genau Du verwenden willst und was Du damit genau vorhast, werfe ich einfach mal "Dynamic Documents" in den Raum.
http://help.sap.com/saphelp_erp60_sp/he ... &node_id=3
Ja.a-dead-trousers hat geschrieben:Bezugnehmend auf meinen Event-Regeistrierungs Hinweis:
Interessant wäre es, ob das mit zwei GLEICHEN Controls (also zwei ALVs oder zwei TextEdits) auch funktioniert.
Code: Alles auswählen.
REPORT.
*----------------------------------------------------------------------*
* CLASS lcl_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: handle_text_dblclick FOR EVENT dblclick OF cl_gui_textedit, " importing ... ist aber zur Demo egal
handle_grid_double_click FOR EVENT double_click OF cl_gui_alv_grid IMPORTING sender.
ENDCLASS. "lcl_handler DEFINITION
DATA: gt_data_alv TYPE STANDARD TABLE OF t000 WITH NON-UNIQUE DEFAULT KEY,
gt_data_alv2 TYPE STANDARD TABLE OF t005 WITH NON-UNIQUE DEFAULT KEY,
go_dock TYPE REF TO cl_gui_docking_container,
go_split TYPE REF TO cl_gui_easy_splitter_container,
go_text_l TYPE REF TO cl_gui_textedit,
go_text_r TYPE REF TO cl_gui_textedit,
go_grid TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid.
PARAMETERS: rb_text RADIOBUTTON GROUP rb1 DEFAULT 'X' USER-COMMAND space,
rb_grid RADIOBUTTON GROUP rb1,
rb_grid2 RADIOBUTTON GROUP rb1,
p_out TYPE syucomm MODIF ID ni.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'NI'.
screen-input = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
CASE 'X'.
WHEN rb_text.
go_text_r->set_visible( 'X' ).
go_grid->set_visible( ' ' ).
go_grid2->set_visible( ' ' ).
WHEN rb_grid.
go_text_r->set_visible( ' ' ).
go_grid->set_visible( 'X' ).
go_grid2->set_visible( ' ' ).
WHEN rb_grid2.
go_text_r->set_visible( ' ' ).
go_grid->set_visible( ' ' ).
go_grid2->set_visible( 'X' ).
ENDCASE.
AT SELECTION-SCREEN.
p_out = sy-ucomm.
INITIALIZATION.
*--------------------------------------------------------------------*
* Ausgabe vorbereiten
* Dock am Selscree, Splitter im Dock,
* Links Textedit,
* rechts Textedit und ALV
*--------------------------------------------------------------------*
*Docker
CREATE OBJECT go_dock
EXPORTING
side = cl_gui_docking_container=>dock_at_bottom
ratio = 80
no_autodef_progid_dynnr = 'X'
EXCEPTIONS
OTHERS = 6.
* Splitter
CREATE OBJECT go_split
EXPORTING
parent = go_dock
orientation = 1
EXCEPTIONS
OTHERS = 3.
* Textedit links
CREATE OBJECT go_text_l
EXPORTING
parent = go_split->top_left_container
EXCEPTIONS
OTHERS = 6.
* Textedit rechts
CREATE OBJECT go_text_r
EXPORTING
parent = go_split->bottom_right_container
EXCEPTIONS
OTHERS = 6.
* ALV rechts
SELECT *
INTO TABLE gt_data_alv
FROM t000.
* CREATE OBJECT go_grid
CREATE OBJECT go_grid
EXPORTING
i_parent = go_split->bottom_right_container
EXCEPTIONS
OTHERS = 5.
go_grid->set_table_for_first_display( EXPORTING
i_structure_name = 'T000'
CHANGING
it_outtab = gt_data_alv
EXCEPTIONS
OTHERS = 4 ).
* CREATE OBJECT go_grid2
SELECT *
INTO TABLE gt_data_alv2
FROM t005.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_split->bottom_right_container
EXCEPTIONS
OTHERS = 5.
go_grid2->set_table_for_first_display( EXPORTING
i_structure_name = 'T005'
CHANGING
it_outtab = gt_data_alv2
EXCEPTIONS
OTHERS = 4 ).
*Eventhandler RECHTS definieren
SET HANDLER lcl_handler=>handle_grid_double_click FOR go_grid.
SET HANDLER lcl_handler=>handle_grid_double_click FOR go_grid2.
* grml - Textedit muss Doubleclick erst registrieren
DATA: lt_events TYPE cntl_simple_events,
ls_event LIKE LINE OF lt_events.
go_text_r->get_registered_events( IMPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
OTHERS = 2 ).
ls_event-eventid = cl_gui_textedit=>event_double_click.
* ls_event-appl_event = ' '.
APPEND ls_event TO lt_events.
go_text_r->set_registered_events( EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3
OTHERS = 4 ).
SET HANDLER lcl_handler=>handle_text_dblclick FOR go_text_r.
*----------------------------------------------------------------------*
* CLASS lcl_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handler IMPLEMENTATION.
METHOD handle_text_dblclick.
*PAI triggern
cl_gui_cfw=>set_new_ok_code( EXPORTING new_code = 'Doubleclick in Textedit' ).
ENDMETHOD. "handle_text_DBLCLICK
METHOD handle_grid_double_click.
CASE sender.
WHEN go_grid.
cl_gui_cfw=>set_new_ok_code( EXPORTING new_code = 'Doubleclick in Grid1' ).
WHEN go_grid2.
cl_gui_cfw=>set_new_ok_code( EXPORTING new_code = 'Doubleclick in Grid2' ).
ENDCASE.
ENDMETHOD. "handle_grid_DOUBLE_CLICK
ENDCLASS. "lcl_handler IMPLEMENTATION
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
a-dead-trousers
black_adept hat geschrieben:Ja.a-dead-trousers hat geschrieben:Bezugnehmend auf meinen Event-Regeistrierungs Hinweis:
Interessant wäre es, ob das mit zwei GLEICHEN Controls (also zwei ALVs oder zwei TextEdits) auch funktioniert.
Anbei etwas modifiziertes Beispiel mit 1x Textedit und 2xGrid im rechten Container.
Auch von mirblack_adept hat geschrieben:Ja.a-dead-trousers hat geschrieben:Bezugnehmend auf meinen Event-Regeistrierungs Hinweis:
Interessant wäre es, ob das mit zwei GLEICHEN Controls (also zwei ALVs oder zwei TextEdits) auch funktioniert.
Anbei etwas modifiziertes Beispiel mit 1x Textedit und 2xGrid im rechten Container.