C# 在crm 2013中查找工作时间中的休息时间(来自用户实体)

C# 在crm 2013中查找工作时间中的休息时间(来自用户实体),c#,dynamics-crm-2011,crm,C#,Dynamics Crm 2011,Crm,我已经在crm中设置了用户实体的工作时间,如thi 上午八时至下午一时 下午1时至2时休息时间 下午二时至五时 我使用了以下代码来确保用户是否可用 QueryScheduleRequest scheduleRequest = new QueryScheduleRequest { ResourceId = Guid.Parse("E086A8A2-A741-4BB8-8BFC-61829949CBD9"), Start = DateTime.Now.ToUniversalTime(

我已经在crm中设置了用户实体的工作时间,如thi

上午八时至下午一时 下午1时至2时休息时间 下午二时至五时

我使用了以下代码来确保用户是否可用

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点之间签出一方,然后它并没有显示用户可用。我不想包括休息时间。答案是使用时间码。如下所示:

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);

你会得到休息时间的

抱歉,如果这太晚了,但这对我来说很有效

在我的情况下,我只使用我需要的,但这可以相应地改变

        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();

请让我知道这是否有帮助

问题不在于Utc时间。问题在于如何找到当前是否为休息时间。对不起,我的意思是说这不会:这不会解决任何问题,但不要使用DateTime.Now.ToUniversalTime。只需使用DateTime.UtcNow。您找到解决方案了吗?没有,我仍在搜索解决方案。您确定该用户的计划已按您认为的方式设置吗?您能否确认,当您尝试在午休时间预订某个特定用户、技术人员、资源等的服务时,您会收到一条消息,您无法接受?