Dynamics AX : AxHLink.exe et RemoteApp

Une entreprise veut utiliser RemoteApp afin de publier le client Dynamics AX et elle veut utiliser les notifications courriel pour leur système de workflow. L’utilisateur reçoit un courriel qui ressemble à ceci:

An item in Microsoft Dynamics AX requires your attention. Please see below message for details.

Subject: Dynamics AX Notification: Workflow Item Review Journal Batch GJBN000084 in Legal Entity 0100
Message: Please review Journal Batch GJBN000084 in Legal Entity 0100

Please review the original business document or the associated alert for more information.

Lorsque l’utilisateur clique sur le lien, la commande dynamics exécute l’outil AxHlink.exe et passe en paramètre la cible. Cette partie est bien expliquée dans ce blogue: How to open a form in a running Ax client from an external application.

Dans mon cas, le problème est que Microsoft Outlook est installé localement sur la machine et le client Dynamics AX est installé sur le serveur RemoteApp. Donc, lorsque l’utilisateur clique sur le lien, Windows ne trouve pas l'outil AxHLink.exe

J’ai dû bâtir une petite solution avec PowerShell afin de faire fonctionner le lien.

Mon but est de lancer AXHlink RemoteApp lorsque l’utilisateur clique sur le lien dans le courriel. Pour ce faire, je lance un script powershell lorsque la commande dynamics est exécutée

Ça ressemble à ceci:

email --> link --> dynamics --> Registry --> PowerShell Script --> .RDP file


AXHlink.exe

Tout d’abord, il faut publier Ax32.exe et AxHLink.exe sur le serveur RemoteApp. 


Il faut s'assurer que l'application AXHlink accepte les paramètres.




Veuillez noter que l'application AXHlink lit la configuration AX active de l'utilisateur, donc il est important que l'utilisateur ait démarré le client AX au moins une fois.

Base de registre

La commande dynamics n’est pas reconnue par défaut si le client AX n'est pas installé. Dans mon cas, il faut l’ajouter à la base de registres de l'ordinateur local. Lorsque l'utilisateur clique sur le lien dans le courriel, je veux lancer un script Power Shell.

Voici le script pour ajouter les valeurs nécessaires dans la base de registres.

Dynamics.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\dynamics]
"URL Protocol"=""
@="\"URL:dynamics link\""

[HKEY_CLASSES_ROOT\dynamics\shell\open\command]
@="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -WindowStyle Hidden -executionpolicy bypass -NonInteractive -NoLogo -file \"\\\\SERVERNAME\\SHAREDFOLDER\\Tools\\AXHlink.ps1\" %1"


Le fichier RDP

Comme j’ai dit, mon script PowerShell va lancer un fichier .RDP. Donc, il me faut ce fichier RDP qui se connecte a l'application RemoteApp AXHlink. Afin de l’obtenir, j’ai configuré RemoteApp and Desktop Connections sur ma machine locale.


Ensuite il suffit de suivre le "target" afin de trouver le fichier RDP associer à l'application AxHlink. Notez que vous devez activer l'option "show the Remote App program in RD web access" afin de télécharger le fichier RDP. Ensuite, vous pouvez désactiver "Show the Remote App program in RD web access".


Sauvegarder ce fichier et nommé le AXHLink_Template.rdp


AxHLink_Template.rdp

Ce fichier deviendra votre gabarit de base. Vous pouvez aussi optimiser le fichier RDP, par exemple j’ai désactivé toutes les redirections.

redirectclipboard:i:0
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:0
redirectdrives:i:0

Il faut aussi enlever la signature.



AXHlink.ps1

C'est le fichier que la commande dynamics: appel et lance le fichier RDP qui pointe vers AXHLink.exe.

Toutefois, le défi est d'appeler l'application AxHLink.exe (RDP RemoteApp) et de lui passer un paramètre différent à chaque fois. Le paramètre est dans le lien, par exemple: dynamics://0/?DrillDown_478/

Pour passer un paramètre via RDP, je dois utiliser l'option remoteapplicationcmdline. Pour ceci, je vais utiliser un script PowerShell qui va copier mon gabarit et ensuite ajouter le paramètre au fichier temporaire et finalement appeler le fichier RDP temporaire.

1 - Copie le gabarit
2 - Ajoute remoteapplicationcmdline dans le fichier temporaire
3 - Lance le fichier temporaire
4 - Supprime le fichier temporaire


[CmdletBinding()]
param (
[string]$param
)
$guid = [GUID]::NewGuid()
$rdpFile ="AxHlink_"+$guid+".rdp"
Copy-Item \\SERVER\AXConfigurationFiles\Tools\AxHLink_Template.rdp \\SERVER\AXConfigurationFiles\Tools\$rdpFile
Add-Content \\SERVER\AXConfigurationFiles\Tools\$rdpFile "`r`nremoteapplicationcmdline:s:$param"
Invoke-Item \\SERVER\AXConfigurationFiles\Tools\$rdpFile
Start-Sleep -Seconds 90
Remove-Item \\SERVER\AXConfigurationFiles\Tools\$rdpFile -Recurse

Et voilà, c'est un peu complexe, mais ca fonctionne.

Previous
« Prev Post