2014-05-23 60 views
1

我已经设置从用户实体的工作时间在CRM就像THI查找CRM 2013

上午8时至下午1时 下午1时至下午2点休息时间 14:00打破工作时间小时(从用户实体)到5 PM

我已经使用了以下代码,确保用户可用或不可用。

QueryScheduleRequest scheduleRequest = new QueryScheduleRequest 
{ 
    ResourceId = Guid.Parse("E086A8A2-A741-4BB8-8BFC-61829949CBD9"), 
    Start = DateTime.Now.ToUniversalTime(), 
    End = DateTime.Now.AddMinutes(1).ToUniversalTime(), 
    TimeCodes = new TimeCode[] { TimeCode.Available } 
}; 

QueryScheduleResponse scheduleResponse = 
        (QueryScheduleResponse)_serviceProxy.Execute(scheduleRequest); 


if (scheduleResponse.TimeInfos.Length > 0) 
{ 
    // User is available 
} 

现在,如果我检查下午1点之间这段代码到下午2点仍是露出我的用户,尽管可用的是休息时间。有什么办法可以让我们发现它是休息时间。上面的代码工作就像我在8点到5点之间检查一边,然后它不显示用户可用。我不想包括休息时间

+0

这个问题是不是与Utc时间。问题是如何找到目前这是一个休息时间与否。 –

+0

对不起,我的意思是说这不会: 这不会解决您有任何问题,但不要使用DateTime.Now.ToUniversalTime()。只需使用DateTime.UtcNow。 – Daryl

+0

您是否找到了解决方案? –

回答

0

的答案是使用TimeCode.Unavailable这样的:

QueryScheduleRequest scheduleRequest = new QueryScheduleRequest 
       { 
        ResourceId = userResponse.UserId, 
        Start = DateTime.Now, 
        End = DateTime.Today.AddDays(7), 
        TimeCodes = new TimeCode[] { TimeCode.Unavailable } 
       }; 
       QueryScheduleResponse scheduleResponse = (QueryScheduleResponse)_orgService.Execute(scheduleRequest); 

和U将得到休息时间)

0

对不起,如果这是为时已晚,但这个工作我...

在我的情况

我只用我需要什么,但是这可以相应地改变......

 WhoAmIResponse userResponse = (WhoAmIResponse)service.Execute(new WhoAmIRequest()); 

     QueryScheduleRequest req = new QueryScheduleRequest 
     { 
      ResourceId = userResponse.UserId, 
      Start = DateTime.Today, 
      End = DateTime.Today.AddDays(1), 
      TimeCodes = new TimeCode[] { TimeCode.Available, TimeCode.Unavailable, TimeCode.Busy, TimeCode.Filter } 
     }; 

     QueryScheduleResponse resp = service.Execute(req) as QueryScheduleResponse; 
     bool free = true; 
     foreach (TimeInfo timeInfo in resp.TimeInfos) 
     { 
      if (timeInfo.SubCode == SubCode.Break && DateTime.UtcNow > timeInfo.Start && DateTime.UtcNow < timeInfo.End) 
      { 
       free = false; 
       Console.WriteLine("on break"); 
      }else if (timeInfo.SubCode == SubCode.Schedulable && DateTime.UtcNow < timeInfo.Start && DateTime.UtcNow > timeInfo.End) 
      { 
       free = false; 
       Console.WriteLine("out of work hours"); 
      } 
     } 

     if (free) 
     { 
      Console.WriteLine("Free"); 
     } 

     Console.ReadKey(); 

请让我知道这是否有帮助