2014-05-23 63 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(); 

請讓我知道這是否有幫助