Everything you wanted to know about parking but were too shy to ask . . . . . .

       



 
About Parking :
 
» HOME
» Domain Parking
» Auto And Trucks

» Business And Finance

» Computers And Internet

» Education

» Family

» Food And Drink

» Gadgets And Gizmos

» Health

» Hobbies

» Home Improvement

» Humor

» Kids And Teens

» Legal

» Marketing

» Men

» Music And Movies

» Online Business

» Parenting

» Pets And Animals

» Politics And Government

» Recreation And Sports

» Relationships

» Religion

» Self Improvement

» Site Promotion

» Travel And Leisure

» Web Design

» Women

» Writing

»
»
» Random Quotes
» Best Websites
 
Great Websites :
 

Aesop’s Fables

Fun & Games

Advertise Here

Amusement

Best Baby Names

Christmas Jokes

College Humor

Complete Nonsense

Fairy Tales

Famous Poems

Famous Quotes

Flowers

Framed Posters

Free Diet Plans

Free Song Lyrics

Free View Webcams

Friendship Quotes

Funny Cat Pictures

Funny Cats

Funny Jokes

Funny Jokes Online

Funny Pictures

Funny Poems

Funny Quotes

Ghosts

Ghost Pictures

Ghost Stories

Glaswegian

Healthy Recipes

Humorous Scripts

Humor Posters

Inspirational Poems

Insult Generator

Jokes

Knock Knock Jokes

Lighthouses

Limerick Poems

Limericks

Love Poems

Fantasy Books

Mockery

Model Posters

Movie Posters

Names Meanings

Rabbie Burns

Not Mensa

Parking

Photographs

Poet

Poker Articles

Posters

Quotations Online

Random Words

Riddles

Riddles Online

Odd Jokes

Spam

Sports Posters

Duck Webcam

Strange Laws

Stupid Laws

Tongue Twisters

Top 100 Baby Names

Trophies

Vodka

Webmaster Articles

Weird Animals

Weird Facts

Weird Websites

Weird

Whisky

Wine

Work From Home

Worst City

Worst Jokes

Worst Killers

 
 
 
 
 
Parking.gs
 

Facts and Articles on Parking and Other Interesting Topics

TOPIC: Computers And Internet

TITLE: Microsoft CRM Customization '“ programming Closed Email Activity

Article:

Microsoft CRM Customization '“ programming Closed Email Activity by: Boris Makushkin

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.ObjectType.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();

strPartiesXml += '';

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

strPartiesXml += '';

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.

borism@albaspectrum.com

This article was posted on October '25

<-- Previous     |     Next -->

 

If you found "Microsoft CRM Customization '“ programming Closed Email Activity" interesting then check out our other :

Parking Facts and Other Articles

 
Parking.gs
 
 
 
Interesting :
 

 
 
   
 
© Website Design Copyright 2009 by Parking.gs