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

时间:2014-05-23 13:04:07

标签: c# dynamics-crm-2011 crm

我已将用户实体的工作时间设置为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点之间检查然后然后它没有显示用户可用。我不想包括休息时间

2 个答案:

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

如果有帮助,请告诉我