Изменение списка доступных значений одного лукапа, в зависимости от выбранного значения другого, оба - в составном справочнике
Здравствуйте,
BPM 7.5.
Есть объекты "UsrDepartment" и "UsrKnowledgeLevel", связанные отношением "многие-ко-многим", т.е. с одним департаментом может быть связаны одно или несколько левелов, а один и тот-же левел может принадлежать многим департаментам. Создал для этой цели состаной справочник.
Есть форма, на ней поля "Department" и "KnowledgeLevel". Нужно реализовать, чтобы при изменении значения департамента изменялся список доступных для выбора поле в "KnowledgeLevel". Как это реализовать? Лучше клиентским JavaScript, хотя можно и C#, только плиз опишите подробно, куда его тогда вставить.
И еще вопрос, в данный момент подчинённый объект "KnowledgeLevel" НЕ содержит колонку-ссылка на родительский объект. Необходима ли она? И если да, как сделать так, чтобы она автоматически заполнялась UId выбранного департамента при добавлении записи "KnowledgeLevel" в окне составного справочника?
Спасибо!
Нравится
Думаю, что вам необходимо реализовать на js подобную конструкцию:
attributes: { "UsrKnowledgeLevel": { lookupListConfig: { filter: function() { var department = this.get("UsrDepartment"); var leftExpression = "[UsrKnowledgeLevelInUsrDepartment:UsrKnowledgeLevel].UsrDepartment"; var filter = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, leftExpression, department); return filter; } } } }
*var leftExpression = "[UsrKnowledgeLevelInUsrDepartment:UsrKnowledgeLevel].UsrDepartment";
Подразумевается, что есть объект для связи "многие-ко-многим" - UsrKnowledgeLevelInUsrDepartment, у которого есть поля UsrKnowledgeLevel и UsrDepartment
Добрый день! Комментарий предоставлен по пунктам.
Настройка логики полей карточки (бизнес-правила)
Настройка происходит в карточке путем изменения конфигурации полей.
Подготовка
Для работы с бизнес правилами нужно добавить в страницу зависимость от модуля бизнес правил:
Пример
Название бизнес-правила может быть произвольным, но оно должно содержать в себе информацию о его предназначении.
Например, бизнес-правило по фильтрации поля Контакт по полю Контрагент может быть названо FiltrationContactByAccount.
rules: { "Contact": { FiltrationContactByAccount: { //Указываем тип правила ruleType: BusinessRuleModule.enums.RuleType.FILTRATION, //Указываем будет ли обратное автозаполнение autocomplete: true, //Указываем мета-путь относительно базового обьекта('Contact') //по которому будем фильтровать baseAttributePatch: "Account", //Указываем тип фильтрации comparisonType: Terrasoft.ComparisonType.EQUAL, //Указываем тип значения для фильтрации type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, //Указываем атрибут модели для сравнения (если тип значения - атрибут) attribute: "Account", //Указываем мета-путь значения в выбранном атрибуте (если нужно) attributePath: "", //Если тип значения не атрибут, указываем значение //(константа | имя системной настройки | имя системного значения) value: "" } }, "City": { FiltrationCityByCounty: { ruleType: BusinessRuleModule.enums.RuleType.FILTRATION, autocomplete: true, baseAttributePatch: "Country", comparisonType: Terrasoft.ComparisonType.EQUAL, type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, attribute: "Country", attributePath: "", value: "" }, FiltrationCityByRegion: { ruleType: BusinessRuleModule.enums.RuleType.FILTRATION, autocomplete: true, baseAttributePatch: "Region", comparisonType: Terrasoft.ComparisonType.EQUAL, type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, attribute: "Region", attributePath: "", value: "" } } }
Описание зависимостей между колонками, нужно указывать в описание колонок в объекте attributes в свойстве колонки dependencies
Наложении произвольной фильтрации, сортировка и добавление дополнительных колонок в запрос при отображении выпадающего списка нужно указывать явно в описание колонок в объекте attributes в свойстве колонке lookupListConfig.
Пример описания зависимостей между колонками, наложения произвольной фильтрации и сортировки:
attributes: { "Probability": { dependencies: [ { columns: ["Owner"], methodName: "getProbability" } ], lookupListConfig: { columns: ["Value"], orders: [ { columnPath: "Value", direction: Terrasoft.OrderDirection.DESC } ], filter: function() { return Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.GREATER, "Value", 40); } } } }
Спасибо, заработало! Правда Вы немного ошиблись в createColumnFilterWithParameter, нужно 3м параметром не "department", а "department.value", и после этого работает! Правда, если в поле KnowledgeLevel выбрал левел для Department1, и мы меняем департмент на Department2, то поле не очищается от прежнего значения, уже, возможно, некорректного для Department2.
Вот мой полный код:
attributes: { "UsrKnowledgeLevel": { lookupListConfig: { filter: function () { var department = this.get("UsrDepartmentUsr"); var leftExpression = "[UsrDepartmentByLevel:UsrKnowledgeLevel].UsrDepartment"; var filter = Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, leftExpression, department.value ); return filter; } } }