ForeignKeyManagerExtension

class axioma.core.dp.ForeignKeyManagerExtension

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

Принцип работы основан на предварительной регистрации взаимосвязи между открываемыми позднее таблицами. Т.е. регистрация должна производится до момента открытия основной таблицы. На справочники это условие не распространяется.

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

Результатом будет подмена в таблице просмотра и редакторе свойств значания поля с кодом на значение описания из справочника. Так-же при редактировании будет использован выпадающий список со значениями из справочника.

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

Унаследован от: Extension

ForeignKeyManagerExtension()

Конструктор

registerForeignKeyByData(jdTable, jdDict, keyFields)

Регистрация внешнего ключа в расширении

Параметры:
  • jdTable (JsonDefinition) – Описание основной таблицы
  • jdDict (JsonDefinition) – Описание справочника
  • keyFields (ForeignKey) – Атрибуты, учавствующие в формировании внешнего ключа
unregisterForeignKeyByData(jdTable)

Отмена регистрация внешних ключей таблицы в расширении

Параметры:jdTable (JsonDefinition) – Описание основной таблицы
Результат:True, если успешно. В противном случае False
Тип результата:bool

ForeignKey

class axioma.core.dp.ForeignKey

Данные по внешнему ключу

Унаследован от: QObject

class FromTo

Структура с данными

attributeKey

Атрибут с кодом основной таблицы

type:str
attributeKeyForeign

Атрибут с кодом таблицы-справочника

type:str
attributeNameForeign

Атрибут с описанием в таблице-справочнике

type:str

Пример использования:

 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)