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.
![]() |
|
![]() |
|
![]() |
|
![]() |
Software Engineering is the Systematic Approach for analysis design implementation... Read More
Spyware, what it is and what it does. Basically, spyware... Read More
Bill of Lading is required report for Logistics and Freight... Read More
If you are to buy a HelpDesk & Asset Management... Read More
We don't think about mainframe software pricing anymore, we just... Read More
Itâ??s easy to understand why you might be drawn to... Read More
Bad News - the Threat is Bigger than it SeemedHow... Read More
Great Plains Inventory Management (IV) module gives your business a... Read More
Many Webmasters have never bothered to view their website's server... Read More
Microsoft Business Solutions Great Plains has substantial market share among... Read More
Microsoft Business Solutions Great Plains is marketed for mid-size companies... Read More
Looks like Microsoft Great Plains becomes more and more popular,... Read More
Microsoft Office program is a programming tool called Visual Basic... Read More
The java programming language is becoming more and more popular... Read More
When it comes to running an office, the SOHO entrepreneur... Read More
TCO (Total Cost Ownership) is the buzzword in... Read More
Is Photoshop CS2 worth the upgrade? You bet it is!... Read More
Task Manager is a Windows system utility that displays thetasks... Read More
Think of this, first we had the HAM Radio, then... Read More
Let us give you - developer some hints in the... Read More
DBxtra is a powerful query and reporting tool that hides... Read More
Each Industry and market niche has business specific and unique... Read More
Microsoft Business Solutions is emerging as very attractive vendor for... Read More
Microsoft Business Solutions ? Great Plains has captured the US... Read More
COMMAND LINE FUNCTIONA powerful command line script processor has been... Read More
After seeing many people complain about their weak Internet security... Read More
Pirated software is on the increase and now accounts for... Read More
Blue Cross and Blue Shield of Hawaii (HMSA) found itself... Read More
NOTE: Please take time to read on - it may... Read More
In our small article we'll consider Microsoft Business Solutions Great... Read More
Just when you thought you were Web savvy, one more... Read More
Microsoft Great Plains is main Microsoft Business Solutions accounting package... Read More
Microsoft Business Solutions Great Plains is very good fit for... Read More
I have yet to see a business that, sometimes in... Read More
Are you a whiz at calculating financial information? Not the... Read More
While paper labeling CDs and DVDs may appear to be... Read More
New post-recession era has new features, which didn't exist in... Read More
Not every software testing project can or should be automated.... Read More
The term "document management" and "paperless office" is the subject... Read More
Three highly respected names in Human Resources have joined forces... Read More
This article is the first of a series of articles... Read More
Introduction To ISDN, Part III: Configuring PPP PAP AuthenticationNow we... Read More
Homeland security, airport security, Internet security â?" these days weâ??re... Read More
Whether you are an experienced web programmer or a complete... Read More
Microsoft Business Solutions Great Plains is very good fit for... Read More
In the early days of the personal computer, we're talking... Read More
So, why should you use any O/R mapping tool? I... Read More
ERP Consulting industry is on the way to serve clients... Read More
I have recently created my first Php program. I wanted... Read More
Manufacturing in the USA is far away down from mid... Read More
Accounts payable is just one area of office management where... Read More
Healthcare facilities such as clinics, hospitals, and biomedical laboratories can... Read More
We were recently faced with a decision: either to let... Read More
MSN messenger is a pretty cool invention. I mean I'm... Read More
In the real world a "fire wall" is a fireproof... Read More
Let's first look at your ERP system selection (without Retail... Read More
Hi, Guys,I believe a lot of programmers are trying to... Read More
Microsoft CRM was designed to be easily customizable. Microsoft CRM... Read More
Does Microsoft Have any Real Competition? Copyright (c) 2003 Gregory... Read More
Introduction to C++Why Learn C++?C++ may at first seem like... Read More
Microsoft Great Plains is main Microsoft Business Solutions accounting package... Read More
In this small article we will be looking at the... Read More
Microsoft bought Navision, Denmark based software development company, along with... Read More
Some introduction into Great Plains Software products, now Microsoft Business... Read More
Microsoft Business Solutions Great Plains was purchased from Great Plains... Read More
FTP stands for "file transfer protocol". FTP is basically a... Read More
Software |