SOG-Helpcenter Logo SOG Business - Software

Zugriff auf Umgebungsvariable


 

Beschreibung


Einen hohen Stellenwert im Design der SOG C# Programmbibliothek nimmt der Zugriff auf Umgebungsvariable ein. Umgebungsvariable steuern zur Laufzeit die wesentlichen Parameter einer Anwendung, wie z.B. PATH-Variable oder Datenbankzugriffe.

Die Systematik der Umgebungsvariablen ermöglicht dabei, ein und dasselbe Projekt mehrfach in unterschiedlichen Ausprägungen auf einem System zu installieren, und jede Ausprägung mit eigener Umgebung und Datenbank auszustatten.

Die C# Bibliotheken unterstützen dabei die bereits früher von der SOG genutzt Variablensystematik, die auf env-Dateien und Registrierung der Variablen in der Windows Registry basiert.

Für Web-Anwendungen wird jedoch auch eine Systematik vollkommen ohne Registry, nur basierend auf XML-Dateien unterstützt.

Zugriff auf Umgebungsvariable


Der Zugriff auf die aktuelle Umgebung erfolgt im Allgemeinen über einen AppHelper:


    string pfad = v.Env.GetEnv( "PROJ" );

Liefert z.B. den Inhalt der Variablen "Proj" als String. Ist die Variable nicht gesetzt wird "null" zurückgeliefert. Mit dem Aufruf "Expand" kann ein Text, der Variable im Format "${Variablenname}" enthält aufgelöst werden:


    string zeile = v.Env.Expand( "${PROJ}\\html\\${HHLANG}\\AppDir" );

Achtung: Wie unter C# üblich müssen Backslashs in Strings doppelt geschrieben werden. Dies hat nichts mit der Expand-Funktion zu tun.

Definition von speziellen Umgebungen


Soll auf die Umgebung eines anderen Projektes, einer anderen Firma, oder eines anderen Programms zugegriffen werden, können eigene Umgebungsobjekte definiert werden.


    ProgEnv env = new ProgEnv( "Projektkürzel", "Firmenkürzel",
                               "Programmname" );

Die Werte, die nicht speziell zu bestimmen sind, können dabei auch als "null" übergeben werden.

Setzen von Umgebungsvariablen


Über ein solches Umgebungsobjekt können auch Variable gesetzt werden. Dies kann z.B. zum Speichern von Fensterpositionen o.ä. verwendet werden. Dabei sollte genau unterschieden werden, ob der Wert nur für den aktuellen Benutzer, oder für alle Benutzer des gleichen Computers gelten soll. (Bitte beachten Sie dabei auch Temrinal-Server Installationen).


    v.Env.PutUserEnv( "Variable", "Wert" );

Setzt die angegeben Variable auf den übergebenen Wert. Der Wert "null" löscht die entsprechende Variable.

Sollen Variable für alle Benutzer des Projektes gesetzt werden, verwenden sie bitte ENV-Dateien.

Erzeugen von temporären Variablen


Wird ein Objekt vom Typ "ExtEnv" erzeugt, können hier mit der Funktion SetEnv( "Variable", "Wert" ) temporär Werte gesetzt werden, die bei "GetEnv" oder "Expand" mit berücksichtigt werden.


    ExtEnv extenv = new ExtEnv( v.Env );
    env.SetEnv( "Variable", "Wert" );
    string zeile = extenv.Expand( "${PROJ}\\html\\${Variable}\\AppDir" );

Ableiten von eigenen Umgebungsklassen


Die Basisklassen können auch für eigene Anwendungen abgeleitet, und erweitert werden. Als Beispiel diene hier die Implementierung der Klasse "SOGDataObjectEnv", die in der Tat alle Datenfelder eines SOGDataObjects als Variablenauflösung liefern kann (Die Klasse existiert, und kann genutzt werden)


using System;
using System.Collections;
using System.Collections.Specialized;
using SOGLuebeck.Basis;
using SOGLuebeck.Basis.Helper;
namespace SOGLuebeck.OleDbHelper
{
    public class SOGDataObjectEnv : GlobalEnv
    {
        protected SOGDataObject obj;
        protected System.Collections.Specialized.StringDictionary privateEnv=null;
        public SOGDataObjectEnv( AppHelper v, SOGDataObject Obj )
        {
            obj = Obj;
        }
        public void SetEnv( string Name, string Value )
        {
            if ( privateEnv==null )
                privateEnv = new StringDictionary();
            privateEnv[Name] = Value;
        }
        override protected string ForwardGetEnv( string Var )
        {
            if ( privateEnv!=null )
            {
                if ( privateEnv.ContainsKey( Var ) )
                    return privateEnv[ Var ];
            }
            return obj[Var].ToString();
        }
        public override void Dispose()
        {
            if ( privateEnv!=null )
                privateEnv.Clear();
            privateEnv=null;
            base.Dispose();
        }
    }
}

Die Klasse SOGDataObjectEnv ist von "GlobalEnv" abgeleitet, und überschreibt die Methode "ForwardGetEnv". Da hier darauf verzichtet wurde die Basismethode "base.ForwardGetEnv()" aufzurufen, löst "SOGDataObjectEnv" keine echten Umgebungsvariablen auf, sondern nur Datenfelder, die in dem "SOGDataObject" definiert sind, das bei der Erzeugung angegeben wurde, oder aber solche, die zuvor mittels "SetEnv" in die Hashtable des Objektes aufgenommen wurden.