Найти часы перерыва в рабочих часах (от пользователя) в crm 2013

1

Я установил часы работы с пользовательской сущностью в crm, например, thi

8 AM до 1 PM 1 Pm до 2 PM Время перерыва от 2 PM до 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 PM и 2 PM, он покажет мне, что пользователь доступен, несмотря на то, что это время перерыва. Есть ли способ, по которому мы можем обнаружить, что это часы разлома. Над кодом работает так, как если бы я проверил сторону между 8:00 и 5:00, а затем, пока не появится Пользователь доступен. Я не хочу включать время перерыва

Теги:
crm
dynamics-crm-2011

2 ответа

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

Пожалуйста, дайте мне знать, если это поможет

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

И вы получите время перерыва)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню