Hi everyone.
I have 3 custom fields. Paused Date, Resume Date and SLA date.
These values are populated using JS via a button.
I want to recalculate the SLA date based on the date/time difference of the Pause and Resume date.Plugin runs on Post-Operation, synchronous update.
namespace CalculatePausedTime { using System; using System.ServiceModel; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; public class CalculatePauseDate : IPlugin { public void Execute(IServiceProvider serviceProvider) { //Obtain the execution context from the service provider. IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); //Get a reference to the organisation service. IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = factory.CreateOrganizationService(context.UserId); // Get a reference to the tracing service. ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); try { Entity entity = (Entity)context.InputParameters["Target"]; Entity preImage = (Entity)context.PreEntityImages["preImage"]; Entity postImage = (Entity)context.PostEntityImages["postImage"]; if (context.Depth > 1) { return; } tracingService.Trace("Pre Image and Post Image Contains Status code"); OptionSetValue waitForInfo = preImage.Attributes["statuscode"] as OptionSetValue; OptionSetValue resumeNew = postImage.Attributes["statuscode"] as OptionSetValue; if (waitForInfo.Value == 345550005 && resumeNew.Value != 345550005) { //Get Time of Paused Date DateTime pauseDate = (DateTime)preImage.Attributes["apitil_pausedate"]; tracingService.Trace("Pause Date = " + pauseDate); //Get Time of Resume Date DateTime resumeDate = (DateTime)entity.Attributes["apitil_resumedate"]; tracingService.Trace("resumeDate = " + resumeDate); //Get Time of the SLA Due date DateTime slaDueDate = (DateTime)preImage.Attributes["apitil_sladuedate"]; tracingService.Trace("slaDueDate = " + slaDueDate); //Check the time difference between 2 dates TimeSpan span = resumeDate - pauseDate; tracingService.Trace("span= " + span); //Add the Difference to the SLA Due date slaDueDate += span; tracingService.Trace("New SLA Due Date= " + slaDueDate); service.Update(entity); } } catch (Exception e) { throw new InvalidPluginExecutionException("Error" + e); } } } }
It seems like when I debug the code it seems to be working fine and the slaDueDate variable contains the new Date.
But for some reason it is not updating the field?#
Here a pic of the tracing.. I have added a throw Invalidpluginexecution at the end of my code to see the trace.
I have removed this line when I try to run the plugin properly.
As you can see I have a new SLA Due date.... but it is not updating my field... I must be doing something stupid.
Anyone shed some light? Sorry I am still kind of new doing C# and plugin development.
Many Thanks.
Dave