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
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";
}
}