Подтип (Subtype)

Материал из GedeminWiki
Перейти к: навигация, поиск

Платформа Гедымин написана на объектно-ориентированном языке Object Pascal. Например, иерархия классов справочника контактов выглядит так:


gdcContacts_hierarhy.png


Глядя на нее можно сказать, что Банк -- это особый вид компании, Компания -- Контакта, Контакт -- вид бизнес-объекта. Все указанные классы находятся в модуле gdcContacts.pas и компилируются в исполняемый файл gedemin.exe.

Возникает вопрос: как разработчик на платформе Гедымин может создавать новые классы бизнес-объектов если у него нет доступа ни к исходным кодам, ни к компилятору Delphi? Да и пишет он программный код на языке VBScript.

Для создания бизнес-классов в платформе, в класс TgdcBase добавлено строковое свойство SubType (Подтип):

  TgdcSubType = ShortString;
  ...
  property SubType: TgdcSubType read GetSubType write SetSubType;

В зависимости от значения подтипа будут вызываться перекрытые в платформе методы, загружаться визуальные настройки экранных форм и т.п.

Если в Паскале класс однозначно идентифицируется по его имени, то в платформе Гедымин бизнес-класс идентифицируется коомбинацией Имя класса + Подтип. Подтип может отсутствовать (пустая строка). Ниже приведены три способа создания Подтипов (т.е. фактически создания новых бизнес-классов).

Создание нового типа через Глобальное Хранилище

Рассмотрим на примере создания класса Продукт питания, наследника класса ТМЦ (TgdcGood).

  1. Продукту питания присущи специфические свойства: калорийность, содержание белков, жиров, углеводов, витаминов, пищевых добавок и т.п.
  2. Для хранения соответствующей информации в базе данных добавим поля в таблицу GD_GOOD (не делайте добавляемые поля обязательными для заполнения -- NOT NULL. При необходимости, контролируйте корректность значений с помощью триггеров).
  3. В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке Атрибуты.
  4. Откроем Глобальное Хранилище, найдем папку SubTypes.
  5. Добавим строковую переменную с именем TgdcGood. Установим ей значение Food -- это будет имя нашего подтипа для класса Продукт питания. Если для некоторого класса задается несколько подтипов, то они перечисляются через запятую в строке.
  6. Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в Исследователе создадим команду, укажем имя Продукт питания, класс TgdcGood и подтип Food. Откроем и настроим соответствующие формы.
  7. Пример доступа к новому классу из программного кода:
  ...
  Dim Food, Creator
  Set Creator = New TCreator
  Set Food = Creator.GetObject(nil, "TgdcGood", "")
  Food.SubType = "Food"  ' без присвоения подтипа это будет просто ТМЦ
  Food.SubSet = "All"
  Food.Open
  ...

Стоит обратить внимание, что указанным способом можно создать подтипы только для классов, прописанных в исходном коде платформы.

Создание нового справочника

Создание нового бизнес-класса справочника начинается с создания таблицы в разделе Исследователь-Сервис-Атрибуты. Имя этой таблицы и будет подтипом для одного из следующих классов:

  • TgdcAttrUserDefined -- для таблиц с линейной (не древовидной) структурой.
  • TgdcAttrUserDefinedTree -- для таблиц древовидной структуры.
  • TgdcAttrUserDefinedLBRBTree -- для таблиц со структурой интервального дерева.


gdcAttrUserDefined_hierarhy.png


В диалоговом окне создания таблицы указывается ветка Исследователя для размещения команды вызова формы просмотра создаваемого класса.

Создание нового типа документов

Бизнес-классы документов (синоним типы документов, типовые документы) создаются в разделе Исследователь-Сервис-Типовые документы. В зависимости от того, какой раздел выбран в левой части окна, можно создать Документ пользователя, Складской документ или Прайс-лист. Информация о типах документов записывается в таблицу GD_DOCUMENTTYPE. RUID записи в таблице GD_DOCUMENTTYPE является Подтипом и используется в совокупности с одним из следующих классов:

  • TgdcUserDocument -- для шапок пользовательских документов.
  • TgdcUserDocumentLine -- для позиций пользовательских документов.
  • TgdcInvDocument -- для шапок складских документов.
  • TgdcInvDocumentLine -- для позиций складских документов.
  • TgdcInvPriceList -- для шапок прайс-листов.
  • TgdcInvPriceListLine -- для позиций прайс-листов.

Вышеупомянутые классы образуют следующую иерархию:


gdcClasses_hierarhy.png


Список допустимых подтипов

Список допустимых подтипов для заданного класса возвращает функция GetSubTypeList. По ее внутренней реализации смотрите комментарии для приведенных ниже классов:

Формат строки возвращаемого списка: Читабельное название подтипа=Подтип.

Находясь в Гедымине, просмотреть список всех доступных бизнес-классов с их подтипами можно в окне SQL Редактора на вкладке Бизнес-классы.

Подтипы для экранных форм

При создании нового бизнес-класса автоматически для него создается форма просмотра и диалоговое окно, подтипы которых равны подтипу этого бизнес-класса. Например, при создании простого справочника на основе таблицы USR$TEST (Бизнес-класс: TgdcAttrUserDefined, Подтип: USR$TEST) будут созданы:

  • Форма просмотра -- Класс: Tgdc_frmSGR, Подтип: USR$TEST
  • Диалоговое окно -- Класс: Tgdc_dlgTRPC, Подтип: USR$TEST

Для бизнес-классов других типов классы экранных форм могут отличаться от приведенных выше, но принцип остается тем же -- подтип экранной формы равен подтипу бизнес-класса.

Динамическое присваивание произвольного подтипа

Просмотр подтипа объекта

Подтип выбранного объекта, имя класса и другие свойства можно просмотреть в Гедымине вызвав из контекстного меню команду Свойства объекта...

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты