protected override void Execute(CodeActivityContext executionContext) { ITracingService tracer = executionContext.GetExtension <ITracingService>(); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { DateTime dateToCheck = DateToCheck.Get(executionContext); string dateOnly = dateToCheck.ToString("dd-MM-yyyy"); //Use the adapter pattern to create a wrapper for the standard HttpClient //Calls the underlying functionality but provides a testable interface HttpClientAdapter adapter = new HttpClientAdapter(); var callWebServiceTask = Task.Run(async() => await CallWebService(adapter, dateOnly)); Task.WaitAll(callWebServiceTask); bool isValid = callWebServiceTask.Result; IsPublicHoliday.Set(executionContext, isValid); } catch (Exception e) { throw new InvalidPluginExecutionException(e.Message); } }
protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (localContext == null) { throw new ArgumentNullException(nameof(localContext)); } DateTime dateToCheck = DateToCheck.Get(context); bool evaluateAsUserLocal = EvaluateAsUserLocal.Get(context); Entity calendar = null; EntityReference holidayClosureCalendar = HolidayClosureCalendar.Get(context); if (holidayClosureCalendar != null) { calendar = localContext.OrganizationService.Retrieve("calendar", holidayClosureCalendar.Id, new ColumnSet(true)); } if (evaluateAsUserLocal) { int?timeZoneCode = GetLocalTime.RetrieveTimeZoneCode(localContext.OrganizationService); dateToCheck = GetLocalTime.RetrieveLocalTimeFromUtcTime(dateToCheck, timeZoneCode, localContext.OrganizationService); } var result = dateToCheck.IsBusinessDay(calendar); ValidBusinessDay.Set(context, result); }
protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (localContext == null) { throw new ArgumentNullException(nameof(localContext)); } try { DateTime dateToCheck = DateToCheck.Get(context); bool evaluateAsUserLocal = EvaluateAsUserLocal.Get(context); if (evaluateAsUserLocal) { int?timeZoneCode = GetLocalTime.RetrieveTimeZoneCode(localContext.OrganizationService); dateToCheck = GetLocalTime.RetrieveLocalTimeFromUtcTime(dateToCheck, timeZoneCode, localContext.OrganizationService); } var result = dateToCheck.IsBusinessDay(localContext.OrganizationService, this.HolidayClosureCalendar.Get(context)); this.ValidBusinessDay.Set(context, result); } catch (Exception ex) { throw new InvalidPluginExecutionException(OperationStatus.Failed, $"{ex.Message}"); } }
protected override void Execute(CodeActivityContext executionContext) { ITracingService tracer = executionContext.GetExtension <ITracingService>(); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { DateTime dateToCheck = DateToCheck.Get(executionContext); bool evaluateAsUserLocal = EvaluateAsUserLocal.Get(executionContext); if (evaluateAsUserLocal) { GetLocalTime glt = new GetLocalTime(); int? timeZoneCode = glt.RetrieveTimeZoneCode(service); dateToCheck = glt.RetrieveLocalTimeFromUtcTime(dateToCheck, timeZoneCode, service); } EntityReference holidaySchedule = HolidayClosureCalendar.Get(executionContext); bool validBusinessDay = dateToCheck.DayOfWeek != DayOfWeek.Saturday || dateToCheck.DayOfWeek == DayOfWeek.Sunday; if (!validBusinessDay) { ValidBusinessDay.Set(executionContext, false); return; } if (holidaySchedule != null) { Entity calendar = service.Retrieve("calendar", holidaySchedule.Id, new ColumnSet(true)); if (calendar == null) { return; } EntityCollection calendarRules = calendar.GetAttributeValue <EntityCollection>("calendarrules"); foreach (Entity calendarRule in calendarRules.Entities) { //Date is not stored as UTC DateTime startTime = calendarRule.GetAttributeValue <DateTime>("starttime"); //Not same date if (!startTime.Date.Equals(dateToCheck.Date)) { continue; } //Not full day event if (startTime.Subtract(startTime.TimeOfDay) != startTime || calendarRule.GetAttributeValue <int>("duration") != 1440) { continue; } ValidBusinessDay.Set(executionContext, false); return; } } ValidBusinessDay.Set(executionContext, true); } catch (Exception ex) { tracer.Trace("Exception: {0}", ex.ToString()); } }