Software informational articles

Microsoft crm customization secrets ? back up journal - software


This commentary is for cutting edge Microsoft CRM SDK C# developers. It describes the modus operandi of address SQL programming, when SDK doesn't have the functionality to do the job.

Introduction. Looks like Microsoft CRM becomes more and more popular, in part as of Microsoft muscles after it. Now it is under attack to the whole spectrum of horizontal and vertical bazaar clientele. It is tightly integrated with other Microsoft Affair Solutions foodstuffs such as Microsoft Great Plains, Solomon, Navision (the last two in progress).

Here we depict the performance of creating clogged activity-email using MS CRM SDK and address SQL programming.

Imaging amazing like this. You need to carry out incoming email ahead of it is committed to MS Argument database. You need to dissect if incoming email doesn't have GUID in its Branch of learning (GUID will allow MS CRM Barter Connector to move email to Microsoft CRM and add it to the Contact, Balance or Lead) - then you still need to lookup MS CRM in case if one of the accounts, contacts or leads has email adopt that matches with sender email attend to - then you need to build bunged activity-email in MS CRM, fond of to the aim and positioned into broad-spectrum queue.

How to construct MS Barter handler is exterior of the scope, delight see this article:

http://www. albaspectrum. com/Customizations_Whitepapers/Dexterity_SQL_VBA_Crystal/ExchangeHandlerExample. htm

Now the code below is classical MS CRM SDK and it will conceive bustle email:

public Guid CreateEmailActivity(Guid userId, int objectType, Guid objectId, line mailFrom, CRMUser crmUser, line subject, filament body) {

try {

log. Debug("Prepare for Mail Bustle Creating");

// BizUser proxy object

Microsoft. Crm. Platform. Proxy. BizUser bizUser = new Microsoft. Crm. Platform. Proxy. BizUser();

ICredentials diploma = 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 line for the activity

string strActivityXml = "";

strActivityXml += "";

strActivityXml += "") + "]]>";

strActivityXml += "";

strActivityXml += userId. ToString("B") + "";

strActivityXml += "";

// Set up the XML filament for the doings parties

string strPartiesXml = "";

strPartiesXml += "";

strPartiesXml += "" + crmUser. GetEmailAddress() + "";

strPartiesXml += "" + Microsoft. Crm. Platform. Types. ObjectType. otSystemUser. ToString() + "";

strPartiesXml += ""+ crmUser. GetId(). ToString("B") + "";

strPartiesXml += "";

strPartiesXml += Microsoft. Crm. Platform. Types. ACTIVITY_PARTY_TYPE. ACTIVITY_PARTY_TO_RECIPIENT. ToString();

strPartiesXml += "";

strPartiesXml += "";

strPartiesXml += "";

strPartiesXml += "" + mailFrom + "";

if (objectType == Microsoft. Crm. Platform. Types. ObjectType. otAccount) {

strPartiesXml += "" + Microsoft. Crm. Platform. Types. ObjectType. otAccount. ToString() + "";


else if (objectType == Microsoft. Crm. Platform. Types. ObjectType. otContact) {

strPartiesXml += "" + Microsoft. Crm. Platform. Types. ObjectType. otContact. ToString() + "";


else if (objectType == Microsoft. Crm. Platform. Types. ObjectType. otLead) {

strPartiesXml += "" + Microsoft. Crm. Platform. Types. ObjectType. otLead. ToString() + "";


strPartiesXml += ""+ objectId. ToString("B") + "";

strPartiesXml += "";

strPartiesXml += Microsoft. Crm. Platform. Types. ACTIVITY_PARTY_TYPE. ACTIVITY_PARTY_SENDER. ToString();

strPartiesXml += "";

strPartiesXml += "";

strPartiesXml += "";

log. Debug(strPartiesXml);

// Conceive 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();


Our credits to Anna Osborn (so clearly small abridged aquarium goes to her - smile!), she let us know how to close MS CRM Activity:

//creates the activity

strActivityId = oActivity. Create(userAuth, strXml, activityPartyXml);

//closes it as long as the applicable fields are absolute oActivity. Close(userAuth, strActivityId, -1);

But in any case doesn't matter what you find below could help you to do anything CRM SDK can't.

Now I would like to share the trick with you - there is no logic to make this action clogged in MS CRM SDK 1. 2 (if a bigwig knows the one - I owe you small abridged aquarium - smile!). Evidently Microsoft doesn't aid if you do aim SQL training bypassing SDK. Nevertheless I would say this is not as the crow flies items conception - this is instead flags correction. So here is what we have - this formula will do the job and make doings closed:

public void UpdateActivityCodes(Guid emailId) {

try {

OleDbCommand appreciation = 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 bring up to date bustle code " + emailId. ToString("B") + " in ActivityBase");

command. ExecuteNonQuery();


catch(Exception e) {

log. Debug(e. Message + " " + e. StackTrace);



Happy customizing! if you want us to do the job - give us a call 1-866-528-0577! help@albaspectrum. com

About The Author

Andrew Karasev is Chief Equipment Executive in Alba Spectrum Technologies - USA countrywide Microsoft CRM, Microsoft Great Plains customization company, based in Chicago, Arizona, California, Colorado, Texas, New York, Georgia, Florida, Canada, UK, Australia and having locations in many states and worldwide , he is Dexterity, SQL, C#. Net, Gem Gossip and Microsoft CRM SDK developer; akarasev@albaspectrum. com

Developed by:
home | site map © 2018