Подтип (Subtype)
Платформа Гедымин написана на объектно-ориентированном языке Object Pascal. Например, иерархия классов справочника контактов выглядит так:
Глядя на нее можно сказать, что Банк -- это особый вид компании, Компания -- Контакта, Контакт -- вид бизнес-объекта. Все указанные классы находятся в модуле gdcContacts.pas и компилируются в исполняемый файл gedemin.exe.
Возникает вопрос: как разработчик на платформе Гедымин может создавать новые классы бизнес-объектов если у него нет доступа ни к исходным кодам, ни к компилятору Delphi? Да и пишет он программный код на языке VBScript.
Для создания бизнес-классов в платформе, в класс TgdcBase добавлено строковое свойство SubType (Подтип):
property SubType: String read GetSubType write SetSubType;
Если в Паскале класс однозначно идентифицируется по его имени, то в платформе Гедымин бизнес-класс идентифицируется коомбинацией Имя класса + Подтип. Подтип может отсутствовать (пустая строка). Ниже приведены три способа создания Подтипов (т.е. фактически создания новых бизнес-классов).
Создание нового типа через Глобальное Хранилище
Рассмотрим на примере создания класса Продукт питания, наследника класса ТМЦ (TgdcGood).
- Продукту питания присущи специфические свойства: калорийность, содержание белков, жиров, углеводов, витаминов, пищевых добавок и т.п.
- Для хранения соответствующей информации в базе данных добавим поля в таблицу GD_GOOD (не делайте добавляемые поля обязательными для заполнения -- NOT NULL. При необходимости, контролируйте корректность значений с помощью триггеров).
- В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке Атрибуты.
- Откроем Глобальное Хранилище, найдем папку SubTypes.
- Добавим строковую переменную с именем TgdcGood. Установим ей значение Food -- это будет имя нашего подтипа для класса Продукт питания. Если для некоторого класса задается несколько подтипов, то они перечисляются через запятую в строке.
- Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в Исследователе создадим команду, укажем имя Продукт питания, класс TgdcGood и подтип Food. Откроем и настроим соответствующие формы.
- Пример доступа к новому классу из программного кода:
... Dim Food, Creator Set Creator = New TCreator Set Food = Creator.GetObject(nil, "TgdcGood", "") Food.SubType = "Food" ' без присвоения подтипа это будет просто ТМЦ Food.SubSet = "All" Food.Open ...
Стоит обратить внимание, что указанным способом можно создать подтипы только для классов, прописанных в исходном коде платформы.
Создание нового справочника
Создание нового бизнес-класса справочника начинается с создания таблицы в разделе Исследователь-Сервис-Атрибуты. Имя этой таблицы и будет подтипом для одного из следующих классов:
- TgdcAttrUserDefined -- для таблиц с линейной (не древовидной) структурой.
- TgdcAttrUserDefinedTree -- для таблиц древовидной структуры.
- TgdcAttrUserDefinedLBRBTree -- для таблиц со структурой интервального дерева.
В диалоговом окне создания таблицы указывается ветка Исследователя для размещения команды вызова формы просмотра создаваемого класса.
Создание нового типа документов
Бизнес-классы документов (синоним типы документов, типовые документы) создаются в разделе Исследователь-Сервис-Типовые документы. В зависимости от того, какой раздел выбран в левой части окна, можно создать Документ пользователя, Складской документ или Прайс-лист. Информация о типах документов записывается в таблицу GD_DOCUMENTTYPE. RUID записи в таблице GD_DOCUMENTTYPE является Подтипом и используется в совокупности с одним из следующих классов:
- TgdcUserDocument -- для шапок пользовательских документов.
- TgdcUserDocumentLine -- для позиций пользовательских документов.
- TgdcInvDocument -- для шапок складских документов.
- TgdcInvDocumentLine -- для позиций складских документов.
- TgdcInvPriceList -- для шапок прайс-листов.
- TgdcInvPriceListLine -- для позиций прайс-листов.
Вышеупомянутые классы образуют следующую иерархию:
Список допустимых подтипов
Список допустимых подтипов для заданного класса возвращает функция GetSubTypeList. По ее внутренней реализации смотрите комментарии для приведенных ниже классов:
- TgdcBase.GetSubTypeList
- TgdcAttrUserDefined.GetSubTypeList
- TgdcUserBaseDocument.GetSubTypeList
- TgdcSelectedGood.GetSubTypeList
Формат строки возвращаемого списка: Читабельное название подтипа=Подтип.
Находясь в Гедымине, просмотреть список всех доступных бизнес-классов с их подтипами можно в окне SQL Редактора на вкладке Бизнес-классы.
Подтипы для экранных форм
При создании нового бизнес-класса автоматически для него создается форма просмотра и диалоговое окно, подтипы которых равны подтипу этого бизнес-класса. Например, при создании простого справочника на основе таблицы USR$TEST (Бизнес-класс: TgdcAttrUserDefined, Подтип: USR$TEST) будут созданы:
- Форма просмотра -- Класс: Tgdc_frmSGR, Подтип: USR$TEST
- Диалоговое окно -- Класс: Tgdc_dlgTRPC, Подтип: USR$TEST
Для бизнес-классов других типов классы экранных форм могут отличаться от приведенных выше, но принцип остается тем же -- подтип экранной формы равен подтипу бизнес-класса.
Просмотр подтипа объекта
Подтип выбранного объекта, имя класса и другие свойства можно просмотреть в Гедымине вызвав из контекстного меню команду Свойства объекта...