Hoster une apllication WPF dans le RTC de Dynamics NAV

Pour hoster notre application WPF, nous avons besoin d’un contrôle Add-In Dynamics NAV.

Nous allons d’abord créer un projet “Class Librairy” dans Visual Studio 2010 (la version Express suffit).

Vu que le RTC Dynamics NAV 2009 SP1 est compilé dans le framework 3.5, il faut changer le framework de votre application (bouton Project puis Properties)

image image

Il faut aussi rajouter les références suivantes :

image

Microsoft.Dynamics.Framework.UI.Extensibility et Microsoft.Dynamics.Framework.UI.Extensibility.WinForms : pour l’AddIn Dynamics NAV
System.Windows.Forms et System.Drawing : pour la création d’un Win Form
System.Windows.Forms.Integration : pour l’intégration du composant WPF dans un WinForm

Voici la liste des Using :

using Microsoft.Dynamics.Framework.UI.Extensibility;
using Microsoft.Dynamics.Framework.UI.Extensibility.WinForms;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using System.Drawing;
using System.ComponentModel;

Nous allons maintenant ajouter un nouveau composant User Control WPF à notre projet :

image

L’objectif est de hoster le contrôle dans le RTC, notre contrôle va juste afficher un Text; voici le code XAML de ce contrôle :

<UserControl x:Class="NavWPFChart.UserControl1"
            xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
            mc:Ignorable="d"
            d:DesignHeight="108" d:DesignWidth="300">
    <Grid >
        <TextBlock Text="Bonjour Dynamics NAV, Je suis un contrôle WPF" FontSize="20" Foreground="#FFFF1A1A" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap"></TextBlock>

    </Grid>

</UserControl>

Revenant à notre Add-In Dynamics NAV; nous allons maintenant surcharger la méthode d’affichage “CreateControl” :

    [ControlAddInExport("WPF NAV")]
    [Description("WPF NAV")]
    public class NavWPFChart : StringControlAddInBase
    {

        protected override Control CreateControl()
        {
            ElementHost eh = new ElementHost();
            UserControl1 uc = new UserControl1();

            uc.B.Content = Control.Text;
            eh.Child = uc;
            eh.Width = 350;
            eh.Height = 250;

            return eh;
        }
    }

Dans ces lignes de code, nous avions ajouter un contrôle ElementHost, nous avions instancier le UserControl1 puis nous l’avions affecté à la propriété Child de l’ElementHost

Il suffit maintenant de compiler et générer la dll du projet et puis de la copier dans le répertoire “C:\Program Files (x86)\Microsoft Dynamics NAV\60\RoleTailored Client\Add-ins”

Dans l’Object Designer de Dynamics NAV, il faut l’enregistrer et puis l’utiliser dans une Page.

Pour plus d’information sur comment créer un contrôle Add-In dans Dynamics NAV, vous pouvez consulter la documentation MSDN :
https://msdn.microsoft.com/en-us/library/dd983826(v=NAV.60).aspx