CTI et Dynamics NAV RTC
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.>
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 :
- 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.
- 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 :
- 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(@"https://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