Подтип (Subtype)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
(не показаны 6 промежуточных версий 1 участника) | |||
Строка 12: | Строка 12: | ||
<syntaxhighlight lang="Delphi"> | <syntaxhighlight lang="Delphi"> | ||
− | property SubType: | + | TgdcSubType = ShortString; |
+ | ... | ||
+ | property SubType: TgdcSubType read GetSubType write SetSubType; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | В зависимости от значения подтипа будут вызываться перекрытые в платформе методы, загружаться визуальные настройки экранных форм и т.п. | ||
Если в Паскале класс однозначно идентифицируется по его имени, то в платформе Гедымин бизнес-класс идентифицируется коомбинацией '''Имя класса + Подтип'''. Подтип может отсутствовать (пустая строка). Ниже приведены три способа создания '''Подтипов''' (т.е. фактически создания новых бизнес-классов). | Если в Паскале класс однозначно идентифицируется по его имени, то в платформе Гедымин бизнес-класс идентифицируется коомбинацией '''Имя класса + Подтип'''. Подтип может отсутствовать (пустая строка). Ниже приведены три способа создания '''Подтипов''' (т.е. фактически создания новых бизнес-классов). | ||
Строка 25: | Строка 29: | ||
# В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке '''Атрибуты'''. | # В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке '''Атрибуты'''. | ||
# Откроем [[Хранилище|Глобальное Хранилище]], найдем папку SubTypes. | # Откроем [[Хранилище|Глобальное Хранилище]], найдем папку SubTypes. | ||
− | # Добавим строковую переменную с именем '''TgdcGood'''. Установим ей значение '''Food''' -- это будет имя нашего подтипа для класса '''Продукт питания'''. | + | # Добавим строковую переменную с именем '''TgdcGood'''. Установим ей значение '''Food''' -- это будет имя нашего подтипа для класса '''Продукт питания'''. Если для некоторого класса задается несколько подтипов, то они перечисляются через запятую в строке. |
# Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в [[Исследователь системы|Исследователе]] создадим команду, укажем имя '''Продукт питания''', класс '''TgdcGood''' и подтип '''Food'''. Откроем и настроим соответствующие формы. | # Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в [[Исследователь системы|Исследователе]] создадим команду, укажем имя '''Продукт питания''', класс '''TgdcGood''' и подтип '''Food'''. Откроем и настроим соответствующие формы. | ||
# Пример доступа к новому классу из программного кода: | # Пример доступа к новому классу из программного кода: | ||
Строка 73: | Строка 77: | ||
− | === | + | ===Список допустимых подтипов=== |
− | Список допустимых подтипов возвращает функция '''GetSubTypeList'''. | + | Список допустимых подтипов для заданного класса возвращает функция '''GetSubTypeList'''. По ее внутренней реализации смотрите комментарии для приведенных ниже классов: |
* [[gdcBase.TgdcBase.GetSubTypeList|TgdcBase.GetSubTypeList]] | * [[gdcBase.TgdcBase.GetSubTypeList|TgdcBase.GetSubTypeList]] | ||
Строка 81: | Строка 85: | ||
* [[gdcClasses.TgdcUserBaseDocument.GetSubTypeList|TgdcUserBaseDocument.GetSubTypeList]] | * [[gdcClasses.TgdcUserBaseDocument.GetSubTypeList|TgdcUserBaseDocument.GetSubTypeList]] | ||
* [[gdcGood.TgdcSelectedGood.GetSubTypeList|TgdcSelectedGood.GetSubTypeList]] | * [[gdcGood.TgdcSelectedGood.GetSubTypeList|TgdcSelectedGood.GetSubTypeList]] | ||
+ | * [[gdcInvMovement.TgdcInvRemains.GetSubTypeList|TgdcInvRemains.GetSubTypeList]] | ||
+ | * [[gdcInvMovement.TgdcInvGoodRemains.GetSubTypeList|TgdcInvGoodRemains.GetSubTypeList]] | ||
+ | |||
+ | Формат строки возвращаемого списка: '''Читабельное название подтипа=Подтип'''. | ||
+ | |||
+ | Находясь в Гедымине, просмотреть список всех доступных бизнес-классов с их подтипами можно в окне [[SQL Редактор|SQL Редактора]] на вкладке '''Бизнес-классы'''. | ||
===Подтипы для экранных форм=== | ===Подтипы для экранных форм=== | ||
+ | При создании нового бизнес-класса автоматически для него создается форма просмотра и диалоговое окно, подтипы которых равны подтипу этого бизнес-класса. Например, при создании простого справочника на основе таблицы '''USR$TEST''' (Бизнес-класс: '''TgdcAttrUserDefined''', Подтип: '''USR$TEST''') будут созданы: | ||
+ | |||
+ | * Форма просмотра -- Класс: '''Tgdc_frmSGR''', Подтип: '''USR$TEST''' | ||
+ | * Диалоговое окно -- Класс: '''Tgdc_dlgTRPC''', Подтип: '''USR$TEST''' | ||
+ | |||
+ | Для бизнес-классов других типов классы экранных форм могут отличаться от приведенных выше, но принцип остается тем же -- подтип экранной формы равен подтипу бизнес-класса. | ||
+ | |||
+ | ===Динамическое присваивание произвольного подтипа=== | ||
+ | |||
+ | ===Просмотр подтипа объекта=== | ||
+ | Подтип выбранного объекта, имя класса и другие свойства можно просмотреть в Гедымине вызвав из контекстного меню команду '''Свойства объекта...''' | ||
[[Category:Книга]] | [[Category:Книга]] |
Текущая версия на 07:32, 19 февраля 2015
Платформа Гедымин написана на объектно-ориентированном языке Object Pascal. Например, иерархия классов справочника контактов выглядит так:
Глядя на нее можно сказать, что Банк -- это особый вид компании, Компания -- Контакта, Контакт -- вид бизнес-объекта. Все указанные классы находятся в модуле gdcContacts.pas и компилируются в исполняемый файл gedemin.exe.
Возникает вопрос: как разработчик на платформе Гедымин может создавать новые классы бизнес-объектов если у него нет доступа ни к исходным кодам, ни к компилятору Delphi? Да и пишет он программный код на языке VBScript.
Для создания бизнес-классов в платформе, в класс TgdcBase добавлено строковое свойство SubType (Подтип):
TgdcSubType = ShortString; ... property SubType: TgdcSubType 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
- TgdcInvRemains.GetSubTypeList
- TgdcInvGoodRemains.GetSubTypeList
Формат строки возвращаемого списка: Читабельное название подтипа=Подтип.
Находясь в Гедымине, просмотреть список всех доступных бизнес-классов с их подтипами можно в окне SQL Редактора на вкладке Бизнес-классы.
[править] Подтипы для экранных форм
При создании нового бизнес-класса автоматически для него создается форма просмотра и диалоговое окно, подтипы которых равны подтипу этого бизнес-класса. Например, при создании простого справочника на основе таблицы USR$TEST (Бизнес-класс: TgdcAttrUserDefined, Подтип: USR$TEST) будут созданы:
- Форма просмотра -- Класс: Tgdc_frmSGR, Подтип: USR$TEST
- Диалоговое окно -- Класс: Tgdc_dlgTRPC, Подтип: USR$TEST
Для бизнес-классов других типов классы экранных форм могут отличаться от приведенных выше, но принцип остается тем же -- подтип экранной формы равен подтипу бизнес-класса.
[править] Динамическое присваивание произвольного подтипа
[править] Просмотр подтипа объекта
Подтип выбранного объекта, имя класса и другие свойства можно просмотреть в Гедымине вызвав из контекстного меню команду Свойства объекта...