我已将用户实体的工作时间设置为crm,如thi
上午8点到下午1点 下午1点到下午2点 下午2点到下午5点
我使用了以下代码来确保用户是否可用。
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 :(得分: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);
你会得到休息时间)
答案 1 :(得分: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();
如果有帮助,请告诉我