ENVIRON, die Umgebungsvariablen

Veröffentlicht: 19. Juni 2010 in Allgemein, Dynamics NAV Classic Client, Dynamics NAV RTC, Trick

Die Umgebungsvariablen sind manchmal sehr nützliche Informationen, die man während der Programmierung gebrauchen kann. Zum Beispiel der Pfad zum TEMP Ordner, der Benutzername, der Clientname, das Homedrive und vieles mehr.

Wenn man sich ersteinmal anschauen will, welche Umgebungsvariablen auf dem aktuellen System zur Verfügung hat, öffnet man die Konsole (Start->Ausführen->cmd) und tippt set ein.Nach dem Du diese Eingabe bestätigt hast, werden dir alle zur Verfügung stehenden Umgebungsvariablen angezeigt. Eingrenzen kann man die Ausgabe, indem man die Anfangsbuchstaben (oder auch den gesamten Namen) der Variable eintippt.

Beispiel:

Beispiel der Umgebungsvariablen die mit comm beginnen.

environ comm...

Um diese Variablen in NAV abzufragen, kann man eigentlich die Funktion ENVIRON(‚<VARNAME>‘) verwenden. Leider wird diese nicht vom RTC und von Webservices unterstützt. Deswegen habe ich mir (aus performance Gründen) folgende Funktion gebaut:

XENVIRON(Value : Text[50]) : Text[1024]
// Webservices and RTC
IF ISSERVICETIER THEN BEGIN
  CREATE(WshShell, TRUE, TRUE);
  EXIT( WshShell.ExpandEnvironmentStrings('%' + Value + '%') );
END ELSE BEGIN
  EXIT( ENVIRON(Value) );

Hinweis: Der Code fragt: „Von wo werde ich aufgerufen?“

Die Automationvariable WshShell (‚Microsoft Shell Controls And Automation‘.Shell) (‚Windows Script Host Object Model‘.WshShell) macht genau das gleiche wie ENVIRON ist aber langsamer. Da ENVIRON aber Fehler wirft, wenn ein Webservice oder der RTC diese Funktion aufruft, wird nur dann die WshShell verwendet.

Advertisements
Kommentare
  1. Timo Lässer sagt:

    Super Tipp/Trick!
    Den kannte ich noch nicht.

  2. […] – Umgebungsvariable abrufen, wird verwendet um die Konfigurationsdatei in den TEMPORARAYPATH zu […]

  3. Carsten sagt:

    Hi, vielen Dank für diesen Tipp! Wie ich das verstehe findest Du damit z.B. den Temp-Pfad auf dem lokalen Rechner. Ggibt es auch eine Möglichkeit, den Temp-Pfad auf dem Servicetier zu finden?

  4. Hi,
    ohne es getestet zu haben würde ich entweder die CREATE Funktion des automation Servers mit anderen Parametern füllen:
    Syntax: CREATE(Var, [NewInstance], [ClientSide])
    Umsetzung hier: CREATE(WshShell, TRUE, FALSE)

    edit: alternativ den zweiten Parameter (NOT ISSERVICETIER)

    oder

    dies über die Codeunit 419 – 3-Tier Mgt. ermitteln (z.B. Funktion ServertempFileName oder EnvironFileName).

    Ich hoffe ich konnte dir damit deine Frage beantworten 🙂

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s