Managed Classes

In einer Managed Class können mehrere SQL-APIs, Funktionen und Attribute gesammelt werden. Nach Zuordnung der Managed Class zu einer individuellen Maske stehen alle diese SQL-APIs, Funktionen und Attribute zur Verfügung.

Aufgabe

Implementieren Sie ein einfaches Logging-System. Die Logs werden in der Tabelle VTAB_SimpleLog gespeichert. Struktur:

DB-Name Name Typ
VCOL_DateTime Date and Time Datum und Zeit
VCOL_Type Type Zeichenfolge(50)
VCOL_Location Location Zeichenfolge(100)
VCOL_Message Message Zeichenfolge(unbegrenzt, mehrzeilig)
VCOL_Tags Tags Zeichenfolge(unbegrenzt, mehrzeilig)

Managed Class definieren

  1. rimacon Management Console ➟ Managed Classes ➟ rechte Maustaste ➟ Neue Managed Class
  2. Name: Simple Log
    Klassenname: CSimpleLog
    Instanzname: SimpleLog
  3. Übernehmen
  4. Reiter "Code"
  5. Zuerst erstellen wir eine SQL-Funktion, die eine Zeile in der Tabelle VTAB_Logging erstellt:
  6. Hinzufügen ➟ SQL
    Name: SqlInsert
    Rückgabewert: void
    Restliche Angaben wie auf dem Screenshot.
  7. Button "OK" anklicken
  8. SQL-Skript
    insert into VTAB_SimpleLog (VTAB_SimpleLog_MDT_ID, VCOL_DateTime, VCOL_Type, VCOL_Location, VCOL_Message, VCOL_Tags)
    values (@_MdtId, getdate(), left(@typ, 50), left(@location, 100), @message, @tags)
    
  9. Button "Syntax prüfen" anklicken - es sollte "OK" kommen
  10. Button "Übernehmen" anklicken (ist nicht zwingend notwendig, nur "gefühlt").
  11. Nun erstellen wir eine C#-Funktion, die später von verschiedenen Stellen aufgerufen wird und die die SQL-Funktion SqlInsert aufruft.
    Grundsätzlich wäre es möglich, die SQL-Funktion SqlInsert direkt aufzurufen. Da aber die Tags als C#-String-Array definiert werden sollten, lohnt sich eine C#-Funktion zu erstellen und das C#-String-Array in eine mehrzeilige Zeichenfolge umzuwandeln.
    Dieses Vorgehen sollte auch bei komplexeren Parametern genutzt werden.
  12. Unten links Button "Hinzufügen" ➟ "Serverfunktion":
    Name: InsertError
    Parameter:
    Name Typ
    location string
    message string
    tags string[]
  13. Button "OK"
  14. C#-Skript
    string mlTags = (tags != null ? string.Join("\r\n", tags) : "");
    this.SqlInsert("Error", location, message, mlTags);
    
  15. Button "Kompilieren" anklicken (nicht notwendig, nur um sicherzustellen, das alles ok ist) und, wenn keine Fehler auftreten, den Button "Übernehmen" anklicken (auch hier wieder - nicht notwendig)
  16. So ähnlich wird auch C#-Funktion InsertInfo erstellt:
    Name: InsertInfo
    Parameter: wie für InsertError
    C#-Script
    string mlTags = (tags != null ? string.Join("\r\n", tags) : "");
    this.SqlInsert("Info", location, message, mlTags);
    
    Kompilieren...
    Übernehmen...
  17. Die Managed Class ist jetzt für die erste Nutzung vorbereitet.

Managed Class in individueller Maske nutzen

  1. In der individuellen Maske den Reiter "Server-Side Code" ➟ links "Managed Classes" anklicken.
  2. Rechte Maustaste ➟ Managed Class zuordnen
  3. Managed Class: SimpleLog
    Instanz erstellen: angekreuzt
    Instanzname: wenn leer, wird die Instanz "SimpleLog" genannt und Methoden über SimpleLog.InsetError(...).
  4. Button "OK" anklicken
  5. In der Maske aus beliebiger Server-Side-Stelle aufrufen, z.B. aus MainForm.AfterFormInit.
    SimpleLog.InsertInfo("MainForm: After form init", "Hi, just a Info", new string[] { "simplelog", "managedclass", "csharp", "forthefirsttime" } );        
    
  6. Nach dem ersten Aufruf der Maske im Webinterface erscheint ein neuer Eintragin der Tabelle VTAB_Logging.