Quantcast
Channel: CRM Development forum
Viewing all articles
Browse latest Browse all 8223

Plugin not updating Date Time Field using service.Update...

$
0
0

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


Viewing all articles
Browse latest Browse all 8223

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>