Документация по разработке bpm’online
PDF
Документация по разработке
Построение путей к колонкам относительно корневой схемы

Glossary Item Box

Построение путей к колонкам относительно корневой схемы. Примеры

Отправной точкой механизма построения запроса EntitySchemaQuery является корневая схема и принцип обратной связи (подробнее об этом в статье "Использование EntitySchemaQuery для построения запросов к базе данных").

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

1) Колонка корневой схемы

В этом случае имя колонки строится как [Имя колонки в корневой схеме].

  • Корневая схема: Contact
  • Пример: колонка с адресом контакта
  • Имя колонки: Address
  • Пример создания запроса EntitySchemaQuery, возвращающего значения этой колонки:

Пример 1

// Создаем экземпляр класса [EntitySchemaQuery] с корневой схемой [Contact].
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
// Добавляем колонку [Address], задаем для нее псевдоним [Address].
esq.addColumn("Address", "Address");

2) Колонка схемы, на которую ссылается колонка-справочник текущей схемы

Имя колонки строится по принципу [Имя колонки-справочника].[Имя колонки схемы, на которую ссылается справочник].

При этом в результирующем запросе к корневой схеме City оператором JOIN (по умолчанию – LEFT OUTER JOIN) будет присоединена схема Country. Условие присоединения (условие ON оператора JOIN) формируется по следующему принципу:
[Имя присоединяемой схемы].[Id] = [Имя корневой схемы].[Имя колонки, которая ссылается на присоединяемую схему + Id]

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

  • Корневая схема: Contact
  • Пример: колонка с названием контрагента, колонка с именем основного контакта у контрагента
  • Имена колонок: Account.Name, Account.PrimaryContact.Name
  • Пример создания запроса EntitySchemaQuery, возвращающего значения этих колонок:

Пример 2

// Создаем экземпляр класса [EntitySchemaQuery] с корневой схемой [Contact].
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
// Добавляем колонку-справочник [Account].
// Затем добавляем колонку [Name] из схемы [Account],
// на которую ссылается колонка-справочник [Account], и задаем для нее псевдоним [AccountName].
esq.addColumn("Account.Name", "AccountName");
// Добавляем колонку-справочник [Account].
// Затем добавляем колонку-справочник [PrimaryContact] из схемы [Account],
// на которую ссылается колонка-справочник [Account].
// Затем добавляем колонку [Name] из схемы [Contact],
// на которую ссылается колонка-справочник [PrimaryContact], и задаем для нее псевдоним [PrimaryContactName].
esq.addColumn("Account.PrimaryContact.Name", "PrimaryContactName");

3) Колонка схемы по произвольному внешнему ключу

Имя колонки строится по принципу:

[Имя_присоединяемой_схемы:Имя_колонки_для_связи_присоединяемой_схемы:Имя_колонки_для_связи_текущей_схемы].

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

[Имя_присоединяемой_схемы:Имя_колонки_для_связи_присоединяемой_схемы].

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

  • Пример: колонка с именем контакта, который добавил город
  • Имя колонки: [Contact:Id:CreatedBy].Name
  • Пример создания запроса EntitySchemaQuery, возвращающего значения этой колонки:

Пример 3

// Создаем экземпляр класса [EntitySchemaQuery] с корневой схемой [Contact].
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
// Присоединяем к корневой схеме еще одну схему [Contact] по колонке [Owner]
// и выбираем из нее колонку [Name]. Задаем для нее псевдоним [OwnerName].
esq.addColumn("[Contact:Id:Owner].Name", "OwnerName");
// К колонке типа справочник [Account] присоединяем схему [Contact] по колонке [PrimaryContact]
// и выбираем из нее колонку [Name].
// Задаем для нее псевдоним [PrimaryContactName].
esq.addColumn("Account.[Contact:Id:PrimaryContact].Name", "PrimaryContactName");

Смотрите также

© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?