Cet article est pour les réalisateurs avançés de Microsoft CRM SDK C#. Il décrit la technique du SQL direct programmant, quand SDK n'a pas la fonctionnalité pour faire le travail.
Introduction. Les ressembler à Microsoft CRM devient de plus en plus populaire, en partie en raison des muscles de Microsoft derrière lui. Maintenant il est visé au spectre entier de la clientèle horizontale et verticale du marché. Il est étroitement intégré avec d'autres produits de solutions d'affaires de Microsoft tels que de grandes plaines de Microsoft, Solomon, Navision (les deux derniers en marche).
Ici nous décrivons la technique de créer activité-email fermé en utilisant MME. CRM SDK et dirigeons la programmation de SQL.
Formation image n'importe quoi de pareil. Vous devez manipuler l'email entrant avant qu'il soit commis à la base de données de MME. échange. Vous devez analyser si l'email entrant n'aurait pas GUID dans son sujet (GUID permettra au connecteur d'échange de MME. CRM de déplacer l'email à Microsoft CRM et de l'attacher au contact, au compte ou au fil) - alors vous a besoin toujours de MME. CRM de consultation au cas où si un des comptes, entre en contact ou les fils a l'email address qui des matchs avec l'email address d'expéditeur - alors vous devez créer activité-email fermé dans MME. CRM, attachée à l'objet et placée dans la file d'attente générale.
Comment créer le traiteur de MME. échange est en dehors de de la portée, voient svp cet article :
Maintenant le code ci-dessous est MME. classique CRM SDK et il créera l'email d'activité :
Guid public CreateEmailActivity (identification de l'utilisateur de Guid, objectType interne, objectId de Guid, mailFrom de corde, crmUser de CRMUser, sujet de corde, corps de corde) {
essai {
notation. Corriger (« se préparer à l'activité de courrier créant ») ;
Objet de procuration de // BizUser
bizUser de Microsoft.Crm.Platform.Proxy.BizUser = nouveau Microsoft.Crm.Platform.Proxy.BizUser () ;
Qualifications d'ICredentials = nouveau NetworkCredential (sysUserId, sysPassword, sysDomain) ;
bizUser.Url = crmDir + « BizUser.srf » ;
bizUser.Credentials = qualifications ;
userAuth de Microsoft.Crm.Platform.Proxy.CUserAuth = bizUser.WhoAmI () ;
Objet de procuration de // CRMEmail
Microsoft.Crm.Platform.Proxy.CRMEmail email = nouveau Microsoft.Crm.Platform.Proxy.CRMEmail () ;
email. Qualifications = qualifications ;
email. URL = crmDir + « CRMEmail.srf » ;
// a établi la corde de XML pour l'activité
strActivityXml = "" de corde ;
"" du strActivityXml += ;
"" du strActivityXml +=) + « ]] > » ;
"" du strActivityXml += ;
strActivityXml += userId.ToString (« B ») + "" ;
"" du strActivityXml += ;
// a établi la corde de XML pour les parties d'activité
strPartiesXml = "" de corde ;
"" du strPartiesXml += ;
"" du strPartiesXml += + crmUser.GetEmailAddress () + "" ;
"" du strPartiesXml += + Microsoft.Crm.Platform.Types.ObjectType.otSystemUser.ToString () + "" ;
"" du strPartiesXml += + crmUser.GetId () .ToString (« B ») + "" ;
"" du strPartiesXml += ;
strPartiesXml += Microsoft.Crm.Platform.Types.ACTIVITY_PARTY_TYPE.ACTIVITY_PARTY_TO_RECIPIENT.ToString () ;
"" du strPartiesXml += ;
"" du strPartiesXml += ;
"" du strPartiesXml += ;
"" + mailFrom + "" du strPartiesXml += ;
si (== Microsoft.Crm.Platform.Types.ObjectType.otAccount d'objectType) {
"" du strPartiesXml += + Microsoft.Crm.Platform.Types.ObjectType.otAccount.ToString () + "" ;
}
autrement si (== Microsoft.Crm.Platform.Types.ObjectType.otContact d'objectType) {
"" du strPartiesXml += + Microsoft.Crm.Platform.Types.ObjectType.otContact.ToString () + "" ;
}
autrement si (== Microsoft.Crm.Platform.Types.ObjectType.otLead d'objectType) {
"" du strPartiesXml += + Microsoft.Crm.Platform.Types.ObjectType.otLead.ToString () + "" ;
}
"" du strPartiesXml += + objectId.ToString (« B ») + "" ;
"" du strPartiesXml += ;
strPartiesXml += Microsoft.Crm.Platform.Types.ACTIVITY_PARTY_TYPE.ACTIVITY_PARTY_SENDER.ToString () ;
"" du strPartiesXml += ;
"" du strPartiesXml += ;
"" du strPartiesXml += ;
notation. Corriger (strPartiesXml) ;
// créent l'objet d'E-mail
emailId de Guid = nouveau Guid (email. Créer (userAuth, strActivityXml, strPartiesXml));
renvoyer l'emailId ;
}
attraper (System.Web.Services.Protocols.SoapException e) {
notation. Corriger (« ErrorMessage : » + e.Message + « « + e.Detail.OuterXml + » source : « + e.Source) ;
}
crochet (exception e) {
notation. Corriger (e.Message + « « + e.StackTrace) ;
}
renvoyer nouveau Guid () ;
}
Nos crédits à Anna Osborn (l'aquarium tellement évidemment petit de poche va à elle - le sourire !), elle nous a faits savoir clôturer l'activité de MME. CRM :
//creates l'activité
strActivityId = oActivity.Create (userAuth, strXml, activityPartyXml) ;
//closes il tant que les champs appropriés sont oActivity.Close complets (userAuth, strActivityId, -1) ;
Mais de toute façon celui que vous trouviez ci-dessous pourrait vous aider à faire celui que CRM SDK ne puisse pas.
Maintenant je voudrais partager le tour avec toi - il n'y a aucune méthode pour faire cette activité clôturée dans MME. CRM SDK 1.2 (si quelqu'un connaît celui - que je te dois le petit aquarium de poche - sourire !). Évidemment Microsoft ne soutient pas si vous dirigez le SQL programmant déviant SDK. Cependant je dirais que ce n'est pas création d'objets directs - c'est marque plutôt la correction. Tellement voici ce que nous avons - ce procédé fera le travail et fera l'activité clôturée :
public UpdateActivityCodes vide (emailId de Guid) {
essai {
Commande d'OleDbCommand = conn.CreateCommand () ;
command.CommandText = « MISE À JOUR ActivityBase DirectionCode RÉGLÉ = (?), StateCode = (?), PriorityCode = (?) LÀ OÙ ActivityId = (?) » ;
commande. Préparer () ;
commande. Parameters.Add (nouvel OleDbParameter (« DirectionCode », Microsoft.Crm.Platform.Types.EVENT_DIRECTION.ED_INCOMING));
commande. Parameters.Add (nouvel OleDbParameter (« StateCode », Microsoft.Crm.Platform.Types.ACTIVITY_STATE.ACTS_CLOSED));
commande. Parameters.Add (nouvel OleDbParameter (« PriorityCode », Microsoft.Crm.Platform.Types.PRIORITY_CODE.PC_MEDIUM));
commande. Parameters.Add (nouvel OleDbParameter (« ActivityId », emailId));
notation. Corriger (« préparer pour mettre à jour le code d'activité » + emailId.ToString (« B ») + » dans ActivityBase ") ;
command.ExecuteNonQuery () ;
}
attraper (exception e) {
notation. Corriger (e.Message + « « + e.StackTrace) ;
}
}
Adapter heureux ! si vous voulez que nous fassent le travail - nous donner un appel 1-866-528-0577 ! help@albaspectrum.com