Для того, чтобы обратиться к конкретной карточке календаря нужно узнать ее Guid. Проще всего это сделать, кликнув на бизнес-календарь правой кнопкой и зайти в свойства. Внизу будет указан URL карточки, он то и будет содержать легко узнаваемый Guid.
Далее в самой карточке нужно сделать следующее:
using DocsVision.BackOffice.Model.BusinessCalendar.DataAccess; using DocsVision.BackOffice.Model.BusinessCalendar.Entities; /* . . . */ Guid calGuid = new Guid("F827960F-6E61-40AD-A7E4-63AF74FAB54A"); Calendar cal = new CalendarMapper(Session).Find(calGuid);
В результате выполнения будет создан объект класса Calendar, имеющий весьма сложную структуру. Кроме свойств и методов, унаследованных от класса DomainObject, он включает в себя поле DefaultWorkTime типа IList (как я понял, так же представлены столбцы в табличном контроле). DefaultWorkTime содержит соответственно поля StartTime и EndTime, содержащие границы рабочего дня по-умолчанию. Они используются, если в календаре не приписаны рабочие часы, отличающиеся от них.
Если же рабочие часы заданы индивидуально для каждого дня, то нужно будет обращаться к полю Years (IDictionary), содержащему данные о каждом дне (int DayNumber,enum Type(Working,NonWorking,Holiday),IList WorkTime:(StartTime,EndTime)).
Также для работы с календарем может быть полезен класс WorkTimeCalculator, который содержит два метода: GetDayTimeWorkStatus(DateTime date) и GetDayWorkStatus(DayTime date), возвращающие значения типов TimeType и DayType соответственно.
Создать объект класса WorkTimeCalculator можно следующим способом:
using DocsVision.BackOffice.Model.BusinessCalendar; using DocsVision.BackOffice.Model.BusinessCalendar.DataAccess; using DocsVision.BackOffice.Model.BusinessCalendar.Entities; /* . . . */ Calendar cal = new CalendarMapper(Session).Find(new Guid("00000000-0000-0000-0000-000000000000")); WorkTimeCalculator calc = new WorkTimeCalculator(cal);Примечание: вместо 00000000-0000-0000-0000-000000000000 укажите нужный Guid.
Кроме упомянутых классов имеется класс WorkTime, содержащий, кроме унаследованных от DomainObject, поля StartTime и EndTime.
using DocsVision.BackOffice.Model.BusinessCalendar.Entities; /* . . . */ WorkTime workT = new WorkTime();
Также пространство имен DocsVision.BackOffice.Model.BusinessCalendar.Entities содержит типы DayType и TimeType;
а также классы:
P.S. реальный пример работы с бизнес-календарем будет описан в ближайших постах.
P.P.S. Надеюсь, что разберусь, какие значения могут принимать переменные типов DayType и TimeType. На данный момент это не очевидно.
0 коммент.:
Отправить комментарий