Microsoft CRM is CRM answer from Microsoft and attempt to get market share from Siebel, Oracle and others traditional Client Relationship Management System vendors. Microsoft CRM uses all the spectrum of Microsoft recent technologies: .Net, MS Exchange, MS Outlook, MS SQL Server, Replication, Indexing, Active Directory, Windows 2000/2003 security model, C#, VB.Net, HTML, XML Web Service, XLTP, Javascript to name a few.
Today's topic is Activity of email type programming - you usually deal with these customizations when you improve Microsoft Exchange CRM connector. How do you create closed activity - this is the main discussion topic. We'll use C#.Net coding
One of the roles of our Exchange Event Handler/Sink is creation MS CRM Closed Activity in handling incoming and outgoing email messages. The interaction with Microsoft CRM uses two approached ? using MS CRM SDK (handling inbound and outbound XML messages) and via direct access to MS CRM Database. Let's first look at the Closed Activity creation algorithm:
1. First we need to understand the entity we need to create activity for: Account, Lead or Contact. The selection should use specific criteria ? in our case this is email address:
if ((crmAccount = crmConnector.GetAccount(mailboxFrom)) != null) {
}
else if ((crmContact = crmConnector.GetContact(mailboxFrom)) != null) {
}
else if ((crmLead = crmConnector.GetLead(mailboxFrom)) != null) {
}
2. Then we have to get GUID of MS CRM user, who owns this entity, C# code like this:
crmUser = crmConnector.GetUser(crmAccount.GetOwnerId());
3. Next step is closed Activity creation:
emailId = crmConnector.CreateEmailActivity(
crmUser.GetId(),
Microsoft.Crm.Platform.Types.ObjectTy pe.otAccount, crmAccount.GetId(),
Microsoft.Crm.Platform.Types.ObjectType.otSystemUser, crmUser.GetId(),
crmAccount.GetEmailAddress(), crmUser.GetEmailAddress(), sSubject, sBody);
4. The method to create closed activity:
public Guid CreateEmailActivity(Guid userId, int fromObjectType, Guid fromObjectId, int toObjectType, Guid toObjectId, string mailFrom, string mailTo, string subject, string body) {
try {
log.Debug("Prepare for Mail Activity Creating");
// BizUser proxy object
Microsoft.Crm.Platform.Proxy.BizUser bizUser = new Microsoft.Crm.Platform.Proxy.BizUser();
ICredentials credentials = new NetworkCredential(sysUserId, sysPassword, sysDomain);
bizUser.Url = crmDir + "BizUser.srf";
bizUser.Credentials = credentials;
Microsoft.Crm.Platform.Proxy.CUserAuth userAuth = bizUser.WhoAmI();
// CRMEmail proxy object
Microsoft.Crm.Platform.Proxy.CRMEmail email = new Microsoft.Crm.Platform.Proxy.CRMEmail();
email.Credentials = credentials;
email.Url = crmDir + "CRMEmail.srf";
// Set up the XML string for the activity
string strActivityXml = "";
strActivityXml += "";
strActivityXml += "") + "]]>";
strActivityXml += "";
strActivityXml += userId.ToString("B") + "";
strActivityXml += "";
// Set up the XML string for the activity parties
string strPartiesXml = "";
strPartiesXml += "";
strPartiesXml += "" + mailTo + "";
if (toObjectType == Microsoft.Crm.Platform.Types.ObjectType.otSystemUser) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otSystemUser.ToString() + "";
}
else if (toObjectType == Microsoft.Crm.Platform.Types.ObjectType.otAccount) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otAccount.ToString() + "";
}
else if (toObjectType == Microsoft.Crm.Platform.Types.ObjectType.otContact) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otContact.ToString() + "";
}
else if (toObjectType == Microsoft.Crm.Platform.Types.ObjectType.otLead) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otLead.ToString() + "";
}
strPartiesXml += ""+ toObjectId.ToString("B") + "";
strPartiesXml += "";
strPartiesXml += Microsoft.Crm.Platform.Types.ACTIVITY_PARTY_TYPE.ACTIVITY_PARTY_TO_RECIPIENT.ToString();
strPa rtiesXml += "";
strPartiesXml += "";
strPartiesXml += "";
strPartiesXml += "" + mailFrom + "";
if (fromObjectType == Microsoft.Crm.Platform.Types.ObjectType.otSystemUser) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otSystemUser.ToString() + "";
}
else if (fromObjectType == Microsoft.Crm.Platform.Types.ObjectType.otAccount) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otAccount.ToString() + "";
}
else if (fromObjectType == Microsoft.Crm.Platform.Types.ObjectType.otContact) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otContact.ToString() + "";
}
else if (fromObjectType == Microsoft.Crm.Platform.Types.ObjectType.otLead) {
strPartiesXml += "" + Microsoft.Crm.Platform.Types.ObjectType.otLead.ToString() + "";
}
strPartiesXml += ""+ fromObjectId.ToString("B") + "";
strPartiesXml += "";
strPartiesXml += Microsoft.Crm.Platform.Types.ACTIVITY_PARTY_TYPE.ACTIVITY_PARTY_SENDER.ToString();
strPartiesX ml += "";
strPartiesXml += "";
strPartiesXml += "";
log.Debug(strPartiesXml);
// Create the e-mail object
Guid emailId = new Guid(email.Create(userAuth, strActivityXml, strPartiesXml));
return emailId;
}
catch (System.Web.Services.Protocols.SoapException e) {
log.Debug("ErrorMessage: " + e.Message + " " + e.Detail.OuterXml + " Source: " + e.Source);
}
catch (Exception e) {
log.Debug(e.Message + " " + e.StackTrace);
}
return new Guid();
}
5. To make the activity just created be shown correctly you need to setup it's flags according to MS CRM standards:
public void UpdateActivityCodes(Guid emailId) {
try {
OleDbCommand command = conn.CreateCommand();
command.CommandText = "UPDATE ActivityBase SET DirectionCode = (?), StateCode = (?), PriorityCode = (?) WHERE ActivityId = (?)";
command.Prepare();
command.Parameters.Add(new OleDbParameter("DirectionCode", Microsoft.Crm.Platform.Types.EVENT_DIRECTION.ED_INCOMING));
command.Parameters.Add(new OleDbParameter("StateCode", Microsoft.Crm.Platform.Types.ACTIVITY_STATE.ACTS_CLOSED));
command.Parameters.Add(new OleDbParameter("PriorityCode", Microsoft.Crm.Platform.Types.PRIORITY_CODE.PC_MEDIUM));
command.Parameters.Add(new OleDbParameter("ActivityId", emailId));
log.Debug("Prepare to update activity code " + emailId.ToString("B") + " in ActivityBase");
command.ExecuteNonQuery();
}
catch(Exception e) {
log.Debug(e.Message + " " + e.StackTrace);
}
}
public void UpdateActivityQueueCodes(Guid emailId, Guid queueId) {
try {
OleDbCommand command = conn.CreateCommand();
command.CommandText = "UPDATE QueueItemBase SET Priority = (?), State = (?), QueueId = (?) WHERE ObjectId = (?)";
command.Prepare();
command.Parameters.Add(new OleDbParameter("Priority", Microsoft.Crm.Platform.Types.PRIORITY_CODE.PC_MEDIUM));
command.Parameters.Add(new OleDbParameter("State", Microsoft.Crm.Platform.Types.ACTIVITY_STATE.ACTS_CLOSED));
command.Parameters.Add(new OleDbParameter("QueueId", queueId));
command.Parameters.Add(new OleDbParameter("ObjectId", emailId));
log.Debug("Prepare to update activity queue code " + emailId.ToString("B") + " in QueueItemBase");
command.ExecuteNonQuery();
}
catch(Exception e) {
log.Debug(e.Message + " " + e.StackTrace);
}
}
Happy customizing, implementing and modifying! If you want us to do the job - give us a call 1-866-528-0577! help@albaspectrum.com
About The Author
Boris Makushkin is Lead Software Developer in Alba Spectrum Technologies ? USA nationwide Microsoft CRM, Microsoft Great Plains customization company, based in Chicago, Boston, San Francisco, San Diego, Los Angeles, Houston, Dallas, Atlanta, Miami, Montreal, Toronto, Vancouver, Madrid, Moscow, Europe and internationally (www.albaspectrum.com), he is Microsoft CRM SDK, C#, VB.Net, SQL, Oracle, Unix developer. Boris can be reached: 1-866-528-0577 or borism@albaspectrum.com.
|
|
|
|
|
|
|
|
|
|
|


This is intermediate level SQL scripting article for DB Administrator,... Read More
Microsoft Business Solutions Great Plains has full-featured manufacturing set of... Read More
Ok... Where to start?Well, I guess I will start at... Read More
We would like first emphasize the change in the paradigm.... Read More
The Software 2005 conference is now a wrap. This conference,... Read More
Hi, Guys,I believe a lot of programmers are trying to... Read More
Are you lost in the mess of documents that get... Read More
Microsoft released Service Pack 2 (SP2) for the Windows XP... Read More
Microsoft Great Plains is main Microsoft Business Solutions product, targeted... Read More
Great Plains Fixed Assets Management module is a robust tool... Read More
Looks like Microsoft Great Plains becomes more and more popular,... Read More
A wiki is an editable text-based website. But you don't... Read More
Just the thought of a duel-boot scares many people away,... Read More
Stealing company information used to be the specialty of spies... Read More
We all take the computer for granted. I mean, all... Read More
If you have Microsoft Great Plains and support it... Read More
Have you noticed WordPerfect is gearing up for a comeback... Read More
ERP Consulting industry is on the way to serve clients... Read More
Microsoft Business Solutions offers several ERP applications: Great Plains, Navision,... Read More
The title of "software engineer" has got to be among... Read More
Microsoft Business Solutions Small Business Manager is Great Plains Dexterity... Read More
If your company has regional and worldwide operations, you might... Read More
The first topic we are going to discuss... Read More
Healthcare facilities such as clinics, hospitals, and biomedical laboratories can... Read More
Ad-Aware and Spybot are probably the two most well known... Read More
Microsoft Great Plains, designed back in 1990th as database transferable... Read More
Microsoft Great Plains and Microsoft Retail Management System (Microsoft RMS)... Read More
After almost two decades of existence, Quark has become the... Read More
ERP is the acronym of Enterprise Resource Planning. Multi-module ERP... Read More
Remember old good days when your company probably had Great... Read More
Language development computer: Computer-based method for aiding language development seems... Read More
Microsoft Great Plains and Microsoft Retail Management System (Microsoft RMS)... Read More
Microsoft PowerPoint has dramatically changed the way in which academic... Read More


In part III of this ISDN primer, we learned that... Read More
Need software to record your voice, streaming audio or musical... Read More
Collaboration SoftwareCollaboration Software, also known as group collaboration software or... Read More
Customer Relationship Management or CRM is a combination of enterprise... Read More
Currently Microsoft Business Solutions is on the way of creating... Read More
Microsoft Business Solutions CRM and IBM Lotus Notes Domino, being... Read More
Sticky Noteshttp://www.deprice.com/stickynote.htmWith StickyNote 9.0, you can create beautiful 3D notes... Read More
We would like to give you pluses and minuses of... Read More
The vast majority of us will have, at some point,... Read More
eStore Advantage allows front-office applications to communicate with back-office business... Read More
The Microsoft system preparation utility for Windows 2000 is a... Read More
2005 ? Back to the Future.What does the future hold?... Read More
Microsoft Business Solutions Great Plains is marketed for mid-size companies... Read More
In order to implement VLANs in a network environment, you'll... Read More
IBM Lotus Notes Domino and Microsoft CRM (Client Relation Management)... Read More
Microsoft CRM was designed to be easily customizable. Microsoft CRM... Read More
Microsoft Business Solutions Great Plains is very generic accounting application... Read More
There are many commands that are used in linux on... Read More
The most important things you can do for your computer... Read More
Microsoft Business Solutions Great Plains, former Great Plains Software Dynamics... Read More
Some introduction into Great Plains Software products, now Microsoft Business... Read More
This article is the fourth of a series of articles... Read More
If you're online using a dialup Internet connection, you'll probably... Read More
Are you a whiz at calculating financial information? Not the... Read More
IntroductionDuring the early years of our modern computer era, very... Read More
No matter how much you enjoy your favorite screensavers, sometimes... Read More
Microsoft Business Solutions Great Plains has many years of successful... Read More
When Great Plains Software was designing and developing Great Plains... Read More
Which Type of Shop Can Rely On A Home Built... Read More
The term "document management" and "paperless office" is the subject... Read More
All your software is stored on a hard-drive. But how... Read More
It could just be me, but my experiences with document... Read More
The Software 2005 conference is now a wrap. This conference,... Read More
Software |