TableCtrl anstatt GridCtrl
In gewissen Fällen macht es Sinn einen GridControl durch einen TableControl zu ersetzen.
- Sie wollen pro Zeile zu Ihren Daten gleich eine oder mehrere eigene Funktionen hinzufügen
- Sie wollen die im GridControl angezeigten Daten mit eigenen durch einen RFC Baustein ermittelten Daten anreichern
Damit das Auslesen und das Anzeigen im TableControl nicht zu lange dauert, ist in den untenstehenden Scripten die Anzeige auf 1000 Zeilen limitiert. Dies dürfte für eine normale Anwendung in den meisten Fällen ausreichen.
Voraussetzung ist mindestens die GuiXT Version 2011 Q4 3. (Voraussetzung der Befehl „Table“)
SAPLSLVC_FULLSCREEN.0500.TXT
// Beispiel für eine Substitution von einem GridControl zu einem TableControl
// 06.12.2011 / Gérald Koehn / Koehn Consulting / www.guixt.ch
if Q[Transaction=VA05N]
if V[column_1] // Abfrage nach der Spalte 1
// Falls Variablen des TableControl bereits gefüllt, so löschen wir Grid Control
del X[GRID1]
Table (0,0) (40,190) Name="Table" rows="&V[anz_zeilen]"
// Das definieren der Spalten des TableControls machen wir über einen Loop, da die Anzahl
// grundsätzlich je nach Grid unterschiedlich sein kann
set V[i] 1
Label Definition_Spalten
if V[column_&[i]] or V[i=1] // nur wenn noch eine Spaltenbezeichnung gefüllt ist
Column "&V[column_&[i]]" size="&V[columnsize_&[i]]" name="column_&[i]" position="&[i]" -readonly
set V[i] &[i] + 1
goto Definition_Spalten
endif
else // Variablen nicht gefüllt
// wir müssen dafür besorgt sein, dass die Variablen gefüllt werden
Enter Process="Lesen_Grid.txt"
endif
endif
Lesen_Grid.txt
// Script um Grid Control Daten über die Zwischenablage in die
// Variablen des TableControls "Table" zu übertragen
// 06.12.2011 / Gérald Koehn / Koehn Consulting / www.guixt.ch
Enter "==%PC"
// Liste sichern in Datei...
Screen SAPLSPO5.0110
// Zwischenspeichern der UserAblage
CopyText toText="user_clipboard" -fromclipboard
// Richtige Option markieren
Set #[8,2] "X" // in die Zwischenablage
Enter
// Liste Kundenaufträge
Screen SAPLSLVC_FULLSCREEN.0500
// Initialisieren Variablen und Langtext
set V[column*] ""
Set Text[Grid_*] ""
Set Text[String*] ""
Set V[String*] ""
// Kopieren Clipboard in Langtext
CopyText ToText="Grid_Liste" -fromclipboard
// Falls mehr als 1000 Zeilen in GridControl enthalten, so soll abgebrochen werden
// und der User darüber informiert werden
CopyText fromText="Grid_Liste" toString="check_line_1007" Line="1007"
if Q[ok]
Enter "/3"
Message "E: Schränken sie die Selektion mehr ein, sie dürfen nicht mehr als 1000 Einträge selektieren" -StatusLine
Leave
endif
// ---------------------------------- Lesen Header des GridControls -------------------------------------
CopyText FromText="Grid_Liste" toString="String" Line="4" // Line=4, weil Header auf der Zeile 4 steht, dies muss je nach Grid ev. angepasst werden
set V[z] 1
Label Header_column
CopyText FromString="String" toText="String_Einzel"
CopyText FromText="String_Einzel" toString="String_Einzel_String" Line="&[z]" Delimiter="|"
if Q[ok]
if V[z=1]
set V[column_&[z]] "Zähler"
set V[columnsize_&[z]] 6
else
set V[column_&[z]] "&V[String_Einzel_String]"
set V[columnsize_&[z]] "&V[String_Einzel_String]" -stringlength
set V[columnsize_&[z]] &[columnsize_&[z]] + 1
endif
set V[z] &[z] + 1
goto Header_column
endif
// Variablen setzen
set V[i] 6 // Zähler Zeilen , setzen wir auf 6, da die Dateninhalte ab Zeile 6 beginnen
set V[z] 1 // Zähler Spalten
set V[t] 1 // Zähler der Zeilen im TableControl
Label Daten_lesen
CopyText FromText="Grid_Liste" toString="String" Line="&[i]"
if Q[ok]
// jetzt lesen wir jede einzelne Zelle der Tabelle
set V[z] 1 //
Label Einzelne_Zelle
CopyText FromString="String" toText="String_Einzel"
CopyText FromText="String_Einzel" toString="String_Einzel_String" Line="&[z]" Delimiter="|"
if Q[ok]
if V[z=1] // da Spalte 1 immer leer füllen wir einfach einen Zeilenzähler ab
set V[Table.cell.column_&[z].&[t]] "&[t]"
else
set V[Table.cell.column_&[z].&[t]] "&V[String_Einzel_String]"
set V[check_breite] "&V[String_Einzel_String]" -stringlength
if V[check_breite>&V[columnsize_&[z]]] // Wenn Breite der Daten grösser als Definierte Breite, so erhöhen wir die Breite auf die Breite der Daten
set V[columnsize_&[z]] "&V[check_breite]"
endif
endif
set V[z] &[z] + 1
goto Einzelne_Zelle
endif
set V[i] &[i] + 1
set V[t] &[t] + 1
goto Daten_lesen
endif
set V[anz_zeilen] &[t]
// UserAblage wieder zurück in Ablage schreiben
CopyText fromText="user_clipboard" -toclipboard
Enter

Hallo Herr Koehn,
ich habe die Substitution des Grdis in der IW37N angewendet. Soweit funktioniert es auch. Wenn ich allerdings das Feld „Auftrag“ mit in die Anzeigevariante aufnehme, wird mir nur die erste Spalte „Zähler“ angezeigt. Alle anderen Spalten sind nicht vorhanden! Ich habe nicht ermitteln können, woran das liegt. Können sie da helfen?
Vielen Dank
Torsten Freydt-Olek
Hallo Herr Freydt-Olek,
Ich würde gleich versuchen es mit der neuen GuiXT Funktion GetGridValues zu machen.
Siehe Dokumentation.
Das hier aufgeführte Beispiel war nur eine Zwischenlösung.
Mit freundlichen Grüssen
Gérald Koehn