Saturday, 25 July 2015

Sample Plugins



public class Class1:IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {

            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            ITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
             SamplePlugins handler1 = new SamplePlugins(service, tracing, context);
            handler1.createRecords();
        }
    }


///////////////////////////////////////////////////////////////

 class SamplePlugins
    {
        private IOrganizationService service;
        private ITracingService trace;
        private IPluginExecutionContext context;
      //DateTime dt=new DateTime()
     
        public SamplePlugins(IOrganizationService service,ITracingService trace, IPluginExecutionContext context)
        {
            this.context = context;
            this.trace = trace;
            this.service = service;
        }

        internal void createRecords()
         {
             Entity obj = new Entity("new_students");
             obj.Attributes["new_name"] = "ADBCD";
             obj.Attributes["new_rates"] = new Money(4555);
             DateTime adat = Handlers.GetLocalTime(trace, service, context, DateTime.Today);
//Fdate = string.Format("{0}-{1}-{2}", date.Year, date.Month, date.Day);
             service.Create(obj);
         }

    }


Handler class for common Methodes
public static class Handlers
    {
      public static Entity GetCurrentEntityFromContext(IPluginExecutionContext context)
      {

          if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
          {
              return (Entity)context.InputParameters["Target"];
          }
          else
          {
              throw new Exception("Error: the context input parameter didn't return the target entity");
          }

      }
          public static int GetUserTimeZoneCode(ITracingService tracing, IOrganizationService service, IPluginExecutionContext context)
{
tracing.Trace("In GetUserTimeZoneCode method");
            int timeZoneCode = 0;

            try
            {
                string fetchXmls = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
                <entity name='usersettings'>
                    <attribute name='timezonecode' />
                    <link-entity name='systemuser' from='systemuserid' to='systemuserid' alias='ad'>
                        <filter type='and'>
                            <condition attribute='systemuserid' operator='eq' uitype='systemuser' value='{0}' />
                        </filter>
                    </link-entity>
                </entity>
            </fetch>";

                EntityCollection userSettings = service.RetrieveMultiple(new FetchExpression(string.Format(fetchXmls, context.UserId)));

                if (userSettings.Entities.Count > 0)
                {
                    timeZoneCode = GetValueFromContextOrImage<int>(userSettings.Entities.FirstOrDefault(), "timezonecode");
                    tracing.Trace("TimeZoneCode: " + timeZoneCode);
                }
            }
            catch (Exception ex)
            {
                tracing.Trace("Error in GetUserTimeZoneCode method: " + ex.Message);
            }

            return timeZoneCode;
}
      public static T GetValueFromContextOrImage<T>(Entity contextRecord, string fieldName, Entity image = null)
{
if (contextRecord != null && contextRecord.Contains(fieldName))
{
return contextRecord.GetAttributeValue<T>(fieldName);
}
else if (image != null && image.Contains(fieldName))
{
return image.GetAttributeValue<T>(fieldName);
}

return new Entity().GetAttributeValue<T>("dummyValue");
}
      public static void SetValueToContextOrImage(Entity contextRecord, string fieldName, object value)
      {
          if (contextRecord != null)
          {
              if (contextRecord.Contains(fieldName))
                  contextRecord.Attributes[fieldName] = value;
              else
                  contextRecord.Attributes.Add(fieldName, value);
          }
          else
          {
              throw new Exception("Record is null");
          }
      }

/// <summary>
/// Return the Local time for the time provided
/// </summary>
/// <param name="UTCTime">The DateTime of UTC Time</param>
/// <returns>The DateTime of local time</returns>
public static DateTime GetLocalTime(ITracingService tracing, IOrganizationService service, IPluginExecutionContext context, DateTime UTCTime)
{
tracing.Trace("In GetLocalTime method");
            LocalTimeFromUtcTimeResponse timeResp = new LocalTimeFromUtcTimeResponse();
            try
            {
                // If UTCTime is null the return UTCTime
                if (UTCTime.Equals(DateTime.MinValue))
                    return UTCTime;

                // Create LocalTimeFromUtcTimeRequest instance and set the UtcTime and TimeZoneCode
                LocalTimeFromUtcTimeRequest timeReq = new LocalTimeFromUtcTimeRequest();
                timeReq.UtcTime = UTCTime.ToUniversalTime();
                timeReq.TimeZoneCode = GetUserTimeZoneCode(tracing, service, context);

                // Execute the LocalTimeFromUtcTimeRequest
                timeResp = (LocalTimeFromUtcTimeResponse)service.Execute(timeReq);

            }
            catch (Exception ex)
            {
                tracing.Trace("Error in GetLocalTime method: "+ex.Message);
            }

return timeResp.LocalTime;
}


No comments:

Post a Comment