A client control add-in enables you to add custom functionality to the Microsoft Dynamics NAV Windows client and the Microsoft Dynamics NAV Web client by creating a control add-in that can run on both client platforms. https://docs.microsoft.com/en-us/dynamics-nav/walkthrough--creating-and-using-a-client-control-add-in
A template simplifies the development and debug of JavaScript controls for Microsoft Dynamics NAV.
Advantages:
- Simple javascript example.
- Auto deploy on Microsoft Dynamics NAV Server
- Auto restart Microsoft Dynamics NAV Server
- Auto create resource file with js code (xxxresources.zip)
- Auto register in Control Add-In table and import js resources (xxxresources.zip).
Tipical arhitecture of interaction between Javascript Control Add-In and Microsoft Dynamics NAV.
- Autostart Control Add-In when Page is opening.
- Run trigger in Mirosoft Dynamics NAV.
- Run trigger in Mirosoft Dynamics NAV.
- Run javascript code from Dynamics NAV.
- Run javascript code from Dynamics NAV.
To use this Visual Studio add-in project for develop your custom solution and autodeploy in NAV, you need to configure some settings:
-
Install objects from "Microsoft Dynamics NAV Objects" folder in Dynamics NAV. Codeunit "Control Add-In Management" in ControlAddInManagement.fob contain RegisterJavaScriptAddInFromBase64 function that automatical deploy Control Add-In from Build process of the Visual Studio.
-
Edit ImportResource.ps1. This powershell script import JavascriptControlAddIn.zip file to the control add-in record in the Dynamics NAV using codeunit of previous step.
- Change sn = dcce7894fd66d083 to sn key from "Output" window project build process.
- If need, change path to Dynamics NAV C:\Program Files\Microsoft Dynamics NAV\90\Service\Microsoft.Dynamics.Nav.Management.dll
- Change JavascriptControlAddIn.zip file name.
Param(
[string]$Folder
)
Import-Module 'C:\Program Files\Microsoft Dynamics NAV\90\Service\Microsoft.Dynamics.Nav.Management.dll'
Function RegisterClientAddIn
{
Param(
[String]$AddIn,
[String]$Source
)
$arg = "$AddIn"
if ($Source -ne "")
{
$arg = "$arg;$([System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($Source)))"
}
Invoke-NAVCodeunit -ServerInstance DynamicsNAV90 -CodeunitId 99999 -MethodName RegisterJavaScriptAddInFromBase64 -Argument "$arg"
}
RegisterClientAddIn -AddIn "JavascriptControlAddIn;dcce7894fd66d083;1.0.0.0;NAV Control Add-In Template" -Source "$($Folder)Resource\JavascriptControlAddIn.zip"
- Edit "Post-build event command line" in Project properties. Post-build event commands is run auto after compile javascript code and build process in Visual Studio. This script deploy add-in dll to client and server, restart Dynamics NAV server and load JavascriptControlAddIn.zip to control add-in record of the NAV.
- Change "JavascriptControlAddIn.zip" file name. Zip file consist of js files.
- Change Instance name (DynamicsNAV90)
- If need change Microsoft Dynamics installation path for client and server add-ins directories (C:\Program Files\Microsoft Dynamics NAV\90\Service\Add-ins)
Example
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" > NUL
echo Build JavascriptControlAddIn.zip
set res=$(ProjectDir)Resource\JavascriptControlAddIn.zip
echo %res%
if exist "%res%" del "%res%"
set zip1=$(ProjectDir)Build Tools\7z.exe
set zip2=$(ProjectDir)Resource\*.*
echo %zip1%
echo %zip2%
"$(ProjectDir)Build Tools\7z.exe" a -tzip -r "%res%" "$(ProjectDir)Resource\*.*" > NUL
echo Register Add-In in Microsoft Dynamics NAV
powershell -ExecutionPolicy unrestricted -command "&'$(ProjectDir)Build Tools\ImportResource.ps1' -Folder '$(ProjectDir)'"
if $(ConfigurationName) == Resource goto Resource
sn -T "$(TargetPath)"
echo copy files to localpath
copy "$(TargetPath)" "C:\Program Files (x86)\Microsoft Dynamics NAV\90\RoleTailored Client\Add-ins"
echo copy files to server
copy "$(TargetPath)" "C:\Program Files\Microsoft Dynamics NAV\90\Service\Add-ins"
echo restart Dynamics NAV 2016
echo stop
net stop MicrosoftDynamicsNAVServer$DynamicsNAV90
echo
echo start
net start MicrosoftDynamicsNAVServer$DynamicsNAV90
Autodeploy idea - http://vjeko.com/deploy-your-resource-automatically-from-visual-studio/