Поиск блогу

пятница, 11 февраля 2011 г.

Просмотр структуры карточки.

Иногда возникает потребность просмотреть, какие свойства содержит та, или иная карточка.
Для этого можно воспользоваться утилитой DVExplorer, входящей в SDK.

После запуска утилиты и подключения к базе выбираем пункт "Card Types..."


Обращение к карточке Бизнес-календаря. Примерная структура класса.

Ни для кого не секрет, что существует тип карточек "Бизнес-календарь". Они позволяют задать расписание работы, рабочие часы для подразделений и выполняют подобные этим функции.

Для того, чтобы обратиться к конкретной карточке календаря нужно узнать ее 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.