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