Hi,
Below is the code that we can use to update user’s work hours for a specific day. Here we are setting the work hours of the user to be starting from 2 to ending at 7 p.m. for 1st of April.
IServiceManagement orgServiceManagement = ServiceConfigurationFactory.CreateManagement(new Uri("https://mycrm.crm5.dynamics.com/XRMServices/2011/Organization.svc")); AuthenticationCredentials authCredentials = new AuthenticationCredentials(); authCredentials.ClientCredentials.UserName.UserName = "username@onmicrosoft.com"; authCredentials.ClientCredentials.UserName.Password = "password"; AuthenticationCredentials tokenCredentials = orgServiceManagement.Authenticate(authCredentials); OrganizationServiceProxy organizationProxy = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse); // Get the user id Guid userid = ((WhoAmIResponse)organizationProxy.Execute(new WhoAmIRequest())).UserId; // Get the calendar id of the user Entity systemUserEntity = organizationProxy.Retrieve("systemuser", userid, new ColumnSet(new String[] { "calendarid"})); // Retrieve the calendar of the user Entity userCalendarEntity = organizationProxy.Retrieve("calendar", ((Microsoft.Xrm.Sdk.EntityReference)(systemUserEntity.Attributes["calendarid"])).Id, new ColumnSet(true)); // Retrieve the calendar rules defined in the calendar EntityCollection calendarRules = (EntityCollection)userCalendarEntity.Attributes["calendarrules"]; // Create a new inner calendar Entity newInnerCalendar = new Entity("calendar"); newInnerCalendar.Attributes["businessunitid"] = new EntityReference("businessunit", ((Microsoft.Xrm.Sdk.EntityReference)(userCalendarEntity["businessunitid"])).Id); Guid innerCalendarId = organizationProxy.Create(newInnerCalendar); // Create a new calendar rule and assign the inner calendar id to it Entity calendarRule = new Entity("calendarrule"); calendarRule.Attributes["duration"] = 1440; calendarRule.Attributes["extentcode"] = 1; calendarRule.Attributes["pattern"] = "FREQ=DAILY;COUNT=1"; calendarRule.Attributes["rank"] = 0; calendarRule.Attributes["timezonecode"] = 190; calendarRule.Attributes["innercalendarid"] = new EntityReference("calendar", innerCalendarId); // starting at 12:00 on 1 April calendarRule.Attributes["starttime"] = new DateTime(2013, 4, 2,0,0,0,DateTimeKind.Utc); calendarRules.Entities.Add(calendarRule); // assign all the calendar rule back to the user calendar userCalendarEntity.Attributes["calendarrules"] = calendarRules; // update the user calendar entity that has the new rule organizationProxy.Update(userCalendarEntity); Entity calendarRule1 = new Entity("calendarrule"); // duration of 5 hours calendarRule1.Attributes["duration"] = 300; calendarRule1.Attributes["effort"] = 1.0; calendarRule1.Attributes["issimple"] = true; // offset 120 i.e. 2 hours from start time (12:00) calendarRule1.Attributes["offset"] = 120; calendarRule1.Attributes["rank"] = 0; calendarRule1.Attributes["subcode"] = 1; calendarRule1.Attributes["timecode"] = 0; calendarRule1.Attributes["timezonecode"] = -1; calendarRule1.Attributes["calendarid"] = new EntityReference("calendar", innerCalendarId); EntityCollection innerCalendarRules = new EntityCollection(); innerCalendarRules.EntityName = "calendarrule"; innerCalendarRules.Entities.Add(calendarRule1); newInnerCalendar.Attributes["calendarrules"] = innerCalendarRules; newInnerCalendar.Attributes["calendarid"] = innerCalendarId; organizationProxy.Update(newInnerCalendar);
Hope it helps.
hello
I got the error “this operation is not supported” ErrorCode: -2147220989, in the line
//update the user calendar entity that has the new rule
organizationProxy.Update(userCalendarEntity);
Could you help me?
LikeLike
I am also getting the same error, any update. ?
LikeLike
Hi
LikeLike