A year ago we got this answer from Avaya regarding Dynamics 365 and EMC 6.5:
The scope of SP1 was just to test as is with MS CRM 2016.
Hence only support for CRM 2016 was declared.
The upgrade to version 8 will need rebuild and testing (just upgrading dll’s does not work)
This will need a Grip and prioritized.
EMC Agent desktop application has included Microsoft.Crm.Sdk.Proxy.dll and Microsoft.Xrm.Sdk.dll version 6. This 2 libraries are used in compilation of EMC out-of-the-box integration ASMSCRMGuiPlugin.dll. This is what Avaya must fix to make it compatible with Dynamics 365.
Search the devConnect site for EMC plugin development template for Visual Studio. From there on, you can create new plugin and program what to do, when new incoming/preview/webchat/email interaction is received. From Microsoft site download the latest CRM SDK "Microsoft Dynamics 365 Software Development Kit (SDK)" and reference both files mentioned above into custom plugin. In the SDK you have also sample code how to connect to CRM and internet is full of examples how to create new CRM activities from webservices.
Then you just add your plugin to installation folder of EMC application and reference it in INI configuration file or profile in the Configuration Server. And also overwrite the old microsoft dll files with the new one.
Below you have key points how to implement custom CRM:
/// <summary>
/// Voice call is being delivered to the application
/// </summary>
void VoicePlugin_VoiceCallWorkItemRetrieved(object sender, AgileSoftware.ASGUIHVoicePlugin.VoiceCallWorkItemRetrievedEventArgs arg)
{
...
// Process new interaction
ProcessNewWorkItem(arg.DocumentWindowKey, WORK_ITEM_TYPE.Voice, (AgileSoftware.Multimedia.ASGQEWorkItemBase2)arg.VoiceWorkItem);
}
/// <summary>
/// Multimedia workitem (email, preview, sms, IM) was established in application
/// </summary>
void MediaController_WorkItemRefEstablished(object sender, AgileSoftware.Multimedia.Client.WorkItemRefEstablishedArgs arg)
{
...
// Process new interaction
ProcessNewWorkItem(WorkItemId, (WORK_ITEM_TYPE)arg.WorkItemType, (AgileSoftware.Multimedia.ASGQEWorkItemBase2)arg.WorkItemRef);
}
private void ProcessNewWorkItem(string DocumentWindowKey, WORK_ITEM_TYPE WorkItemType, AgileSoftware.Multimedia.ASGQEWorkItemBase2 WorkItem)
{
...
// interaction details are here
AgileSoftware.Multimedia.WorkItem.CustomerData CustomerData = WorkItem.GetCustomerData();
AgileSoftware.Multimedia.MediaStore.EMS.InboundEmail.EmailWorkItemData WorkItemData = (AgileSoftware.Multimedia.MediaStore.EMS.InboundEmail.EmailWorkItemData)WorkItem.GetWorkItemData();
AgileSoftware.Multimedia.MediaStore.EMS.Email.MimeMessage EmailMessage = new AgileSoftware.Multimedia.MediaStore.EMS.Email.MimeMessage(WorkItemData.EmailMessage);
...
// crm procedures
}
CRM find contact/account by number/email/...
// build search query
QueryExpression AccountsQuery = new QueryExpression
{
EntityName = "account",
ColumnSet = new ColumnSet("accountid", "name", "telephone1", "telephone2", "emailaddress1", "emailaddress2", "address1_line1", "address1_line2", "address1_line3", "address1_postalcode", "address1_city", "address1_country"),
Criteria = new string[] { "telephone1", "telephone2", "telephone3" }
};
DataCollection<Entity> accounts = crmproxy.RetrieveMultiple(AccountsQuery).Entities;
// do similar with contact search
...
// create from/to entities for phonecall activity
Entity fromParty = new Entity("activityparty");
Entity toParty = new Entity("activityparty");
toParty["partyid"] = isOutgoing ? accounts[0].ToEntityReference() : new EntityReference("systemuser", CrmConnector.GetCurrentUserId());
fromParty["partyid"] = !isOutgoing ? accounts[0].ToEntityReference() : new EntityReference("systemuser", CrmConnector.GetCurrentUserId());
// create phone call activity
Entity phonecall = new Entity("phonecall");
phonecall["subject"] = subject;
phonecall["actualstart"] = DateTime.Now;
phonecall["directioncode"] = isOutgoing;
phonecall["phonenumber"] = ANI;
phonecall["from"] = fromParty;
phonecall["to"] = toParty;
phonecallId = crmproxy.Create(phonecall);
// open created phonecall activity to agent so he can continue in CRM workflow (phone activity >> case / incident / ...)
// https://crmserver/activities/phone/edit.aspx?id= + phonecallId