Microsoft’s CRM is a Salesforce alternative to Microsoft that tries to capture market share from Siebel, Oracle, and other traditional Client Relationship Management System vendors. Microsoft CRM uses all the range of Microsoft new solutions:. Online, MS Exchange, MS Outlook, MS SQL Server, Replication, Indexing, Active Directory, Windows 2000/2003 safety type, C#, VB. Online, HTML, XML Web Service, XLTP, Browser to name a few.
Action of email type programming is the topic of yesterday’s discussion; you typically deal with these customizations when Microsoft Exchange CRM connection is improved. How do you produce a finished discussion? This is the main discussion point. We’ll apply C#. Online scripting
One of our Exchange Event Handler/Sink’s jobs involves creating MS CRM Closed Activity, which handles bothincoming and outgoing internet communications. Using the MS CRM SDK to handle inbound and outbound XML information and immediate access to the MS CRM Database, Microsoft CRM interacts with both. This first look at the Finished Action design engine:
1. First we need to know the entity we need to create activity for: Account, Lead or Contact. The choice may use a particular set of criteria, such as email address, in our case:
if ( ( crmAccount = crmConnector. GetAccount( mailbox From ) )! = null )
}
else if ( ( crmContact = crmConnector. GetContact( mailbox From ) )! = null )
}
else if ( ( crmLead = crmConnector. GetLead( mailbox From ) )! = null )
}
2. Then we have to find GUID of MS CRM users, who owns this object, C# script like this:
crmUser = crmConnector. GetUser( crmAccount. GetOwnerId( ) );
3. Next stage is closed Activity development:
emailId = crmConnector. CreateEmailActivity (
crmUser.GetId(),
Microsoft. Crm. Program. Forms. ObjectType. otAccount, crmAccount. GetId( ),
Microsoft. Crm. Software. Forms. ObjectType. otSystemUser, crmUser. GetId( ),
crmAccount. GetEmailAddress( ), crmUser. GetEmailAddress( ), sSubject, sBody );
4. The process to create closed action:
public Guid CreateEmailActivity( Guid userId, int fromObjectType, Guid fromObjectId, int toObjectType, Guid toObjectId, string mail From, string mailTo, string subject, string body )
try
logs. Debug(” Prepare for Mail Activity Creating” );
// BizUser proxy image
Microsoft. Crm. System. Vpn. BizUser bizUser = fresh Microsoft. Crm. Program. Vpn. BizUser( );
ICredentials credentials = new NetworkCredential(sysUserId, sysPassword, sysDomain );
bizUser. Url = crmDir+” BizUser. fs”;
bizUser. Certificates = qualifications;
Microsoft. Crm. System. Surrogate. CUserAuth userAuth = bizUser. WhoAmI( );
// CRMEmail proxy thing
Microsoft. Crm. System. Surrogate. CRMEmail email = fresh Microsoft. Crm. Software. Vpn. CRMEmail( );
contact. Qualifications = certificates;
message. Url = crmDir + “CRMEmail. converter”;
// Laid up the XML series for the task
strActivityXml =”” in series;
strActivityXml + =””;
strActivityXml + =”” )+” ] ] >”;
strActivityXml + =””;
strActivityXml + = userId. ToString (” B” ) +””;
strActivityXml + =””;
// Laid up the XML series for the task parties
strPartiesXml =””;
strPartiesXml + =””;
strPartiesXml + =”” + mailTo +””;
if ( toObjectType = = Microsoft. Crm. Software. Forms. ObjectType. otSystemUser )
strPartiesXml + =”” + Microsoft. Crm. Program. Forms. ObjectType. otSystemUser. ToString( ) +””;
}
else if ( toObjectType = = Microsoft. Crm. System. Forms. ObjectType. otAccount )
strPartiesXml + =”” + Microsoft. Crm. System. Forms. ObjectType. otAccount. ToString( ) +””;
}
else if ( toObjectType = = Microsoft. Crm. System. Forms. ObjectType. otContact )
strPartiesXml + =”” + Microsoft. Crm. Software. Forms. ObjectType. otContact. ToString( ) +””;
}
else if ( toObjectType = = Microsoft. Crm. Program. Forms. ObjectType. otLead )
strPartiesXml + =”” + Microsoft. Crm. Program. Forms. ObjectType. otLead. ToString( ) +””;
}
strPartiesXml + =”” + toObjectId. ToString (” B” ) +””;
strPartiesXml + =””;
strPartiesXml + = Microsoft. Crm. System. Forms. ACTIVITY_PARTY_TYPE. ACTIVITY_PARTY_TO_RECIPIENT. ToString( );
strPartiesXml + =””;
strPartiesXml + =””;
strPartiesXml + =””;
strPartiesXml + =”” + mailFrom +””;
if ( fromObjectType = = Microsoft. Crm. System. Forms. ObjectType. otSystemUser )
strPartiesXml + =”” + Microsoft. Crm. Program. Forms. ObjectType. otSystemUser. ToString( ) +””;
}
else if ( fromObjectType = = Microsoft. Crm. Software. Forms. ObjectType. otAccount )
strPartiesXml + =”” + Microsoft. Crm. System. Forms. ObjectType. otAccount. ToString( ) +””;
}
else if ( fromObjectType = = Microsoft. Crm. Software. Forms. ObjectType. otContact )
strPartiesXml + =”” + Microsoft. Crm. Software. Forms. ObjectType. otContact. ToString( ) +””;
}
else if ( fromObjectType = = Microsoft. Crm. Program. Forms. ObjectType. otLead )
strPartiesXml + =”” + Microsoft. Crm. Program. Forms. ObjectType. otLead. ToString( ) +””;
}
strPartiesXml + =”” + fromObjectId. ToString (” B” ) +””;
strPartiesXml + =””;
strPartiesXml + = Microsoft. Crm. Software. Forms. ACTIVITY_PARTY_TYPE. ACTIVITY_PARTY_SENDER. ToString( );
strPartiesXml + =””;
strPartiesXml + =””;
strPartiesXml + =””;
log.Debug(strPartiesXml);
// Create the e-mail image
Guid emailId = fresh Guid(email. Create(userAuth, strActivityXml, strPartiesXml ) );
gain emailId;
}
find ( System. Web. Services. Techniques. SoapException e )
logs. Debug( “ErrorMessage:” + electronic. Communication +”” + e. Detail. OuterXml+” Resource:” + e. Cause );
}
catch ( Excuse e )
register. Debug(e. Information+” \r
” + electronic. StackTrace );
}
return new Guid( );
}
5. You must set up the activity’s flags in accordance with MS CRM standards in order to make the newly created exercise display properly:
public void UpdateActivityCodes( Guid emailId )
try
OleDbCommand control = con. CreateCommand( );
order. CommandText = “UPDATE ActivityBase SET DirectionCode = ( )” ), multi theme interface StateCode = (? ), PriorityCode = (? ) WHERE ActivityId = (? )”;
command.Prepare();
control. Guidelines. Add( new OleDbParameter (” DirectionCode”, Microsoft. Crm. System. Forms. EVENT_DIRECTION. ED_INCOMING) );
demand. Criteria. Add( new OleDbParameter (” StateCode”, Microsoft. Crm. System. Forms. ACTIVITY_STATE. ACTS_CLOSED) );
order. Guidelines. Add( new OleDbParameter (” PriorityCode”, Microsoft. Crm. System. Forms. PRIORITY_CODE. PC_MEDIUM) );
order. Criteria. Add( new OleDbParameter (“ActivityId”, emailId ) );
register. Debug(” Prepare to update exercise password” + emailId. ToString (” B” )+” in ActivityBase” );
command.ExecuteNonQuery();
}
catch( Exception e )
register. Debug(e. Information+” \r
” + electronic. StackTrace );
}
}
public void UpdateActivity QueueCodes( Guid emailId, Guid queueId )
try
OleDbCommand control = con. CreateCommand( );
demand. SET Priority = ( )” if CommandText = “UPDATE QueueItemBase SET Priority = ( )”? ), State = (? ), QueueId = (? ) WHERE ObjectId = (? )”;
command.Prepare();
control. Criteria. Add( new OleDbParameter (” Priority”, Microsoft. Crm. Program. Forms. PRIORITY_CODE. PC_MEDIUM) );
control. Criteria. Add( new OleDbParameter (” State”, Microsoft. Crm. System. Forms. ACTIVITY_STATE. ACTS_CLOSED) );
demand. Criteria. Add( new OleDbParameter (” QueueId”, queueId ) );
order. Guidelines. Add( new OleDbParameter ( “ObjectId”, emailId ) );
logs. Debug(” Prepare to update task queue password” + emailId. ToString (” B” )+” in QueueItemBase” );
command.ExecuteNonQuery();
}
catch( Exception e )
register. Debug(e. Information+” \r
” + electronic. StackTrace );
}
}
Happy customizing, implementing and modifying! If you want us to do the work- give us a call 1-866-528-0577! support @albaspectrum. web