Objekte einspielen. Gibt es eine PowerShell-Lösung?

22. Juni 2017 16:02

Hallo zusammen,

mich würde interessieren, ob folgendes Problem mit PS lösbar ist:

Ich habe eine "Master"-Datenbank, in der gelegentlich auch Tabellenobjekte geändert werden. In regelmäßigen Abständen (täglich?) sollen nun die geänderten Objekte an andere Datenbanken weitergegeben werden (via fob-Dateien), die diese automatisiert einlesen. Sowohl der Export der geänderten Objekte aus dem Master als auch der Import (mit Force) sollen vollautomatisch ablaufen.

Leider habe ich keine geeigneten Cmdlets gefunden, es soll sie aber geben. Wer hat einen Tipp?

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 08:24

Hallo Rainer,

meines Wissens nach kann man mit PowerShell Objekte nur als Text-Dateien Im- und Exportieren.
Das dafür benötigte CMDLet befindet sich in dieser Datei: "RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1"

Die muss man importieren.
Code:
Import-Module

Anschließend kann man die Objekte exportieren.
Code:
Export-NAVApplicationObject


Und wieder Importieren.
Code:
Import-NAVApplicationObject


Anschließend müssen die Objekte noch compiliert werden.
Code:
Compile-NAVApplicationObject -SynchronizeSchemaChanges Force


Die restlichen Parameter sind entsprechend der Datenbank und des Servers anzugeben.
EDIT: Natürlich muss auch ein Filter angegeben werden sont würden alle Objekte Exportiert. Der Filter könnte z.B. so aussehen: "-Filter 'Type=Table;ID=700..799'"

Ich habe aber so meine Bedenken an dem von dir beschriebenen Ablauf.
Wenn automatisiert Tabellen mit geändert und mit "Force" synchronisiert werden, besteht unter Umständen die Gefahr des Datenverlustes.

Aber ich hoffe ich konnte helfen

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 09:01

Hallo Stefan,

klar konntest du helfen. Theoretisch können wir auch mit Validation arbeiten. Ich hatte nur grundsätzlich bezüglich dem Arbeiten mit txt-Dateien ein etwas ungutes Gefühl. Außerdem muss noch sichergestellt werden, dass kein manueller Eingriff in diesen automatischen Prozess erfolgen darf, und es muss sichergestellt sein, dass alle betroffenen Datenbanken diese Synchronisation mitbekommen. Da ist noch eine Menge zu tun.

Vielen Dank für deine Hilfe!

Rainer

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 09:03

Export als fob scheint auch zu gehen: Export NAV Application Objects
Ob es dann umgekehrt vielleicht auch geht ...?
Als genereller Einstieg sollte das hier hilfreich sein: NAV FAQ - NAV PowerShell

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 09:14

Natalie hat geschrieben:Export als fob scheint auch zu gehen


stimmt :D
Delta Dateien konnte man nur nicht mit fobs machen.

Ich habe es gerade getestet. Wenn man einfach im Dateinamen die Endung "fob" verwendet klappt es.
Auch der Import der fob Datei geht dann mit dem selben Befehl.

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 09:59

Danke! Dann müssen wir das jetzt nur noch "zusammenbasteln".

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 15:01

rainergaiss hat geschrieben:In regelmäßigen Abständen (täglich?) sollen nun die geänderten Objekte an andere Datenbanken weitergegeben werden (via fob-Dateien), die diese automatisiert einlesen.

Das autom. Einlesen der FOB's soll (hoffentlich) doch nicht in einer Produktiv-DB im laufenden Betrieb sondern nach Feierabend erfolgen, oder? Und wenn es hier um eine DB geht, in welcher die NAS-Dienste tätig sind: nach jeder EInlesung müssen ja auch die NAS-Dienste für diese DB neu gestartet werden.

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

23. Juni 2017 15:36

Wertvoller Hinweis, danke! Das ist aber in unserem Fall berücksichtigt.

Rainer

Re: Objekte einspielen. Gibt es eine PowerShell-Lösung?

24. Juni 2017 13:55

Wir haben das weitestgehend automatisiert. Export und Import als fob ist möglich. Danach kann man auch alle Objekte kompilieren lassen und sich den Ergebnisbericht schicken lassen. Ein Neustart des Dienstes ist ebenfalls möglich. Selbst einen Merge kann man automatisieren (natürlich mit den Schwachstellen, die die PS Funktion aktuell noch hat).

Einen ganz entscheidenden charmanten Vorteil, den das Ganze hat, ist meiner Meinung nach, dass man das über den Windows Task Scheduler für nachts einplanen kann. Dadurch muss der Entwickler nicht mehr warten bis die Geschäftszeiten vorüber sind, um ins Produktivsystem zu importieren.

Ein paar Fallstricke gibt es allerdings schon. Wenn z.B. mehrere Instanzen auf eine DB laufen, dann kommt das Skript manchmal durch einander und sagt, dass man erst eine Instanz auswählen muss, bevor man importieren kann. Bisher konnten wir noch nicht herausfinden, warum das (nur manchmal) verloren geht. Vielleicht hat ja jemand eine Idee dazu?