Here, when a custom entity is created or updated, I am updating a varchar field in the related contact entity
public void Execute(IPluginExecutionContext context)
{
DynamicEntity entity=null;
//Check if the input parameters contains a target of type Dynamic Entity
if (context.InputParameters.Properties.Contains("Target") &&
context.InputParameters.Properties["Target"] is DynamicEntity)
{
//obtain the entity from the input parameters
entity = (DynamicEntity)context.InputParameters.Properties["Target"];
//TextWriter log1 = TextWriter.Synchronized(File.AppendText(@"D:\Srihari Backup\Log.txt"));
if (entity.Name == "new_testEntity")
{
try
{
//log1.WriteLine("inside try");
DynamicEntity testEntity= (DynamicEntity)context.InputParameters[ParameterName.Target];
string clinicName = String.Empty;
string contactId= String.Empty;
if (testEntity.Properties.Contains("new_clinicname"))
{
clinicName = (string)testEntity["new_clinicname"];
//log1.WriteLine(clinicName);
}
if (context.MessageName == MessageName.Create)
{
if (testEntity.Properties.Contains("new_contactid"))
{
//log1.WriteLine("contains patient id");
//Since the contact is a lookup, cast the object as a lookup.
//log1.WriteLine("create message :-");
Lookup contactLookup = (Lookup)testEntity["new_contactid"];
contactLookup.type = EntityName.contact.ToString();
contactId= contactLookup.Value.ToString(); //get the guid of the lookup
}
}
else if (context.MessageName == MessageName.Update)
{
//log1.WriteLine("update message :-");
//Since this is an update, only the values updated on the form will be available in the context. Hence I am getting the value from an Image that I have registered.
DynamicEntity postTestEntity = (DynamicEntity)context.PostEntityImages["contactId"];//The name or 'entityalias' of the image
//log1.WriteLine(postCCProvider);
Lookup contactLookup = (Lookup)postTestEntity.Properties["new_contactid"];
//log1.WriteLine(patientLookup);
contactId = contactLookup.Value.ToString();
//log1.WriteLine(patientId);
//log1.Close();
}
DynamicEntity contact = new DynamicEntity();
contact.Name = EntityName.contact.ToString();
Key contactKey = new Key();
contactKey.Value = new Guid(contactId);
KeyProperty contactGuid = new KeyProperty();
contactGuid.Name = "contactid";
contactGuid.Value = contactKey;
contact.Properties.Add(contactGuid);
//set the field that needs to be updated in the contact entity.
StringProperty ccProviderNameProperty = new StringProperty("new_communitycareprovider", clinicName);
contact.Properties.Add(ccProviderNameProperty);
ICrmService service = context.CreateCrmService(true);
service.Update(contact);
}
catch (SoapException soapEx)
{
//log1.Close();
throw new InvalidPluginExecutionException("Soap error occured in the plugin", soapEx);
}
catch (Exception ex)
{
//log1.WriteLine(ex.Message);
//log1.Close();
throw new InvalidPluginExecutionException("An error occured in the plugin", ex);
}
}
}
else
{
return;
}
}
No comments:
Post a Comment