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