Table of Contents

DotNET-Funktionen als noninteractive

Informationen

  • Kategorien: Kernel | Schnittstellen | Webservice-Client-Schnittstelle
  • Version: 21.0.0.11757
  • Veröffentlichungsdatum: Freitag, 8. März 2019
  • Entwickler: Schulze
  • Benötigt Datenbankänderung: Nein
  • Betreff: DotNET-Funktionen als noninteractive

Beschreibung

Für die Einbindung von benutzerdefinierten .NET-Funktionen wurde jetzt eine Möglichkeit geschaffen, bestimmte Metadaten für diese Funktionen anzugeben.

Dafür gibt es eine neue C#-Klasse pit.IS.Servive.FctExportAttribute in der Assembly CliDefines.dll, welche von System.Attribute ableitet und damit einer .NET-Funktion als Tag mitgegeben werden kann.

In diesem Tag sind folgende Werte einstellbar:

  • Interactive => legt fest ob diese Funktion interaktiv ist, wenn nicht (keine Anzeige von Fenstern u.a. GUI-Elementen) dann kann diese Funktion auch im IS-Service benutzt werden
  • Description und Category => werden beim Einfügen in die Klassenformel übernommen
  • Const => legt fest ob diese Funktion konstant (const) ist, also keine Werte in der aktuellen pit-Session ändert, wenn ja dann kann diese Funktion auch in anderen const-Funktionen eingebunden werden

Beim Importieren der .NET-Funktion in eine Klassenformel werden die "Interactive"- und "Const"-Tags ausgelesen und in die Wrapper-Kernfunktion für die entsprechende .NET-Funktion übernommen. Nachträgliche Änderungen an den Flags müssen in der .NET-Funktion gemacht werden. Die Tags "Description" und "Category" werden in den Metadaten-Kommentar in der Klassenformel übernommen und können dort nachträglich geändert werden.

Außerdem wurde die UI und die Logik des "SelectDotNetFunction "-Dialogfensters überarbeitet: falls mindestens eine public/static Funktion in der Dll das Tag "pit.IS.Servive.FctExportAttribute" gesetzt hat dann werden nur Funktionen mit diesem Tag im Dialogfenster zur Auswahl angezeigt. Ansonsten werden wie bisher alle public/static Funktionen zur Auswahl angeboten.

Darüberhinaus wurde die neue TraceCategory "Formula.Assembly" in der classform.dll eingebaut, diese schreibt das Laden der benutzerdefinierten .NET-Funktionen in die Ablaufverfolgung (Trace): [pittrace.formula.assembly] TraceLevel=... DurationMeasure=...

Bilder

DotNET-Funktionen als noninteractive

Beispielcode

// C#
public class Foo
{
    /* definiert in clidefines.dll */
    [pit.IS.System.FctExport(
        Interactive = false, 
        Const = true, 
        Description = "Beschreibung des Sinn des Lebens, des Universums und dem ganzen Rest",
        Category = "Metasyntaktische Funktionen nach RFC 3092" )]
    public static System.String GetAnswerToTheUltimateQuestionOfLifeUniverseAndEverything()
    {
        SleepYears( 7.500.000 );
        return "42";
    }
}