[Gelöst] Sprachsteuerung unter Windows von NAV aus

1. Oktober 2008 07:33

Hallo erstmal.

Ich bin Azubi und neu hier. Meine Erfahrungen mit NAV sind leider etwas begrenzt.
Als Projekt bekam ich jetzt Navision Multilanguage fähig zu machen. Das bedeutet das den Nutzern die in Zukunft in Frankreich, Italien, Spanien, Polen, Ungarn ect arbeiten auch die Tataturlayouts, Gebietsschemen zur Verfügung stehen. Ansich nicht das Problem. Habe mir einen Rechner mit Win XP Multilaguage erstellt. Die NAV-Datenbanken werden über einen Terminalserver, welcher in Deutschland steht, gestartet.

Jetzt soll ich es möglich machen, dass wenn ein User innerhalb von NAV die Sprache wechselt sich automatisch in Windows das Gebietsschema ect. ändert. Damit die Währung, Zahlen, Datumsformatierung geändert wird.

Ein Skript zur Änderung habe ich bereits erstellt.:

Rundll32 shell32,Control_RunDLL intl.cpl,,/f:"c:\Sprachentxt\Gebietsschema2_EnglischKingdom.txt

[RegionalSettings]
UserLocale=0809:00000809
UserLocale_DefaultUser=0809:00000809
LanguageGroup=1
Language=0000809

Dieses funktioniert unter Windows problemlos.

In NAV habe ich es bereits geschafft das es über ein codeunit ausführen kann:

SHELL('"C:\Sprachen Skripte\Englisch Kingdom Gebietsschema2.bat"');


Aber wie kann ich es NAV einbauen so das bei der Änderung der Sprache je nach Sprache ausgeführt wird?

Ich habe in NAV unter Codeunit --> Anwendungsverwaltung folgenden code gefunden.:


WinLanguage.SETRANGE("STX File Exist",TRUE);
WinLanguage.SETRANGE("Globally Enabled",TRUE);
WinLanguage."Language ID" := GLOBALLANGUAGE;
IF NOT WinLanguage.FIND THEN BEGIN
WinLanguage."Language ID" := WINDOWSLANGUAGE;
IF NOT WinLanguage.FIND THEN
WinLanguage."Language ID" := ApplikationSprache();
END;
GLOBALLANGUAGE := WinLanguage."Language ID";

Ich finde nirgens in NAV Global oder Local Variablen die auf "Globallanguage" oder "WinLanguage" verweisen. Auch finde ich keine Table die die "Language ID" beinhaltet.
Kann mir bitte jemand erklären wie ich das realisieren könnte? Worauf ich achten muss ect.?

Und was bedeutet unter CodeUnit --> Anwendungverwaltung --> ApplikationSprache()
EXIT(1031);


Vielen Dank schon mal.
Zuletzt geändert von DannyB am 2. Oktober 2008 12:32, insgesamt 2-mal geändert.

Re: Sprachsteuerung unter Windows von NAV aus

1. Oktober 2008 10:55

Soweit bin ich erstmal:

Beim Start von NAV wird die NAV Language geprüft und Windows ggf. angepasst wenn diese abweicht.
Wird das zum erstenmal ausgeführt bekommt der User eine Meldung:

Sie führen diesen Vorgang zum erstenmal aus.
Diese Ausführung kann Ihren Computer eventuell beschädigen... ect. ect.....

Wollen sie diese Datei starten?

JA / Nein


Bei ja wird es ausgeführt und Windows läuft auf der Sprache die Navision verwendet.

Jetzt meine nächsten Fragen wie bekomme ich diese Meldung automatisch mit ja beantwortet? welcher Code löst die Meldung aus?

Und noch immer die Frage wo finde ich den Code zum Sprachenwechsel? Also der der Navi auf ENU umstellt wenn ich ENU als Sprache wähle?

Re: Sprachsteuerung unter Windows von NAV aus

1. Oktober 2008 11:24

In früheren Versionen hat NAV den Shell-Befehl ohne Nachfrage ausgeführt.
Aus Sicherheitsgründen wurde jedoch die Abfrage eingebaut.

Eine Alternative zum Shell-Befehl von NAV wäre WSH.Run.

Der Wechsel der Anwendungssprache erfolgt durch die fin.exe/finsql.exe selbst. Da wird kein C/AL-Code ausgeführt.
Du müsstest also in regelmäßigen Abständen überprüfen, ob der Anwender die Sprache gewechselt hat.
Hierzu könntest du eine SingleInstance-Codeunit erzeugen, welche aus der Codeunit 1 heraus gestartet wird.
In der SI-Codeunit prüfst du dann mittels Navision-Timer in regelmäßigen Abständen, ob die Sprache gewechselt wurde.

Ist zwar nicht sehr elegant, aber mir ist keine andere Möglichkeit bekannt.

Re: Sprachsteuerung unter Windows von NAV aus

1. Oktober 2008 14:58

Vielen Dank.

Ist wirklich nicht sehr elegant aber funktioniert.

Denke aber mal ehr das wir das so lassen wie ich es jetzt habe. Gebietsschemen werden über WinLoginScript gesteuert und bei Datendankanmeldung ebenfalls nochmal. Somit ist sichergestellt das wenn ein User die Datenbank schließt und wieder öffnet, derweil ein anderer User ein anderes Gebietsschema aktiviert hat, dass Schema der Datenbanksprache geladen wird.
Da Navision glücklicherweise nur beim Datenbanklogin das Schema abruft funktioniert es so weit.

Re: Sprachsteuerung unter Windows von NAV aus

1. Oktober 2008 15:47

DannyB hat geschrieben:Da Navision glücklicherweise nur beim Datenbanklogin das Schema abruft funktioniert es so weit.

Bedenke bitte, dass ein Anwender jederzeit die Sprache von NAV ändern kann, indem er im Menü Extras auf Sprache klickt und eine andere auswählt.
Logischerweise geschieht dies erst nach dem Login in NAV.

Die Codeunit 1 ist so ausgelegt, dass sie zuerst versucht, NAV auf die Sprache einzustellen, in der auch Windows läuft.
Falls dies nicht möglich sein sollte, stellt NAV die vordefinierte Sprache ein, welche aus der entsprechenden Funktion in der CU1 zurückgegeben wird (1031).

P. S.: 1031 steht für DEU, 1033 für ENU. Was die einzelnen Sprach-IDs bedeuten kannst du in der Tabelle "Windows Language" nachsehen.

Re: Sprachsteuerung unter Windows von NAV aus

2. Oktober 2008 06:20

Danke Timo,

Damit sollte ich das Problem doch im Griff haben oder?:


Code:
IF GLOBALLANGUAGE = 1033 THEN
   shell('"C:\Sprachen Skripte\Englisch USA Gebietsschema2.bat"');
IF GLOBALLANGUAGE = 1031 THEN
  Shell('"C:\Sprachen Skripte\Deutsch Gebietsschema2.bat"');


.... und so weiter
Zuletzt geändert von DannyB am 2. Oktober 2008 10:07, insgesamt 2-mal geändert.

Re: Sprachsteuerung unter Windows von NAV aus

2. Oktober 2008 06:48

DannyB hat geschrieben:Damit sollte ich das Problem doch im Griff haben oder?:



Also ein Versuch ergab das die CU1 nicht gestartet wird wenn ich die Sprache wechsel.
Die Schemen werden nicht neu geladen beim Sprachenwechsel. Somit reicht die Schemensteuerung tatsächlich beim Login.

Re: Sprachsteuerung unter Windows von NAV aus

2. Oktober 2008 08:28

DannyB hat geschrieben:
Code:
IF GLOBALLANGUAGE = 1033 THEN
   shell('"C:\Sprachen Skripte\Englisch USA Gebietsschema2.bat"');
IF GLOBALLANGUAGE = 1031 THEN
  Shell('"C:\Sprachen Skripte\Deutsch Gebietsschema2.bat"');


Nur als Info: Für solche Anweisungen kannst du CASE besser verwenden:
Code:
CASE GLOBALLANGUAGE OF
  1033 : Shell('"C:\Sprachen Skripte\Englisch USA Gebietsschema2.bat"');
  1031 : Shell('"C:\Sprachen Skripte\Deutsch Gebietsschema2.bat"');
END;

Re: Sprachsteuerung unter Windows von NAV aus

2. Oktober 2008 14:28

Natalie hat geschrieben:Nur als Info: Für solche Anweisungen kannst du CASE besser verwenden:
Code:
CASE GLOBALLANGUAGE OF
  1033 : Shell('"C:\Sprachen Skripte\Englisch USA Gebietsschema2.bat"');
  1031 : Shell('"C:\Sprachen Skripte\Deutsch Gebietsschema2.bat"');
END;

Und wenn die Scriptdateien auch noch die Sprachen-ID im Dateinamen enthalten würden, dann würde ein Einzeiler genügen:
Code:
Shell(STRSUBSTNO('"C:\Sprachen Skripte\Gebietsschema%1.bat"',GLOBALLANGUAGE));