Добрый день!
Есть две таблицы:
1) ListObject с колонками ObjectName(строка), ObjectType(Lookup), ObjectRule(Lookup на RulesList )
2) RulesList с колонками NameRule(строка), ObjectType(Lookup)
Нужно реализовать фильтр, для колонки ObjectRule, таблицы ListObject.
Фильтр должен выводить доступными только те записи ObjectRule, ObjectType которых соответствует ObjectType таблицы ListObject.
rules: { "typeObjectFilter": { lookupListConfig: { filters: [ function() { var ruleToObject = this.get("ObjectRule"); var filterGroup = Ext.create("Terrasoft.FilterGroup"); if (ruleToObject) { var filterByTypeRule = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "[RulesList:ObjectType].value", ruleToObject.value); filterGroup.add("filterByTypeRule", filterByTypeRule); return filterGroup; } } ] } } }
В настоящий момент фильтр не работает, страница не загружается.
Нравится
engineer7,
По первому пункту рекомендую ознакомиться со статьей по построению путей к колонкам относительно корневой схемы на академии:
Изначально Вы писали о том, что хотите фильтровать поле ObjectRule, а в коде реализуете фильтрацию для поля ObjectType.
Дальше Вы реализуете её в блоке rules, но, если делать через lookupListConfig, то реализовывать нужно через блок attributes.
На мой взгляд, в данном случае Вы сильно усложнили себе задачу.
Ваш запрос на sql выглядит таким образом:
select Id
from RuleList
where RuleList.ObjectTypeId = @ObjectTypeId
где @ObjectTypeId - это значение ObjectType из таблицы ListObject
Реализовать такую фильтрацию можно легко с помощью мастера бизнес-правил https://academy.terrasoft.ru/documents/administration/7-13/nastroyka-biznes-pravil либо внести изменения в страницу редактирования на уровне конфигурации https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primeneniya-pravila-filtration
1. Почему в выражении "[RulesList:ObjectType].value" Вы указали "value"?
Вместо value нужно указать поле, по которому будет фильтрация.
Например: "[RulesList:ObjectType].ObjectRule"
2. А вообще для того, чтобы составить корректный запрос всегда для начала рекомендую написать его на языке sql, чтобы было четкое понимание, какой запрос должен сформироваться и уйти в базу данных.
Алла, добрый день! Спасибо за ответ!
1. Не знал этот момент.
2. Sql запрос выглядит таким образом:
SELECT ObjectRule
FROM ListObject INNER JOIN RulesList ON
ListObject.ObjectTypeId = ListObject.ObjectRule.ObjectTypeId
только мне не совсем понятно, в том плане, что запрос выполняется для данных, которые уже находятся в таблице, в моем случае, я сначала выбираю ObjectType в ListObject для нового объекта, но выбранные данные в таблицу еще не добавляю, потому что хочу сначала выбрать правило из RulesList для нового объекта, но данное правило должно иметь точно такой же тип который я выбрал...
Возможно мне нужно идти по другому пути и для начала получить значение из поля "Тип объекта"(ObjectRule таблицы ListObject), которое я добавляю первым?
engineer7,
По первому пункту рекомендую ознакомиться со статьей по построению путей к колонкам относительно корневой схемы на академии:
Изначально Вы писали о том, что хотите фильтровать поле ObjectRule, а в коде реализуете фильтрацию для поля ObjectType.
Дальше Вы реализуете её в блоке rules, но, если делать через lookupListConfig, то реализовывать нужно через блок attributes.
На мой взгляд, в данном случае Вы сильно усложнили себе задачу.
Ваш запрос на sql выглядит таким образом:
select Id
from RuleList
where RuleList.ObjectTypeId = @ObjectTypeId
где @ObjectTypeId - это значение ObjectType из таблицы ListObject
Реализовать такую фильтрацию можно легко с помощью мастера бизнес-правил https://academy.terrasoft.ru/documents/administration/7-13/nastroyka-biznes-pravil либо внести изменения в страницу редактирования на уровне конфигурации https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primeneniya-pravila-filtration
Алла, огромное спасибо!
Получилось реализовать, рабочий вариант:
// Набор правил для колонки [ObjectRule] модели представления. "ObjectRule": { // Правило фильтрации колонки [ObjectRule] по значению колонки [ObjectType]. "FiltrationObjectRuleByObjectType": { // Тип правила FILTRATION. "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION, // Будет выполняться обратная фильтрация. "autocomplete": true, // Будет выполняться очистка значения при изменении значения колонки [ObjectType]. "autoClean": true, // Путь к колонке для фильтрации в справочной схеме [ObjectRule], // на которую ссылается колонка [ObjectRule] модели представления // страницы редактирования. "baseAttributePatch": "ObjectType", // Тип операции сравнения в фильтре. "comparisonType": Terrasoft.ComparisonType.EQUAL, // В качестве значения при сравнении выступает колонка (атрибут) // модели представления. "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE, // Имя колонки модели представления страницы редактирования, // по значению которой будет выполняться фильтрация. "attribute": "ObjectType" } }