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

Empfehlen