Datenstrom in Baumstruktur anzeigen
Dieses Programm ist ein besonderes Schmankerl! Hiermit können Sie einen RDI-Datenstrom in einer Baumstruktur anzeigen lassen. Die einzelnen Fenster und Elemente werden als eigene Äste dargestellt. Jeden Ast können Sie aufklappen und die Variablen sehen.Für besonders “wichtige” Variablen (NAST, SYST, …) können separate Icons verwendet werden.
|
|
|
|
Der Report
REPORT zrdi_baum MESSAGE-ID tree_control_msg LINE-SIZE 230.
***********************************************************************
*** Programm zum Anzeigen eines RDI-Datenstroms in Form einer ***
*** Baumstruktur. ***
*** ***
*** Features: ***
*** – Selektion nach Benutzer, Datum und Titel des Spoolauftrags ***
*** – Anzeige von RDI-Spoolaufträgen ***
*** – Aktualisieren der Liste ***
*** – Verwendung des TreeControls ***
*** – Anzeige von Inkludiertem Text ***
*** – Eigene Icons für die bestimmte Variablenstrukturen (NAST, ***
*** SYST, oder andere) ***
*** ***
*** Anpassungen: ***
*** – PF-Status ‘MAIN’ ***
*** Ok-Codes: “BACK” für F3,SHift-F3, ESC ***
*** – PF-Status ‘LISTE’ ***
*** Ok-Codes: “PICK” zur Zeilenauswahl ***
*** “REFRESH” zum Aktualisieren ***
*** – Dynpro 100 ***
*** CustomControl RDITREE über die gesamte Dynprogröße einfügen ***
*** Ablauflogik: ***
*** PROCESS BEFORE OUTPUT. ***
*** MODULE pbo_0100. ***
*** PROCESS AFTER INPUT. ***
*** MODULE USER_COMMAND_0100. ***
*** ***
***********************************************************************
*** ***
*** ***
*** http/www.tricktresor.com ***
*** ***
*** ***
***********************************************************************
TYPE-POOLS icon.
CLASS lcl_application DEFINITION DEFERRED.
CLASS cl_gui_cfw DEFINITION LOAD.
TYPES: node_table_type LIKE STANDARD TABLE OF mtreesnode
WITH DEFAULT KEY.
TYPES: item_table_type LIKE STANDARD TABLE OF mtreeitm
WITH DEFAULT KEY.
CONSTANTS:
k_folder VALUE ‘X’,
k_no_folder VALUE space,
v VALUE ‘|’.
DATA:
l_rq LIKE tsp01sys,
l_handle LIKE sy-tabix,
l_spoolid LIKE tsp01-rqident,
t_lines LIKE rspo_ds OCCURS 0 WITH HEADER LINE,
t_pages LIKE rspo_index OCCURS 0 WITH HEADER LINE,
BEGIN OF tbuffer OCCURS 0,
x(6),
line(1000),
END OF tbuffer,
t_tsp01 LIKE tsp01sys OCCURS 0 WITH HEADER LINE,
l_tsp01 LIKE tsp01,
BEGIN OF l_txtinc,
system(10),
name(70),
object(4),
id(4),
spras(3),
END OF l_txtinc,
l_text(72),
xnode(12),
znode(12),
xitem TYPE tv_nodekey,
root_type(12),
root_type_alt(12),
root_spool(12),
merk_type,
merk_rdi_text,
merk_element(40),
merker_text_start,
xicon TYPE tv_image,
datum LIKE sy-datum,
zeit LIKE sy-uzeit,
g_event(30),
g_node_key TYPE tv_nodekey,
g_application TYPE REF TO lcl_application,
g_custom_container TYPE REF TO cl_gui_custom_container,
g_tree TYPE REF TO cl_gui_column_tree,
g_ok_code TYPE sy-ucomm,
merker_textcontrol,
merk_spoolid(3) TYPE n,
node_table TYPE treev_ntab,
item_table TYPE item_table_type,
node LIKE mtreesnode,
item TYPE mtreeitm,
l_node_image LIKE node-n_image,
*– Generelle Struktur
BEGIN OF struc,
type, “H=HEADER D=DATA S=???? C=CONTROL
line(3000),
END OF struc,
*– DATA
BEGIN OF struc_data,
BEGIN OF element,
fenster(8),
start,
neu,
element(30),
END OF element,
variable(131),
len(3) TYPE n,
wert(500),
END OF struc_data,
*– HEADER
BEGIN OF struc_header,
version(4),
mandt(3),
char1,
spoolid(11),
spras,
formname(16),
geraet(10),
leer1(65),
charx,
leer2(59),
zahl,
drucker(4),
geraet2(12), “SAPGOF
suff1(6),
suff2(4),
suff3(12),
charx2,
leer3,
zahl2,
leer4(100),
END OF struc_header,
*– CONTROL
BEGIN OF struc_control,
command(300),
END OF struc_control.
*———————————————————————*
* CLASS LCL_APPLICATION DEFINITION
*———————————————————————*
CLASS lcl_application DEFINITION.
ENDCLASS.
*———————————————————————*
* CLASS LCL_APPLICATION IMPLEMENTATION
*———————————————————————*
CLASS lcl_application IMPLEMENTATION.
ENDCLASS.
*– Selektionsbild
SELECT-OPTIONS:
s_rqown FOR t_tsp01-rqowner DEFAULT sy-uname,
s_datum FOR sy-datum DEFAULT sy-datum TO sy-datum,
s_rqtitl FOR t_tsp01-rqtitle.
PARAMETERS:
p_last AS CHECKBOX DEFAULT ‘X’.
*– Start
START-OF-SELECTION.
PERFORM spoolauftraege_selektieren.
*– PF-Code in der Liste
AT USER-COMMAND.
CASE g_ok_code.
WHEN ‘REFRESH’.
PERFORM spoolauftraege_selektieren.
ENDCASE.
*– Doppelklick in der Liste
AT LINE-SELECTION.
*– Lesen des Spoolauftrags
*– FB RSPO_RETURN_SPOOLJOB funktioniert leider nicht, da die übergebene
*– Tabelle nur 255 Zeichen lang ist. Wenn inkludierter Text dabei ist,
*– dann muss die Tabelle jedoch bis zu 1000 Zeichen breit sein!
REFRESH tbuffer.
l_tsp01 = t_tsp01.
PERFORM read_data IN PROGRAM saplspox
TABLES tbuffer
USING l_tsp01 1 0.
IF NOT tbuffer[] IS INITIAL.
CREATE OBJECT g_application.
CALL SCREEN 100.
ENDIF.
*&———————————————————————*
*& Form CREATE_AND_INIT_TREE
*&———————————————————————*
FORM create_and_init_tree.
DATA: event TYPE cntl_simple_event,
events TYPE cntl_simple_events,
hierarchy_header TYPE treev_hhdr.
CLEAR: node_table, item_table.
* create a container for the tree control
CREATE OBJECT g_custom_container
EXPORTING
container_name = ‘RDITREE’.
hierarchy_header-heading = ‘Spoolaufträge’. “#EC NOTEXT
hierarchy_header-width = 60.
* create a tree control
CREATE OBJECT g_tree
EXPORTING
parent = g_custom_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = ‘X’
hierarchy_column_name = ‘Column1’
hierarchy_header = hierarchy_header.
* Column 2
CALL METHOD g_tree->add_column
EXPORTING
name = ‘Column2’
width = 6
header_text = ‘Len’.
* Column3
CALL METHOD g_tree->add_column
EXPORTING
name = ‘Column3’
width = 90
alignment = cl_gui_column_tree=>align_left
header_text = ‘Wert’
header_image = xicon.
* Aufbau des Baumes
PERFORM build_node_table.
* Daten an TreeControl schicken
CALL METHOD g_tree->add_nodes_and_items
EXPORTING
node_table = node_table
item_table = item_table
item_table_structure_name = ‘MTREEITM’.
* expand the node with key ‘Root’
CALL METHOD g_tree->expand_node
EXPORTING
node_key = ‘Root’.
* 1. Stufe Expandieren
CALL METHOD g_tree->expand_node
EXPORTING
node_key = ‘ 1 ‘.
* HeaderData Expandieren
CALL METHOD g_tree->expand_node
EXPORTING
node_key = ‘ 2 ‘.
ENDFORM. ” CREATE_AND_INIT_TREE
*&———————————————————————*
*& Form BUILD_NODE_TABLE
*&———————————————————————*
FORM build_node_table.
* Node with key ‘Root’
CLEAR node.
node-node_key = ‘Root’.
node-isfolder = ‘X’.
node-expander = ‘X’.
node-text = t_tsp01-rqident.
APPEND node TO node_table.
CLEAR item.
item-node_key = ‘Root’.
item-item_name = ‘Column1’.
item-class = cl_gui_column_tree=>item_class_text. ” Text Item
item-text = ‘Liste’.
APPEND item TO item_table.
xnode = 1.
LOOP AT tbuffer.
struc = tbuffer-line.
CLEAR merker_text_start.
CASE struc-type.
WHEN ‘D’.
struc_data = struc-line.
IF merk_rdi_text = space.
CHECK struc_data-variable <> space.
ENDIF.
CLEAR struc_data-element-start.
CLEAR struc_data-element-neu.
WHEN ‘H’.
struc_header = struc-line.
WHEN ‘S’.
CONTINUE.
WHEN ‘C’.
struc_control = struc-line.
ENDCASE.
IF merk_type <> struc-type OR
( merk_element <> struc_data-element
AND struc_data-element <> space ).
root_type_alt = root_type.
root_type = xnode.
CLEAR node.
CASE struc-type.
WHEN ‘D’.
IF merk_rdi_text = space.
CHECK struc_data-variable <> space.
ENDIF.
IF merk_rdi_text = ‘X’.
merk_element = struc_data-element.
SUBTRACT 2 FROM root_type.
ELSE.
merk_element = struc_data-element.
PERFORM add_node USING xnode root_spool k_folder
space.
IF struc_data-element = space.
struc_data-element = ‘…’.
ENDIF.
PERFORM add_item USING node-node_key ‘1’ struc_data-element.
ENDIF.
WHEN ‘H’.
ADD 1 TO merk_spoolid.
PERFORM add_node USING xnode ‘Root’ k_folder
icon_spool_request.
PERFORM add_item USING xnode ‘1’ ‘Spoolauftrag’.
PERFORM add_item USING xnode ‘2’ merk_spoolid.
CLEAR item.
item-node_key = xnode.
item-item_name = ‘Column3’.
item-class = cl_gui_column_tree=>item_class_text.
CONCATENATE struc_header-suff1
struc_header-suff2
struc_header-suff3
INTO item-text SEPARATED BY space.
APPEND item TO item_table.
root_spool = xnode.
ADD 1 TO xnode.
PERFORM add_node USING xnode root_spool k_folder icon_header.
PERFORM add_item USING node-node_key ‘1’ ‘Headerdata’.
znode = xnode.
PERFORM add_nodeitem
USING znode ‘Spoolauftrag’ space
struc_header-spoolid.
PERFORM add_nodeitem
USING znode ‘Formular’ space struc_header-formname.
PERFORM add_nodeitem
USING znode ‘Drucker’ space struc_header-drucker.
WHEN ‘C’.
merker_textcontrol = ‘X’.
IF struc_control CS ‘RDI-CONTROL %%LINES-END’ OR
struc_control(7) = ‘INC-END’.
root_type = root_type_alt.
merk_type = struc-type.
merk_rdi_text = space.
CONTINUE.
ELSEIF struc_control CS ‘RDI-CONTROL %%LINES-BEGIN’ OR
struc_control(9) = ‘INC-BEGIN’.
merk_element = ‘RDI-Text’.
merk_rdi_text = ‘X’.
PERFORM add_node USING xnode root_spool k_folder
icon_customer_master_data_list.
PERFORM add_item USING node-node_key ‘1’ merk_element.
CLEAR l_txtinc.
SPLIT struc-line AT space
INTO l_txtinc-system
l_txtinc-name
l_txtinc-object
l_txtinc-id
l_txtinc-spras.
IF NOT l_txtinc IS INITIAL.
CONCATENATE
‘Name:’ l_txtinc-name
‘Objekt:’ l_txtinc-object
‘ID:’ l_txtinc-id
‘Sprache:’ l_txtinc-spras
INTO l_text SEPARATED BY space.
PERFORM add_item USING node-node_key ‘2’ space.
PERFORM add_item USING node-node_key ‘3’ l_text.
ENDIF.
ELSE.
merker_textcontrol = space.
PERFORM add_node USING xnode root_spool k_folder
icon_draw_angular.
PERFORM add_item USING node-node_key ‘1’ ‘Control’.
ENDIF.
WHEN ‘S’.
CONTINUE.
ENDCASE.
ADD 1 TO xnode.
merk_type = struc-type.
ENDIF.
CASE struc-type.
WHEN ‘D’.
CHECK merker_text_start = space.
*__________________________________________________________________*
*
* Hier können Icons für Felder angegeben werden, die im Datenstrom
* besonders hervorstechen sollen
*__________________________________________________________________*
*
IF struc_data-variable(3) = ‘SY-‘.
node-n_image = icon_database_table.
ELSEIF struc_data-variable(5) = ‘NAST-‘.
node-n_image = icon_msg.
ELSEIF struc_data-variable(6) = ‘L_RKO-‘.
node-n_image = icon_header.
ELSEIF struc_data-variable(10) = ‘KONDITION-‘.
node-n_image = icon_price.
ELSEIF struc_data-variable(1) = ‘$’.
node-n_image = icon_variable.
ELSEIF merk_rdi_text = ‘X’.
node-n_image = icon_text_field.
ENDIF.
l_node_image = node-n_image.
DO.
PERFORM add_node
USING xnode root_type k_no_folder l_node_image.
PERFORM add_item USING node-node_key ‘1’ struc_data-variable.
PERFORM add_item USING node-node_key ‘2’ struc_data-len.
PERFORM add_item USING node-node_key ‘3’ struc_data-wert(72).
SHIFT struc_data-wert BY 72 PLACES LEFT.
IF struc_data-wert(72) = space.
EXIT.
ELSE.
*– Folgezeilen, falls der Text/ Variable zu lang ist (> 72 Zeichen)
ADD 1 TO xnode.
l_node_image = icon_space.
CLEAR struc_data-len.
ENDIF.
ENDDO.
WHEN ‘H’.
CONTINUE.
WHEN ‘C’.
CLEAR node.
IF merker_textcontrol = space.
PERFORM add_node
USING xnode root_type k_no_folder space.
PERFORM add_item
USING node-node_key ‘1’ struc_control-command.
ELSEIF merk_rdi_text = ‘X’.
merk_type = ‘D’.
ELSE.
merk_type = ‘D’.
ENDIF.
ENDCASE.
ADD 1 TO xnode.
ENDLOOP.
ENDFORM. ” BUILD_NODE_TABLE
*&———————————————————————*
*& Module pbo_0100 OUTPUT
*&———————————————————————*
MODULE pbo_0100 OUTPUT.
SET PF-STATUS ‘MAIN’.
IF g_tree IS INITIAL.
” The Tree Control has not been created yet.
” Create a Tree Control and insert nodes into it.
PERFORM create_and_init_tree.
ENDIF.
ENDMODULE. ” pbo_0100 OUTPUT
*&———————————————————————*
*& Module USER_COMMAND_0100 INPUT
*&———————————————————————*
MODULE user_command_0100 INPUT.
DATA: return_code TYPE i.
CASE g_ok_code.
WHEN ‘BACK’.
CALL METHOD cl_gui_cfw=>dispatch
IMPORTING return_code = return_code.
IF return_code <> cl_gui_cfw=>rc_noevent.
” a control event occured => exit PAI
CLEAR g_ok_code.
EXIT.
ENDIF.
CALL METHOD g_tree->free.
CALL METHOD g_custom_container->free.
CLEAR g_tree.
CLEAR g_custom_container.
SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE. ” USER_COMMAND_0100 INPUT
*&———————————————————————*
*& Form add_item
*&———————————————————————*
FORM add_nodeitem USING value(nkey)
value(col1)
value(col2)
value(col3).
ADD 1 TO xnode.
CLEAR node.
node-node_key = xnode.
node-relatkey = nkey.
node-relatship = cl_gui_column_tree=>relat_last_child.
APPEND node TO node_table.
CLEAR item.
item-node_key = xnode.
item-item_name = ‘Column1’.
item-class = cl_gui_column_tree=>item_class_text.
item-text = col1.
APPEND item TO item_table.
CLEAR item.
item-node_key = xnode.
item-item_name = ‘Column2’.
item-class = cl_gui_column_tree=>item_class_text.
item-text = col2.
APPEND item TO item_table.
CLEAR item.
item-node_key = xnode.
item-item_name = ‘Column3’.
item-class = cl_gui_column_tree=>item_class_text.
item-text = col3.
APPEND item TO item_table.
ENDFORM. ” add_nodeitem
*———————————————————————*
* FORM add_item *
*———————————————————————*
FORM add_item USING value(f_node)
value(f_col)
value(f_text).
CLEAR item.
item-node_key = f_node.
CONCATENATE ‘Column’ f_col INTO item-item_name.
item-class = cl_gui_column_tree=>item_class_text.
item-text = f_text.
APPEND item TO item_table.
ENDFORM.
*&———————————————————————*
*& Form add_node
*&———————————————————————*
FORM add_node USING value(f_node)
value(f_relat)
value(f_folder)
value(f_img).
CLEAR node.
node-node_key = f_node.
node-relatkey = f_relat.
node-relatship = cl_gui_column_tree=>relat_last_child.
node-isfolder = f_folder.
node-expander = f_folder.
node-n_image = f_img.
node-exp_image = f_img.
APPEND node TO node_table.
ENDFORM. ” add_node
*&———————————————————————*
*& Form spoolauftraege_selektieren
*&———————————————————————*
FORM spoolauftraege_selektieren.
sy-lsind = 1.
SET PF-STATUS ‘LISTE’.
CALL FUNCTION ‘RSPO_ISELECT_SPOOLREQS’
EXPORTING
rfcsystem = ‘NONE’
TABLES
s_rqowne = s_rqown
s_rqcred = s_datum
s_rqtitl = s_rqtitl
result_tsp01 = t_tsp01
EXCEPTIONS
error = 1
OTHERS = 2.
CHECK sy-subrc = 0.
LOOP AT t_tsp01 WHERE rqdoctype = ‘RDI’.
WRITE: /
t_tsp01-rqident,
t_tsp01-rq0name,
t_tsp01-rq1name,
t_tsp01-rq2name,
t_tsp01-rqtitle,
t_tsp01-rqowner,
t_tsp01-rqdest.
HIDE t_tsp01.
ENDLOOP.
CLEAR t_tsp01.
IF p_last = ‘X’.
CLEAR p_last.
SET CURSOR LINE 3.
SET USER-COMMAND ‘PICK’.
ENDIF.
ENDFORM. ” spoolauftraege_selektieren
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024