axioma.core.dp.
ForeignKeyManagerExtension
¶Расширение-менеджер, которое позволяет организовывать связи между таблицами по принципу справочников.
Принцип работы основан на предварительной регистрации взаимосвязи между открываемыми позднее таблицами. Т.е. регистрация должна производится до момента открытия основной таблицы. На справочники это условие не распространяется.
Если регистрация корректна, то в момент открытии основной таблицы будет произведена проверка на предмет наличия уже открытых таблиц со справочниками. Если таковые отсутствуют, производится их открытие. Правильность регистрации проверяется на этапе открытия основной таблицы.
Результатом будет подмена в таблице просмотра и редакторе свойств значания поля с кодом на значение описания из справочника. Так-же при редактировании будет использован выпадающий список со значениями из справочника.
Внешних ключей для одной таблицы может быть несколько. В этом случае регистрация ключей производится последовательно до регистрации самого расширения в системе.
Унаследован от: Extension
ForeignKeyManagerExtension
()¶Конструктор
registerForeignKeyByData
(jdTable, jdDict, keyFields)¶Регистрация внешнего ключа в расширении
Параметры:
- jdTable (
JsonDefinition
) – Описание основной таблицы- jdDict (
JsonDefinition
) – Описание справочника- keyFields (
ForeignKey
) – Атрибуты, учавствующие в формировании внешнего ключа
unregisterForeignKeyByData
(jdTable)¶Отмена регистрация внешних ключей таблицы в расширении
Параметры: jdTable ( JsonDefinition
) – Описание основной таблицыРезультат: True, если успешно. В противном случае False Тип результата: bool
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import axioma.gui.extension
from axioma.core.dp import ForeignKeyManagerExtension, JsonDefinition, JsonController, ForeignKey
'''
Пример создания ссылки на справочник для поля таблицы. Данный скрипт необходимо выполнить до открытия источников данных.
После выполнения открываем таблицу ElectricLine.tab. При этом таблица DIC_VOLTAGE.tab так-же будет открыта.
Далее в элементах редактирования атрибутивной информации таблицы ElectricLine значение поля VOLTAGE будет заменено выпадающим
списком с текстовым описанием, взятом из справочника (значение поля ShortNAM).
'''
# Создаем расширение для храниния данных по внешним ключам.
foreignExt = axioma.core.dp.ForeignKeyManagerExtension()
# Описываем основную таблицу
jdTable = JsonDefinition()
JsonController.setSource(jdTable, '/tmp/ElectricLine.tab')
JsonController.setObject(jdTable, 'ElectricLine')
# Описываем таблицу-справочник
jdDict = JsonDefinition()
JsonController.setSource(jdDict, '/tmp/DIC_VOLTAGE.tab')
JsonController.setObject(jdDict, 'DIC_VOLTAGE')
# Данные по полям
keyFields = ForeignKey.FromTo()
# Атрибут с кодом основной таблицы
keyFields.attributeKey = 'VOLTAGE'
# Атрибут с кодом таблицы-справочника
keyFields.attributeKeyForeign = 'VOLTAGE'
# Атрибут с описанием в таблице-справочнике
keyFields.attributeNameForeign = 'ShortNAM'
# Регистрируем в расширении внешний ключ.
foreignExt.registerForeignKeyByData(jdTable, jdDict, keyFields)
# Регистрируем расширение в системе
axioma.app.core.prependExtension(foreignExt)
|