protected override void Execute(System.Activities.CodeActivityContext context) { var workflowContext = context.GetExtension <IWorkflowContext>(); var service = this.RetrieveOrganizationService(context); DateTime utcDateTime = this.DateToEvaluate.Get(context); if (utcDateTime.Kind != DateTimeKind.Utc) { utcDateTime = utcDateTime.ToUniversalTime(); } TimeZoneSummary timeZone = StaticMethods.CalculateTimeZoneToUse(this.TimeZoneOption.Get(context), workflowContext, service); LocalTimeFromUtcTimeRequest timeZoneChangeRequest = new LocalTimeFromUtcTimeRequest() { UtcTime = utcDateTime, TimeZoneCode = timeZone.MicrosoftIndex }; LocalTimeFromUtcTimeResponse timeZoneResponse = service.Execute(timeZoneChangeRequest) as LocalTimeFromUtcTimeResponse; DateTime adjustedDateTime = timeZoneResponse.LocalTime; switch (adjustedDateTime.DayOfWeek) { case System.DayOfWeek.Sunday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540000)); break; case System.DayOfWeek.Monday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540001)); break; case System.DayOfWeek.Tuesday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540002)); break; case System.DayOfWeek.Wednesday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540003)); break; case System.DayOfWeek.Thursday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540004)); break; case System.DayOfWeek.Friday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540005)); break; case System.DayOfWeek.Saturday: this.DayOfWeekPick.Set(context, new OptionSetValue(222540006)); break; } this.DayOfWeekName.Set(context, adjustedDateTime.DayOfWeek.ToString()); this.DayOfMonth.Set(context, adjustedDateTime.Day); this.DayOfYear.Set(context, adjustedDateTime.DayOfYear); this.HourOfDay023.Set(context, adjustedDateTime.Hour); this.Minute.Set(context, adjustedDateTime.Minute); this.MonthOfYearInt.Set(context, adjustedDateTime.Month); this.MonthOfYearPick.Set(context, new OptionSetValue(222540000 + adjustedDateTime.Month - 1)); this.MonthOfYearName.Set(context, System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(adjustedDateTime.Month)); this.Year.Set(context, adjustedDateTime.Year); }
protected override void Execute(CodeActivityContext context) { IWorkflowContext workflowContext = context.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = context.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.UserId); DateTime utcDateTime = this.DateToEvaluate.Get(context); if (utcDateTime.Kind != DateTimeKind.Utc) { utcDateTime = utcDateTime.ToUniversalTime(); } var settings = service.Retrieve("usersettings", workflowContext.UserId, new ColumnSet("timezonecode")); LocalTimeFromUtcTimeRequest timeZoneChangeRequest = new LocalTimeFromUtcTimeRequest() { UtcTime = utcDateTime, TimeZoneCode = int.Parse(settings["timezonecode"].ToString()) }; LocalTimeFromUtcTimeResponse timeZoneResponse = service.Execute(timeZoneChangeRequest) as LocalTimeFromUtcTimeResponse; this.ForammtedDateTimeOutput.Set(context, String.Format("{0:f}", timeZoneResponse.LocalTime)); }
public void Can_get_user_today_date() { var test = new TestHelper(); var context = Substitute.For <ITransactionContextBase>(); context.Service.Returns(test.Service); var userId = Guid.NewGuid(); var initiatingUserId = Guid.NewGuid(); context.PluginExecutionContext.InitiatingUserId.Returns(initiatingUserId); var userSettings = new UserSettings { Id = Guid.NewGuid() }; userSettings.Set(e => e.SystemUserId, userId); userSettings.Set(e => e.TimeZoneCode, 1234); context.Service.RetrieveMultiple(Arg.Any <QueryBase>()) .Returns(new EntityCollection(new List <Entity> { userSettings })); var utcTime = new DateTime(2017, 1, 25, 9, 45, 0, DateTimeKind.Utc); var localTime = new DateTime(2017, 1, 25, 16, 45, 0, DateTimeKind.Unspecified); context.Service.Execute(Arg.Any <LocalTimeFromUtcTimeRequest>()) .Returns(ci => { var request = ci.ArgAt <LocalTimeFromUtcTimeRequest>(0); Assert.Equal(1234, request.TimeZoneCode); Assert.Equal(utcTime, request.UtcTime); var response = new LocalTimeFromUtcTimeResponse { ["LocalTime"] = localTime }; return(response); }); var expectedTodayDate = new DateTime(2017, 1, 24, 17, 0, 0, DateTimeKind.Utc); var todayDateValueProvider = new TodayDateValueProvider(context); Assert.Equal(initiatingUserId, todayDateValueProvider.UserId); todayDateValueProvider.UserId = userId; var todayDate = todayDateValueProvider.GetTodayDate(utcTime); Assert.Equal(expectedTodayDate, todayDate); }
public void SetPriority3() { var serviceProvider = new StubIServiceProvider(); var pluginContext = new StubIPluginExecutionContext(); var organizationService = new StubIOrganizationService(); pluginContext.PrimaryEntityNameGet = () => "incident"; pluginContext.PrimaryEntityIdGet = () => new Guid("54D94FC2-52AD-E511-8158-1458D04DB4D1"); Microsoft.Xrm.Sdk.ParameterCollection paramCollection = new Microsoft.Xrm.Sdk.ParameterCollection(); Entity incident = new Entity("incident"); incident.Id = new Guid("884A078B-0467-E711-80F5-3863BB3C0660"); incident.Attributes["statuscode"] = new OptionSetValue(2); incident.Attributes["smp_problembuilding"] = new EntityReference("smp_building", new Guid("884A078B-0467-E711-80F5-3863BB3C1560")) { Name = "building" }; incident.Attributes["new_problemroomnumber"] = new EntityReference("smp_room", new Guid("884A078B-0467-E711-80F5-3863BB3C0560")) { Name = "room" }; incident.Attributes["caseorigincode"] = new OptionSetValue(3); incident.Attributes["smp_duedate"] = "2018-01-08";////Convert.ToDateTime(null, CultureInfo.CurrentCulture); incident.Attributes["smp_portalsubmit"] = false; incident.Attributes["smp_duedatebybuildingtimezone"] = "2018-01-08"; ////incident.Attributes["smp_occureddatetimebybuildingtimezone"] = "2018-01-08"; //// incident["smp_submitteddatetime"] = Convert.ToDateTime(null, CultureInfo.CurrentCulture);//new DateTime(2018, 1, 8); incident["createdon"] = "2018-01-08"; incident["smp_problemoccureddatetime"] = "2018-01-08"; ////incident.Attributes["smp_submitteddatetimebybuildingtimezone"] = "2018-01-08"; ////incident.Attributes["smp_createddatetimebybuildingtimezone"] = "2018-01-08"; incident.Attributes["smp_priorityid"] = new EntityReference("smp_priority", Guid.Empty) { Name = "priority" }; incident.Attributes["smp_problemroomtype"] = new EntityReference("smp_roomtype", new Guid("884A078B-0466-E711-80F5-3863BB3C0560")) { Name = "roomtype" }; incident.Attributes["smp_problemclassid"] = new EntityReference("smp_problemclass", new Guid("884A078B-0468-E711-80F5-3863BB3C0560")) { Name = "problemClass" }; incident.Attributes["smp_problemtypeid"] = new EntityReference("smp_problemtype", new Guid("884A078B-0469-E711-80F5-3863BB3C0560")) { Name = "problemType" }; incident.Attributes["smp_priorityid"] = new EntityReference("smp_priority", Guid.Empty); incident.Attributes["smp_contact"] = new EntityReference("contact", Guid.NewGuid()); paramCollection.Add("Target", incident); pluginContext.InputParametersGet = () => paramCollection; Helper.Helper.PluginVariables(serviceProvider, pluginContext, organizationService, 20, "Create", null); organizationService.ExecuteOrganizationRequest = QueryBase => { if (QueryBase.RequestName == "RetrieveAttribute") { PicklistAttributeMetadata picklistAttributeMetadata = new PicklistAttributeMetadata(); picklistAttributeMetadata.OptionSet = new OptionSetMetadata(); picklistAttributeMetadata.OptionSet.Options.Add(new OptionMetadata(new Label(new LocalizedLabel("+02:30", 1033), (new LocalizedLabel[] { new LocalizedLabel("+02:30", 1033) })), 0)); picklistAttributeMetadata.OptionSet.Options.Add(new OptionMetadata(new Label(new LocalizedLabel("+03:30", 1033), (new LocalizedLabel[] { new LocalizedLabel("+03:30", 1033) })), 1)); picklistAttributeMetadata.OptionSet.Options.Add(new OptionMetadata(new Label(new LocalizedLabel("-04:30", 1033), (new LocalizedLabel[] { new LocalizedLabel("-04:30", 1033) })), 2)); RetrieveAttributeResponse response = new RetrieveAttributeResponse(); response.Results.Add("AttributeMetadata", picklistAttributeMetadata); return(response); } else if (QueryBase.RequestName == "LocalTimeFromUtcTime") { LocalTimeFromUtcTimeResponse localTimeResponse = new LocalTimeFromUtcTimeResponse(); ////localTimeResponse.Results.Add("", value); DateTime dateTime = Convert.ToDateTime(QueryBase.Parameters["UtcTime"]).AddMinutes(Convert.ToInt32(QueryBase.Parameters["TimeZoneCode"])); localTimeResponse.Results.Add("LocalTime", dateTime); return(localTimeResponse); } else if (QueryBase.RequestName == "UtcTimeFromLocalTime") { UtcTimeFromLocalTimeResponse utcTimeResponse = new UtcTimeFromLocalTimeResponse(); DateTime dateTime = Convert.ToDateTime(QueryBase.Parameters["LocalTime"]).AddMinutes(-Convert.ToInt32(QueryBase.Parameters["TimeZoneCode"])); utcTimeResponse.Results.Add("UtcTime", dateTime); return(utcTimeResponse); } return(null); }; organizationService.RetrieveStringGuidColumnSet = delegate(string entity, Guid guid, ColumnSet secondaryUserColumnSet) { if (entity == "smp_building") { Entity building = new Entity(entity); building.Id = Guid.NewGuid(); building["smp_timezoneid"] = new EntityReference("smp_timezone", Guid.NewGuid()); building["smp_isfinancialstatecampus"] = true; return(building); } else if (entity == "smp_timezone") { Entity timeZone = new Entity(entity); timeZone["smp_timezonename"] = "test timezone"; timeZone["smp_offset"] = new OptionSetValue(2); return(timeZone); } else if (entity == "smp_priority") { Entity priority = new Entity(entity); priority["smp_noofminutes"] = 100; return(priority); } else if (entity == "smp_roomtype") { Entity roomType = new Entity(entity); roomType["smp_zone"] = new OptionSetValue(1); return(roomType); } return(null); }; organizationService.RetrieveMultipleQueryBase = (query) => { EntityCollection collection = new EntityCollection(); string entityName = string.Empty; if (query.GetType().Name.Equals("FetchExpression")) { if (((FetchExpression)query).Query.Contains("<entity name='ava_keyvaluepair'>")) { entityName = "ava_keyvaluepair"; } } else if (query.GetType().Name.Equals("QueryExpression")) { entityName = ((QueryExpression)query).EntityName; } else { entityName = ((QueryByAttribute)query).EntityName; } if (entityName == "smp_providermatrix") { Entity matrix = new Entity("smp_providermatrix"); matrix.Id = new Guid("884A078B-0466-E711-80F5-3863BB3C0560"); matrix["smp_primaryproviderid"] = new EntityReference("account", new Guid("884A078B-0467-E711-80F5-3863BB3C1560")); collection.Entities.Add(matrix); } else if (entityName == "smp_room") { Entity room = new Entity(entityName); room["smp_name"] = "test room"; room["smp_roomid"] = new Guid("884A078B-0466-E711-80F5-3863BB3C0679"); collection.Entities.Add(room); } else if (entityName == "account") { Entity account = new Entity(entityName); account["accountid"] = new Guid("884A078B-0467-E711-80F5-3863BB3C1560"); account["statuscode"] = 1; collection.Entities.Add(account); } else if (entityName == "smp_slamatrix") { Entity slaMatrix = new Entity(entityName); slaMatrix["smp_priorityid"] = new EntityReference("smp_priority", new Guid("884A078B-0467-E711-80F5-3863BB3C1489")); slaMatrix["smp_starthours"] = 2; slaMatrix["smp_endhours"] = 1; collection.Entities.Add(slaMatrix); } else if (entityName == "smp_buildingworkhours") { ////Entity buildWorkHours = new Entity(entityName); ////buildWorkHours["smp_starthours"] = new OptionSetValue(1); ////buildWorkHours["smp_endhours"] = new OptionSetValue(2); ////buildWorkHours.FormattedValues["smp_starthours"] = "08:30"; ////buildWorkHours.FormattedValues["smp_endhours"] = "08:30"; ////collection.Entities.Add(buildWorkHours); } else if (entityName == "smp_weekdays") { Entity weekdays = new Entity(entityName); weekdays["smp_name"] = Convert.ToDateTime("09-03-2017 02:30 AM"); collection.Entities.Add(weekdays); } else if (entityName == "smp_configuration") { Entity configuration = new Entity(entityName); configuration["smp_value"] = "Production"; collection.Entities.Add(configuration); } else if (entityName == "systemuser") { Entity systemuser = new Entity(entityName); systemuser.Id = Guid.NewGuid(); systemuser["systemuserid"] = systemuser.Id; collection.Entities.Add(systemuser); } else if (entityName == "usersettings") { Entity usersettings = new Entity(entityName); usersettings["timezonecode"] = 85; collection.Entities.Add(usersettings); } return(collection); }; PreServiceRequestCreateSetPriority prioritySet = new PreServiceRequestCreateSetPriority(); prioritySet.Execute(serviceProvider); }
protected DataTable BuildDataTable(CodeActivityContext context, IWorkflowContext workflowContext, IOrganizationService service) { TimeZoneSummary timeZone = StaticMethods.CalculateTimeZoneToUse(this.TimeZoneOption.Get(context), workflowContext, service); DataTable table = new DataTable() { TableName = workflowContext.PrimaryEntityName }; table.Columns.AddRange(new DataColumn[] { new DataColumn("Date"), new DataColumn("User"), new DataColumn("Attribute"), new DataColumn("Old Value"), new DataColumn("New Value") }); DateTime oldestUpdate = DateTime.MinValue; if (this.Units != null && this.Number != null && this.Number.Get <int>(context) != 0) { OptionSetValue value = this.Units.Get <OptionSetValue>(context); if (value != null) { switch (value.Value) { case 222540000: oldestUpdate = DateTime.Now.AddYears(this.Number.Get <int>(context) * -1); break; case 222540001: oldestUpdate = DateTime.Now.AddMonths(this.Number.Get <int>(context) * -1); break; case 222540002: oldestUpdate = DateTime.Now.AddDays(this.Number.Get <int>(context) * -7); break; case 222540003: oldestUpdate = DateTime.Now.AddDays(this.Number.Get <int>(context) * -1); break; case 222540004: oldestUpdate = DateTime.Now.AddHours(this.Number.Get <int>(context) * -1); break; default: oldestUpdate = DateTime.Now.AddMinutes(this.Number.Get <int>(context) * -1); break; } } } RetrieveRecordChangeHistoryRequest request = new RetrieveRecordChangeHistoryRequest() { Target = new EntityReference(workflowContext.PrimaryEntityName, workflowContext.PrimaryEntityId), PagingInfo = new PagingInfo() { Count = 100, PageNumber = 1 } }; RetrieveRecordChangeHistoryResponse response = service.Execute(request) as RetrieveRecordChangeHistoryResponse; var detailsToInclude = response.AuditDetailCollection.AuditDetails .Where(ad => ad is AttributeAuditDetail && ad.AuditRecord.Contains("createdon") && ((DateTime)ad.AuditRecord["createdon"]) > oldestUpdate) .OrderByDescending(ad => ((DateTime)ad.AuditRecord["createdon"])) .ToList(); if (detailsToInclude.Any()) { Microsoft.Xrm.Sdk.Messages.RetrieveEntityRequest retrieveEntityRequest = new Microsoft.Xrm.Sdk.Messages.RetrieveEntityRequest() { EntityFilters = EntityFilters.Attributes, LogicalName = workflowContext.PrimaryEntityName }; Microsoft.Xrm.Sdk.Messages.RetrieveEntityResponse retrieveEntityResponse = service.Execute(retrieveEntityRequest) as Microsoft.Xrm.Sdk.Messages.RetrieveEntityResponse; EntityMetadata metadata = retrieveEntityResponse.EntityMetadata; foreach (var detail in detailsToInclude.Select(d => d as AttributeAuditDetail).Where(d => d.NewValue != null && d.OldValue != null)) { DateTime dateToModify = (DateTime)detail.AuditRecord["createdon"]; if (dateToModify.Kind != DateTimeKind.Utc) { dateToModify = dateToModify.ToUniversalTime(); } LocalTimeFromUtcTimeRequest timeZoneChangeRequest = new LocalTimeFromUtcTimeRequest() { UtcTime = dateToModify, TimeZoneCode = timeZone.MicrosoftIndex }; LocalTimeFromUtcTimeResponse timeZoneResponse = service.Execute(timeZoneChangeRequest) as LocalTimeFromUtcTimeResponse; DateTime timeZoneSpecificDateTime = timeZoneResponse.LocalTime; var details = detail.NewValue.Attributes.Keys.Union(detail.OldValue.Attributes.Keys) .Distinct() .Select(a => new { AttributeName = a, DisplayName = GetDisplayLabel(metadata, a) }) .OrderBy(a => a.DisplayName); foreach (var item in details) { DataRow newRow = table.NewRow(); newRow["User"] = GetDisplayValue(detail.AuditRecord, "userid"); newRow["Date"] = timeZoneSpecificDateTime.ToString("MM/dd/yyyy h:mm tt"); newRow["Attribute"] = item.DisplayName; newRow["Old Value"] = GetDisplayValue(detail.OldValue, item.AttributeName); newRow["New Value"] = GetDisplayValue(detail.NewValue, item.AttributeName); table.Rows.Add(newRow); } } } return(table); }
protected override void Execute(CodeActivityContext context) { var workflowContext = context.GetExtension <IWorkflowContext>(); var service = this.RetrieveOrganizationService(context); List <OptionSetValue> values = new List <OptionSetValue>() { this.Part1.Get <OptionSetValue>(context), this.Part2.Get <OptionSetValue>(context), this.Part3.Get <OptionSetValue>(context), this.Part4.Get <OptionSetValue>(context), this.Part5.Get <OptionSetValue>(context), this.Part6.Get <OptionSetValue>(context), this.Part7.Get <OptionSetValue>(context), this.Part8.Get <OptionSetValue>(context), this.Part9.Get <OptionSetValue>(context), this.Part10.Get <OptionSetValue>(context), this.Part11.Get <OptionSetValue>(context), this.Part12.Get <OptionSetValue>(context), this.Part13.Get <OptionSetValue>(context), this.Part14.Get <OptionSetValue>(context), this.Part15.Get <OptionSetValue>(context), this.Part16.Get <OptionSetValue>(context), this.Part17.Get <OptionSetValue>(context), this.Part18.Get <OptionSetValue>(context), this.Part19.Get <OptionSetValue>(context), this.Part20.Get <OptionSetValue>(context) }; values.RemoveAll(osv => osv == null || osv.Value == 222540025); TimeZoneSummary timeZone = StaticMethods.CalculateTimeZoneToUse(this.TimeZoneOption.Get(context), workflowContext, service); DateTime dateToModify = this.DateToModify.Get(context); if (dateToModify.Kind != DateTimeKind.Utc) { dateToModify = dateToModify.ToUniversalTime(); } LocalTimeFromUtcTimeRequest timeZoneChangeRequest = new LocalTimeFromUtcTimeRequest() { UtcTime = dateToModify, TimeZoneCode = timeZone.MicrosoftIndex }; LocalTimeFromUtcTimeResponse timeZoneResponse = service.Execute(timeZoneChangeRequest) as LocalTimeFromUtcTimeResponse; DateTime timeZoneSpecificDateTime = timeZoneResponse.LocalTime; StringBuilder sb = new StringBuilder(); foreach (OptionSetValue osv in values) { try { switch (osv.Value) { case 222540000: sb.Append(timeZoneSpecificDateTime.ToString("%h")); break; case 222540001: sb.Append(timeZoneSpecificDateTime.ToString("hh")); break; case 222540002: sb.Append(timeZoneSpecificDateTime.ToString("%H")); break; case 222540003: sb.Append(timeZoneSpecificDateTime.ToString("HH")); break; case 222540004: sb.Append(timeZoneSpecificDateTime.ToString("%m")); break; case 222540005: sb.Append(timeZoneSpecificDateTime.ToString("mm")); break; case 222540006: sb.Append(timeZoneSpecificDateTime.ToString("%d")); break; case 222540007: sb.Append(timeZoneSpecificDateTime.ToString("dd")); break; case 222540008: sb.Append(timeZoneSpecificDateTime.ToString("ddd")); break; case 222540009: sb.Append(timeZoneSpecificDateTime.ToString("dddd")); break; case 222540010: sb.Append(timeZoneSpecificDateTime.ToString("%M")); break; case 222540011: sb.Append(timeZoneSpecificDateTime.ToString("MM")); break; case 222540012: sb.Append(timeZoneSpecificDateTime.ToString("MMM")); break; case 222540013: sb.Append(timeZoneSpecificDateTime.ToString("MMMM")); break; case 222540014: sb.Append(timeZoneSpecificDateTime.ToString("%y")); break; case 222540015: sb.Append(timeZoneSpecificDateTime.ToString("yy")); break; case 222540016: sb.Append(timeZoneSpecificDateTime.ToString("yyyy")); break; case 222540017: sb.Append(timeZoneSpecificDateTime.ToString("%t")); break; case 222540018: sb.Append(timeZoneSpecificDateTime.ToString("tt")); break; case 222540019: sb.Append(" "); break; case 222540020: sb.Append(","); break; case 222540021: sb.Append("."); break; case 222540022: sb.Append(":"); break; case 222540023: sb.Append("/"); break; case 222540024: sb.Append(@"\"); break; case 222540026: sb.Append("-"); break; case 222540027: sb.Append(timeZone.Id); break; case 222540028: sb.Append(timeZone.FullName); break; default: break; } } catch { throw new Exception(osv.Value.ToString()); } } FormattedDate.Set(context, sb.ToString()); }