Desplegar un tenant mediante PowerShell a partir de la instalación básica de Microsoft Dynamics NAV (Navision)
En este artículo voy a explicar los pasos a seguir para, a partir de una instancia de Dynamics NAV, montar un tenant y tener así el código de la aplicación albergado por la instancia y poder tener cuantos tenants queramos en esa misma instancia, cada tenant con su propia base de datos (de datos), compartiendo el codigo fuente.
Figura 1: Escenario multi-instancia
Figura 2: Escenario multi-tenant
Para ello vamos a utilizar Windows PowerShell ISE.
1er paso: Importar el módulo de administración de Dynamics NAV
Set-ExecutionPolicy RemoteSigned -Force
Import-Module 'C:\Program Files\Microsoft Dynamics NAV\80\Service\NAVAdminTool.ps1'
2do paso: Parar el servicio que está ejecutando la instancia a exportar.
Set-NAVServerInstance -ServerInstance 'DynamicsNAV80' -Stop
3er paso: Exportar el código fuente de la base de datos actual y separarlo en una base de datos independiente.
Export-NAVApplication -DatabaseServer 'MySQLServer' -DatabaseInstance 'NAVDEMO' -DatabaseName 'Demo Database NAV (8-0)' -DestinationDatabaseName 'NAV App'
4to paso: Quitar el código fuente de la base de datos para dejarla preparada para tenant.
Remove-NAVApplication -DatabaseName 'Demo Database NAV (8-0)' -Force
5to paso: Modificar el setting de la instancia para quitar la base de datos (de datos) y albergar multi-tenant.
Set-NAVServerConfiguration -ServerInstance 'DynamicsNAV80' -Element appSettings -KeyName 'DatabaseName' -KeyValue ''
Set-NAVServerConfiguration -ServerInstance 'DynamicsNAV80' -Element appSettings -KeyName 'MultiTenant' -KeyValue 'True'
6to paso: Iniciar el servicio parado en el paso 2 pero que ahora está preparado para multi-tenant.
Set-NAVServerInstance -ServerInstance 'DynamicsNAV80' -Start
7mo paso: Montar la base de datos del código fuente que será utilizado por todos los tenants.
Mount-NAVApplication -ServerInstance 'DynamicsNAV80' -DatabaseServer 'MySQLServer' -DatabaseInstance 'NAVDEMO' -DatabaseName 'NAV App'
8vo paso: Montar el tenant. Cada tenant de la instancia alberga una base de datos (de datos).
Mount-NAVTenant -ServerInstance 'DynamicsNAV80' -Id tenant1 -DatabaseServer 'MySQLServer' -DatabaseInstance 'NAVDEMO' -DatabaseName 'Demo Database NAV (8-0)' -OverwriteTenantIdInDatabase
Finalmente sólo nos queda acceder a NAV para comprobar que todo funciona correctamente. Ahora deberemos añadir a la cadena de conexión al servidor el tenant al que deseamos conectar. Por ejemplo: MyNAVSERVER.cloudapp.net:7046/DynamicsNAV80/tenant1