Externe Tabellen in NAV/Business Central einbinden

Veröffentlicht von

Ab NAV2016 gibt es die Möglichkeit externe Tabellen in NAV / Business Central einzubinden. So können Daten direkt in externe Datenbanken geschrieben und von externen Datenbanken gelesen werden.

Vorbereitend muss auf dem externen SQL Server ein Datenbank Benutzer mit gewünschten Lese/Schreibrechten auf die Datenbank erstellt werden.

Die in NAV benötigte Tabelle wird dann als Cside/AL Objekt angelegt. Alle benötigten Felder werden in die NAV/BC Tabelle übernommen:
Hier auf die richtigen Feldtypen gemäss Referenz achten
https://docs.microsoft.com/en-us/dynamics-nav/identifiers–data-types–and-data-formats#SQLDataType
Es müssen nicht alle Tabellenfelder übernommen werden. So ist es auch möglich Felder mit NULL werden in SQL zu übergehen. Dies ist sonst aus NAV heraus nicht möglich.

In den Tabelleneigenschaften muss noch TableType auf „ExternalSQL“ , ExternalSchema auf „dbo“ gesetzt werden und als ExternalName der Name der Zieltabelle angegeben werden.

Anschliessen muss die externe Tabellenanbindung in NAV/BC registriert werden. Dies kann via NAV Command Shell:
New-NAVTableConnection -ServerInstance <NAVServerInstance> -ConnectionType ExternalSQL -ConnectionId ‚<TableConnectionName>‘ -DatabaseServer ‚<DatabaseServer>\<DatabaseInstance>‘ -DatabaseName ‚<ExternalDatabaseName>‘

oder via Code bewerkstelligt werden.

Im aktuellen Beispiel wird eine List Page mit den gewünschten Feldern und Tabelleneinbindung im OnInit Trigger erstellt:

Es wird eine Listpage mit den gewünschten Tabellenfeldern erstellt:

Im OnInit Trigger wird die externe Datenbank eingebunden:
Es muss immer geprüft werden, ob schon eine Verbindung vorhanden ist und diese dann durch die aktuelle Verbindung ersetzen.

IF HASTABLECONNECTION(TABLECONNECTIONTYPE::ExternalSQL, ‚ExtSQLSINA_Connector‘) THEN
UNREGISTERTABLECONNECTION(TABLECONNECTIONTYPE::ExternalSQL,’ExtSQLSINA_Connector‘);
REGISTERTABLECONNECTION(TABLECONNECTIONTYPE::ExternalSQL, ‚ExtSQLSINA_Connector‘, ‚Data Source=SRNAME\SRInstance;Initial Catalog=EMB_SINA;User ID=user;Password=xxx‘);
SETDEFAULTTABLECONNECTION(TABLECONNECTIONTYPE::ExternalSQL,’ExtSQLSINA_Connector‘);

Anschliessend kann die externe Tabelle direkt in NAV/BC aufgerufen und editiert werden.