TypeInfo - общее описание

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


В документе описана структура описания типа объекта (TypeInfo, метаданные объекта). Просмотр и редактирование метаданных производится с помощью утилиты «Редактор метаданных».

Описание типа объекта (TypeInfo) состоит из следующих частей:

Далее приведена информация по различным элементам TypeInfo. Названия свойств приведены в том виде, в котором они описаны в интерфейсе «Редактора метаданных».

Содержание

Объект

Общая информация об объекте включает в себя такие свойства, как имя объекта, его GUID, имя таблицы БД, в которой хранятся данные объекта и т. д.

Свойство Имя в XML файле Описание
Наследует AncestorID GUID объекта, от которого наследуется текущий объект
GUID GUID GUID текущего объекта
Имя Name Имя объекта
БД DB Имя подключения к БД, в которой хранится таблица объекта. В большинстве случаев не задано. Это свойство используется для подключения к нескольким БД.
Таблица DBTable Имя таблицы БД, в которой хранятся данные объекта. Если имя таблицы не задано, то
  • объект не содержит данных, или
  • существует возможность формирования динамического объекта со структурой текущего объекта.
Модуль ModuleID GUID модуля, содержащего серверный код объекта
Назначение Purpose Перечислитель, может принимать одно из следующих значений:
  • 0 — Не задано
  • 1 — Классификатор
  • 2 — Документ
  • 3 — Картотека
  • 4 — Сводная картотека
  • 5 — Служебный
  • 6 — Тип лимита
  • 7 — Временный

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

Кодировка TableEncoding Возможные значения:
  • ANSI (по умолчанию)
  • OEM
Флаги Flags Побитовая комбинация нескольких флагов. Возможные значения, и их описание см. ниже в таблице Флаги TypeInfo.
Флаги наследования InheritanceFlags Побитовая комбинация нескольких флагов, ограничивающих наследование тех или иных элементов родительского TypeInfo. По умолчанию ограничений нет — наследуются все.

Возможные значения флагов:

  • TI_NOTINHERIT_FIELDS 0x1 — не наследовать поля
  • TI_NOTINHERIT_KEYS 0x2 — не наследовать ключи
  • TI_NOTINHERIT_METHODS 0x4 — не наследовать методы
  • TI_NOTINHERIT_FLDREQ 0x8 — не наследовать обязательность полей. Если этот флаг задан, то все поля, наследуемые из родительского TypeInfo, будут необязательными.
Комментарий Comment Справочная информация об объекте
Группы Group Принадлежность объекта к одной или нескольким группам. Более подробно см. «Группы»
--- GUIDFK Используется только в подобъекте.

Идентификатор основного (родительского) объекта.

Системный/пользовательский макрос — Файл SystemMacroName

UserMacroName

Имя файла, содержащего системные/пользовательские макросы объекта
Системный/пользовательский макрос -Язык SystemMacroType

UserMacroType

Язык системных/пользовательских макросов объекта.

Возможные значения задаются в перечислителе «Язык скрипта»:

  • 1 — RSLScript
  • 2 — VBScript
  • 3 — JScript
  • 4 — PearlScript
  • 5 — PHPScript
Системный/пользовательский макрос — Выполнять SystemMacroRunAt

UserMacroRunAt

Ограничение области выполнения макроса объекта.

Возможные значения:

  • Только на сервере
  • Только на клиенте
  • На сервере и на клиенте (по умолчанию)

На текущий момент механизм ограничения области выполнения макроса нуждается в доработке, поэтому использование значений, отличных от значения по умолчанию, допускается только в исключительных случаях. См. запрос #8977

Шаблон Template Шаблон для строкового представления экземпляра объекта. Используется для историзации полей и для настройки лога Обмена данными

Источник данных

В редакторе метаданных при создании объекта можно указать его тип:

По умолчанию

Обычный(статический) объект на постоянной таблице.

Представление

Объект построенный на представлении (SQL View), при этом запрос образующий представление остаётся постоянным и следовательно не может представить переменные данные.

Функция

Объект построенный на результате работы SQL-функции, функция должна при этом возвращать таблицу по структуре совпадающей с описанием в TI объекта. При использовании такого объекта появляется возможность передавать параметры в объект(функцию) и таким образом оказывать влияние на результат запроса.

Пример запроса по созданию функции

CREATE FUNCTION v_WareInWh ( @idWH INT, @idTypePrice INT, @data DATETIME)
RETURNS TABLE
AS
RETURN
 SELECT WARE.ID AS ID
      , WARE.IsAutoFormat AS IsAutoFormat
      , WARE.Mark AS MARK
..... 
 ---Поля
      , SUMCARD.Quantity AS QuantOnWH
      , PRICE.Price AS Price
 FROM rdtWare AS WARE
 ---Добавление расчетных полей
 LEFT OUTER JOIN (
.....


Пример объекта

TI-объект.jpg

По умолчанию функция выполняется со нулевыми параметрами

SELECT * FROM v_WareInWh ( DEFAULT, DEFAULT, DEFAULT)

Для изменения параметров объекта(функции) используется серверный метод "SetDataParams"

]
.....
var dsObj = GetFullDS("Номенклатура с количеством по складам").RsObject;
    dsObj.Run("SetDataParams"
             ,_idWH
             ,fldTypePrice.Value
             ,objParamToDocumentFrame.m_objParent.m_dsData.RsObject.Fields("Дата документа").Value
             );
.....

Поле

TypeInfo объекта содержит список полей, где для каждого поля задаются такие свойства, как имя поля, имя поля в БД, тип, длина поля и т. д. В таблице приведено описание свойств поля объекта:

Свойство Имя в XML файле Описание
Имя Name Имя поля
--- Number Номер может измениться при загрузке TypeInfo, поэтому использовать жестко заданные номера в прикладном коде нельзя.
Тип Type Перечислитель, задающий тип данных, хранимых в поле. Список возможных значений приведен в таблице Типы данных.
Размер Size Размер поля. Используется только со следующими типами полей:
  • FT_String — задается длина строки
  • FT_Decimal — задается кол-во знаков в дробной части
Код в БД DBCode Имя поля в таблице БД. Если это имя пустое, то соответствующее поле в таблице БД не создается, и поле объекта является расчетным.
Флаги Flags Побитовая комбинация нескольких флагов. Возможные значения, и их описание см. ниже в таблице Флаги TypeInfo.
Перечислитель EnumGUID GUID перечислителя. Применяется только для полей с типом FT_Enum. Поле объекта может принимать одно из значений, заданных в перечислителе с указанным GUID.
Значение по умолчанию DefaultValue Значение по умолчанию сохраняется в поле при создании новой записи объекта, в случае, если явно не было задано другое значение.
Ссылка на RefObjTypeGUID GUID объекта, на который ссылается поле. Используется только для полей с флагом

TI_CLASSIFIER >>>Необходимо уточнение, используется ли эта переменная для полей с другими флагами, например, TI_CONTEXT

Группы Group Принадлежность поля к одной или нескольким группам. Более подробно см. «Группы»

Метод

В TypeInfo может быть задан список методов объекта. В таблице приведено описание свойств метода объекта:

Свойство Имя в XML файле Описание
Имя Name Имя метода
--- Number Номер может измениться при загрузке TypeInfo, поэтому использовать жестко заданные номера в прикладном коде нельзя.
Описание Comment Справочный комментарий с описанием метода
Флаги Flags Побитовая комбинация нескольких флагов. Возможные значения, и их описание см. ниже в таблице Флаги TypeInfo.
Параметры MethodArg Список параметров метода носит справочный характер. Каждый параметр может быть описан с помощью текстовой строки.
Группы Group Принадлежность метода к одной или нескольким группам. Более подробно см. «Группы»


Ключ

В описании объекта должен быть задан как минимум один ключ (первичный). Первичным считается ключ, заданный первым в описании объекта. Первичный ключ должен содержать одно поле — обычно это поле «Идентификатор». На основании ключей, заданных в TypeInfo, в базе данных автоматически создаются соответствующие индексы, позволяющие ускорить выборку информации по ключевым полям.

Свойство Имя в XML файле Описание
Имя Name Имя ключа
--- Number Номер может измениться при загрузке TypeInfo, поэтому использовать жестко заданные номера в прикладном коде нельзя.
Флаги Flags Побитовая комбинация нескольких флагов. Возможные значения, и их описание см. ниже в таблице Флаги TypeInfo. Флаг TI_SYSTEM используется в ключах начиная с версий RS-Balance 3.20.35.0/3.21.37.0.
Поля KeyField Ключ содержит одно или несколько полей, каждое поле ключа соответствует полю объекта.

Подобъект

Подобъект, по сути, является таким же объектом, как и его родительский объект, однако имеет некоторые отличия. Подобъект, как и основной объект, может иметь собственные свойства, поля, методы и ключи. Описание подобъекта в TypeInfo аналогично описанию основного объекта — отличие в том, что подобъект является частью основного объекта, и имеет поле-ссылку на первичный контекст (на основной объект). Подобъект не может содержать в себе других подобъектов — для реализации задачи вложенных подобъектов используется механизм связи между подобъектами, находящимися на одном уровне.


Описание флагов TypeInfo

Название флага, возможные синонимы Числовое значение Объект Поле Метод Ключ Описание
TI_SYSTEM 0x00000001 + + + + Элемент является системным. Обычно это означает то, что элемент нельзя удалять или изменять; при переходе на новую сборку он будет заменен дистрибутивным значением.
TI_HIDDEN 0x00000002 + + +   Скрытый. Скрытый элемент обычно не виден пользователю (не отображается в интерфейсе), однако доступен программно.
TI_ADMIN 0x00000004 + + +   Администрируемый. На этот элемент могут быть заданы права доступа.
TI_READONLY 0x00000008 + +     Только для чтения. Редактирование запрещено.
TI_REQUIRED 0x00000010   +     Поле является обязательным, и не может содержать значение NULL.
TI_TIMESTAMP 0x00000020   + +   В поле хранится временная метка (timestamp). Если флаг задается для метода, это означает, что одним из параметров метода автоматически передается Timestamp текущей записи.
TI_SRVADDED 0x00000040   +     Поле добавлено в коллекцию полей на сервере
TI_HASCHILD 0x00000080   +     Поле содержит значение (true/false), определяющее наличие дочерних записей у текущей записи. Используется при работе древовидных объектов.
TI_DELAYED 0x00000100   +     Поле является отложенным. Если при создании объекта был указан параметр all_fields = ‘yes’, то это поле не будет добавлено в коллекцию полей. Доставка значения поля на клиент происходит в момент первого обращения к значению этого поля. По умолчанию, отложенными являются «тяжелые» поля типа FT_Blob
TI_CLASSIFIER 0x00000200   +     Поле является ссылкой на другой объект (классификатор).
TI_PARENT_KEY 0x00000400   +     Поле является ссылкой на родительскую запись в древовидном объекте.
TI_CONTEXT_PRIMARY 0x00000800   +     Поле является ссылкой на первичный контекст (ссылка на запись основного объекта в подобъекте). Используется только в подобъектах. Если создается основной объект, наследующийся от подобъекта, то это поле должно быть в нем переопределено — флаг TI_CONTEXT_PRIMARY должен быть удален.
TI_CONTEXT 0x00001000   +     Поле является ссылкой на локальный объект в подобъекте. С помощью такого поля реализуется возможность создания «многоуровневых» подобъектов — все подобъекты находятся на одном уровне по отношению к основному объекту, однако могут ссылаться друг на друга, образуя иерархические связи.
TI_DENIED 0x00002000   +     Доступ к полю запрещен. Обычно этот флаг используется при реализации системы прав доступа.
TI_OPER 0x00004000 + +     Для объекта: объект является хранилищем информации о пользователях системы (операционистах). В настоящее время есть только один такой объект — «Пользователь». В системе не может быть более одного объекта с этим флагом.

Для поля: поле является ссылкой на объект, хранящий информацию о пользователях системы. Поле хранит идентификатор пользователя, создавшего запись. Значение поля заполняется автоматически при сохранении новой записи.

TI_CREATION 0x00008000   +     Поле хранит дату и время создания записи объекта. Значение поля заполняется автоматически при сохранении новой записи. У несохраненной записи значение этого поля не задано.
TI_CODE 0x00010000   +     Поле содержит «Строковый код» записи. Этот флаг предназначен для работы универсального механизма отображения значений записей объектов — например, для выбора записи из произвольного объекта, и отображения выбранного значения. Обычно этот флаг необходимо проставлять в поле «Наименование» или «Код» в объекте.

В настоящее время этот флаг практически не используется.

TI_HISTORY 0x00020000 + +     Использовать историзацию значений.
TI_UNAVAILABLE 0x00040000   +     Признак «Значение поля недоступно». Используется в динамических объектах, только на этапе времени выполнения. В связи с особенностями реализации, поля динамического объекта заполняются на этапе его создания. Те поля, которых не было в источнике данных на момент заполнения динамического объекта, не заполняются. Если после заполнения происходит обращение к таким полям, то они возвращаются с флагом TI_UNAVAILABLE, что позволяет корректно обработать эту ситуацию на клиенте.
TI_DEPRECATED 0x00080000   +     Поле не используется и не рекомендуется к использованию. Оно может быть удалено в следующей версии системы. Этот флаг предназначен для предварительной пометки полей, которые не используются в системе, для того, чтобы предупредить о запрете использования их в новых разработках.
TI_LATE_CHECK 0x00100000   +     Отложенная проверка. Проверка значения/обязательности поля осуществляется только в момент сохранения записи на сервере. Этот флаг позволяет добавлять новые записи, у которых правильные значения полей будут рассчитаны позже, на этапе сохранения записи объекта на сервере. Пример такого поля - автоматически расчитываемый номер записи в подобъекте. В момент сохранения записи подобъекта этот номер не задан, и проверка поля не выполняется. Значение номера рассчитывается только при сохранении записи основного объекта с подобъектами.
TI_FUNCTION 0x00100000     +   Метод объекта возвращает значение (является функцией).
TI_NOT_UNIQUE 0x00100000       + Ключ объекта допускает появление неуникальных значений
TI_LOGICAL 0x00200000       + Ключ является логическим. Для первичного ключа это означает, что в таблице БД для поля этого ключа не будет задан признак автоинкрементности (IDENTITY).

Это значение используется только в первичном ключе. В других ключах не используется и не имеет смысла.

TI_SRV_MACRO 0x00400000     +   Метод объекта реализован с помощью макроса, исполняемого на сервере приложений.
TI_UPGRADE_KEY 0x00400000       + Ключ используется для поиска соответствия между записями в дистрибутивной БД и пользовательской БД. Такой ключ называется ключом обновления объекта. Задание ключа обновления в TypeInfo является предпочтительной альтернативой заданию ключа обновления в файле Upgrader.ini. В объекте может быть только один ключ с таким признаком.
TI_NEED_STATE 0x00800000     +   Метод принимает на вход и возвращает состояние объекта (поля текущей записи со всеми подобъектами, которые были загружены в источнике данных).
TI_PACKAGE_KEY 0x00800000       + Ключ используется для пакетов. В объекте может быть только один ключ с таким признаком.
TI_CLIENT_SIDE_CACHING 0x01000000 +       Объект может кэшироваться на клиенте. При выполнении всех необходимых условий, система автоматически кэширует данные этого объекта на клиенте, позволяя избежать лишних обращений к серверу приложений и СУБД.
TI_REPLICATION_KEY 0x01000000       + Ключ используется для репликации. В объекте может быть только один ключ с таким признаком.
TI_SERVER_SIDE_CACHING 0x02000000 +       Объект может кэшироваться на сервере. В настоящее время этот флаг зарезервирован и не используется.
TI_CACHE_LOCKING 0x04000000 +       Запрет кэширования для объекта. В том случае, если этот флаг установлен, кэширование объекта отключается, что позволяет всегда работать с наиболее актуальными данными.
TI_LAST_MODIFIED 0x08000000   +     Поле содержит дату и время последней модификации записи объекта. Значение поля заполняется автоматически на сервере, при вводе/обновлении записи объекта.
TI_FLD_ROWGUIDCOL 0x10000000   +     GUID записи. Поле содержит значение, которое является глобально уникальным (а не только в пределах одной БД, как, например, поле "Идентификатор"). Поэтому данное поле можно использовать для идентификации записей между несколькими различными базами данных. Значение поля заполняется автоматически при создании записи и в дальнейшем меняться не может.
TI_MODIFIED_BY 0x20000000   +     Автор изменений. Поле содержит ссылку на операциониста, который последним вносил изменения в текущую запись. Это поле заполняется автоматически.
TI_DO_NOT_CHECK_VALUE 0x000200000   +     Не проверять значение классификатора.

Расширенные флаги - Flags2

Емкости переменной Flags оказалось недостаточно для хранения всех требуемых флагов TypeInfo. Поэтому была реализована возможность задавать расширенные флаги. При сохранении TypeInfo в XML эти флаги указываются каждый по отдельности - это упрощает обработку TypeInfo внешними средствами. Расширенные флаги могут задаваться для объектов, полей, методов и ключей. Расширенные флаги нельзя задавать в атрибуте Flags, для их хранения используется переменная Flags2 (внутренний формат) или отдельные теги (XML).

Название флага, возможные синонимы Числовое значение Объект Поле Метод Ключ Описание
TI_TABLE_OWNER 0x00000001 + Объект является владельцем таблицы. Данный флаг необходим в том случае, если на одной таблице БД существует несколько объектов. Только один из них может быть владельцем таблицы. Если на таблице есть только один объект, то он автоматически считается владельцем этой таблицы. На текущий момент флаг TI_TABLE_OWNER используется при каскадном удалении - методы Update/Delete вызываются у владельца таблицы.

Группы

Различные элементы TypeInfo (объекты, поля, методы) могут быть отнесены к произвольным группам (сгруппированы). Группировка может использоваться как для более удобного визуального представления TypeInfo, так и для использования в прикладной логике. Например, все объекты, имеющие отношение к документообороту, можно поместить в группу «Документооборот». При этом, для того чтобы добавить новую группу, базовая структура TypeInfo не меняется, и никаких доработок инструмента не требуется.

Принадлежность к группам задается в TypeInfo объекта. Один и тот же элемент TypeInfo может принадлежать нескольким группам. Для включения элемента TypeInfo в группу достаточно добавить строку с названием группы в нужный элемент TypeInfo (см. «Редактор метаданных»).


Типы данных

В TypeInfo возможно описание следующих типов данных:

Название типа Числовое значение Аналог в MSSQL 2005 Описание
FT_Null 0 - Значение поля не задано. Этот тип поля используется на этапе времени выполнения, и не используется в TypeInfo для задания типа поля.
FT_Int8 1 smallint 8-битное целое число
FT_Int16 2 smallint 16-битное целое число
FT_Int32 3 int 32-битное целое число
FT_Int64 4 binary (8) 64-битное целое число
FT_Char 5 nchar (1) Символьный тип. Значение поля представляется в виде одного символа из таблицы UNICODE.
FT_String 6 nvarchar(len)

где len - длина строки

Строковый тип. Поле этого типа содержит UNICODE строку.
FT_GUID 7 uniqueidentifier Глобально уникальный идентификатор — GUID. Значение поля занимает 16 байт.
FT_Date 8 datetime Дата /время. В поле может храниться только дата (в этом случае время нулевое — 0:00:00), или дата со временем.

Диапазон допустимых значений: 30 дек 1899 г. — 31 дек 9999 г.

FT_Blob 9 image Поле может хранить двоичный блок данных большой длины (BLOB), например, изображение, текст, файл и т. д. Обработка (интерпретация) данных, содержащихся в поле типа FT_Blob, происходит на прикладном уровне. Значение этого поля сохраняется в базе данных в сжатом виде.
FT_Decimal 10 decimal(28, ndigits)

где ndigits - кол-во знаков в дробной части

Значение типа Decimal. По умолчанию используется 4 знака после запятой, число знаков может быть задано дополнительно.
FT_Money 11 decimal(28, 2) Значение типа Money — предназначено для хранения денежных сумм. Количество знаков после запятой — 2.
FT_Bool 12 tinyint Значение логического типа (boolean).
FT_Enum 13 int Значение перечисляемого типа. В системе должен быть задан перечислитель, из которого берутся возможные значения поля.
FT_Real4 14 real Вещественное число, размером 4 байта
FT_Real8 15 float Вещественное число двойной точности, размером 8 байт
FT_IfPtr 16 - Это значение не используется в TypeInfo. Это служебное значение, которое используется инструментом.
FT_Delayed 17 - Это значение не используется в TypeInfo. Это служебное значение, которое используется инструментом.
FT_LargeText 18 image Текст, хранимый в поле с типом BLOB. Ограничений на длину текста нет.
FT_Picture 19 image Изображение, хранимое в поле с типом BLOB.
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Для разработки
Инструменты