Pour intégrer des fonctionnalités CTI a Dynamics NAV il faut deux éléments :

  • La fonction “Appeler”
  • La fonction de levée de fiche contact

La fonction Appeler

Vous avez la possibilité d’utiliser les types de données étendus pour que le client RTC comprend que la donnée est un n° de téléphone. Une nouvelle propriété dans les pages RTC de Dynamics NAV; ExtendedDataType qui représente le type de données <Phone No.>

image

Voici le résultat dans le client RTC :

image

Si vous disposez de l'installation appropriée et d'un téléphone compatible avec l'interface TAPI, lorsque vous cliquez sur ce bouton, l'assistant Téléphoner s'affiche.

La fonction Appeler avec d’autres interface

Vous pouvez aussi modifier le comportement du champ N° de téléphone pour qu’il lance la fonction Appeler une utilisant autre interface CTI.

Pour cela, l’utilisation des l’extensibilité client est un moyen simple et efficace.

image

Dans cette capture, le champ N° téléphone est affiché en utilisant l’affichage standard ExtendedDataType et le champ N° téléphone Add-In est affiché en utilisant un LinkLabel.

La fonction levée de fiche

Cette activité ce passe en deux actes :

  1. Appel au web service de Dynamics NAV : cela permet de rechercher la fiche contact ou de demander la création d’une nouvelle si le contact n’existe pas dans la base.
  2. Exécution du client RTC en spécifiant le bookmark envoyé par le web service qui correspond à la fiche contact demandée,

Vous pouvez télécharger cette solution qui comporte trois projets :

image

  • Le premier projet correspond à la dll qui pourra être appelée par l’interface CTI ;
  • Le deuxième, correspond à un Add-In pour appeler d’autre interface CTI que TAPI ;
  • Le troisième, c’est un projet de simulation d’un appel entrant.

Modification dans la page contact 

Cette modification me permet de récupérer le Bookmark de l’enregistrement que je souhaite afficher dans la page RTC.

Déclarer une variable ContactRecRef de type RecordRef                          

Dans le trigger OnInit, ajouter la ligne :
ContactRecRef.OPEN(5050);

Dans le trigger OnAfterGetRecord, ajouter la ligne :
ContactRecRef .SETPOSITION(GETPOSITION);

Ajouter un champ dans la page :

Name Caption Type SubType SourceExpr
Bookmark <Bookmark> Field   FORMAT(ContactRecRef.RECORDID,0,10)

Ce champ peut être invisible dans la page : Modifier la propriété Visible à FALSE.

DLL appelée par l’interface CTI

Voici le code de la méthode CallContact :

    public class  ContactMgmt

    {

        public static void  CallContact (string phoneno)

        {

           

            // Créer le binding compatible avec le web servic Microsoft Dynamics NAV

            BasicHttpBinding binding = new BasicHttpBinding();

            // Définir le mode de sécurité pour le binding basicHttpBinding

            binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

            // Définir l'authentication utilisée

            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

 

            EndpointAddress endpointAddress = new EndpointAddress(@"http://elyassir1.europe.corp.microsoft.com:7047/DynamicsNAV/WS/CRONUS France S.A./Page/CTI_Contact");

 

            CTI_Contact_PortClient contact = new CTI_Contact_PortClient(binding, endpointAddress);

 

            contact.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;

            contact.ClientCredentials.Windows.AllowNtlm = true;

 

            //Appliquer un filitre sur le champ Phone_No

            CTI_Contact_Filter[] filters = new CTI_Contact_Filter[1];

            filters[0] = new CTI_Contact_Filter();

            filters[0].Criteria = phoneno;

            filters[0].Field = CTI_Contact_Fields.Phone_No;

 

            //Lire la liste des contacts

            CTI_Contact[] contacts = contact.ReadMultiple(filters, string.Empty, 0);

 

            if (contacts.Count() > 0)

            {

                //Si un contact exitse, j'affiche sa fiche contact

                System.Diagnostics.Process.Start("DynamicsNAV:////runpage?page=5050&bookmark=" + contacts[0].Bookmark);

            }

            else

            {

                //Sinon, j'ouvre la page contact en mode création

                DialogResult result = MessageBox.Show("Ce n° de téléphone n'éxiste pas, \nSouhaitez vous créer un nouveau contact ?", "Nouvelle fiche contact", MessageBoxButtons.YesNo);

 

                if (result == DialogResult.Yes)

                {

                    System.Diagnostics.Process.Start("DynamicsNAV:////runpage?page=5050&mode=create");

                }               

            }

 

        }

 

Add-In CTI

    [ControlAddInExport("NAVCTI")]

    public class NAVCTIAddin : StringControlAddInBase

    {

        TextBox PhoneNo = new TextBox();

        protected override Control CreateControl()

        {

 

            LinkLabel PhoneCall = new LinkLabel();

            PhoneCall.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(PhoneCall_LinkClicked);

            return PhoneCall;

           

        }

 

        private void PhoneCall_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

        {

            //Ici vous pouvez ajouter les lignes de codes pour l'appel d'un API CTI

            MessageBox.Show("Appel télephonique : " + Value.ToString());

        }

 

    }

La dll doit être signée et copiée dans répertoire Roletailored/Add_Ins