Pour intégrer des fonctionnalités CTI a Dynamics NAV il faut deux éléments :
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.>
Voici le résultat dans le client RTC :
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.
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 :
Vous pouvez télécharger cette solution qui comporte trois projets :
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 :
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