CRM 2011 après l'Opération Plugin Primaire de l'entité n'existe pas lors de la tentative d'enregistrement d'une entité référencée

Je tente de créer un plugin pour un terrain de Dynamics CRM 2011 installation.

J'ai enregistré le plugin comme suit:

  • Message: Créer
  • Entité principale: Contact
  • Stade de l'exécution: Post-opératoire
  • Mode d'exécution: Synchrone
  • Ordre d'exécution: 1

Plugin code comme suit:

public void Execute(IServiceProvider serviceProvider)
{
var pluginExecContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var orgServiceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var orgService = orgServiceFactory.CreateOrganizationService(pluginExecContext.UserId);
var orgServiceContext = new OrganizationServiceContext(orgService);
var tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
if (pluginExecContext.InputParameters.Contains("Target") &&
pluginExecContext.InputParameters["Target"] is Entity)
{
var target = (Entity)pluginExecContext.InputParameters["Target"];
if (target.LogicalName != Contact.EntityLogicalName) 
return;
try
{
var customerServicesUser = orgServiceContext.CreateQuery(SystemUser.EntityLogicalName)
.Where(x => (string)x["fullname"] == "Customer Services").FirstOrDefault();
if (customerServicesUser == null)
throw new InvalidPluginExecutionException("No Customer Services user exists.");
var sendEmail = new cdi_sendemail
{
cdi_fromrecordowner = false,
cdi_contactid = new EntityReference(Contact.EntityLogicalName, pluginExecContext.PrimaryEntityId),
cdi_fromid = new EntityReference(SystemUser.EntityLogicalName, customerServicesUser.Id)
};
tracingService.Trace("PostContactCreate plug-in: Creating the cdi_sendemail entity.");
orgService.Create(sendEmail);
}
catch (FaultException<OrganizationServiceFault> ex)
{
throw new InvalidPluginExecutionException("An error occurred in the PostContactCreate plug-in.", ex);
}
catch (Exception ex)
{
tracingService.Trace("PostContactCreate plug-in: {0}", ex.ToString());
throw;
}
}
}

Quand j'ai le profil le plugin à l'aide de la pluginregistration de l'outil et de déboguer l'exception d'erreur que j'obtiens l'erreur suivante:

Contact Avec l'Id = abbc7e0a-20a0-e111-a36e-005056860004 N'Existe Pas.

Qui je sorte de comprendre que le plugin est en cours d'exécution dans une transaction SQL qui n'a pas encore commis. Le "FollowupPlugin" au sein de la CRM SDK échantillons, ce qui crée également une entité référencée, déclare qu'il doit être enregistré de manière asynchrone, ce qui serait logique puisque cela permet de la transaction SQL de commettre.

Donc je suppose que ma question est, comment voulez-vous créer une entité référencée dans synchrone plugin?

OriginalL'auteur Godders | 2012-05-17