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.
Discover more from Nishant Rana's Weblog
Subscribe to get the latest posts sent to your email.

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