Изменение списка доступных значений одного лукапа, в зависимости от выбранного значения другого, оба - в составном справочнике
Здравствуйте,
BPM 7.5.
Есть объекты "UsrDepartment" и "UsrKnowledgeLevel", связанные отношением "многие-ко-многим", т.е. с одним департаментом может быть связаны одно или несколько левелов, а один и тот-же левел может принадлежать многим департаментам. Создал для этой цели состаной справочник.

Есть форма, на ней поля "Department" и "KnowledgeLevel". Нужно реализовать, чтобы при изменении значения департамента изменялся список доступных для выбора поле в "KnowledgeLevel". Как это реализовать? Лучше клиентским JavaScript, хотя можно и C#, только плиз опишите подробно, куда его тогда вставить.

И еще вопрос, в данный момент подчинённый объект "KnowledgeLevel" НЕ содержит колонку-ссылка на родительский объект. Необходима ли она? И если да, как сделать так, чтобы она автоматически заполнялась UId выбранного департамента при добавлении записи "KnowledgeLevel" в окне составного справочника?
Спасибо!
Нравится
Думаю, что вам необходимо реализовать на js подобную конструкцию:
[javascript]
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;
}
}
}
}
[/javascript]
*var leftExpression = "[UsrKnowledgeLevelInUsrDepartment:UsrKnowledgeLevel].UsrDepartment";
Подразумевается, что есть объект для связи "многие-ко-многим" - UsrKnowledgeLevelInUsrDepartment, у которого есть поля UsrKnowledgeLevel и UsrDepartment
Добрый день! Комментарий предоставлен по пунктам.
Настройка логики полей карточки (бизнес-правила)
Настройка происходит в карточке путем изменения конфигурации полей.
Подготовка
Для работы с бизнес правилами нужно добавить в страницу зависимость от модуля бизнес правил:
Пример
Название бизнес-правила может быть произвольным, но оно должно содержать в себе информацию о его предназначении.
Например, бизнес-правило по фильтрации поля Контакт по полю Контрагент может быть названо FiltrationContactByAccount.
[javascript]
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: ""
}
}
}
[/javascript]
Описание зависимостей между колонками, нужно указывать в описание колонок в объекте attributes в свойстве колонки dependencies
Наложении произвольной фильтрации, сортировка и добавление дополнительных колонок в запрос при отображении выпадающего списка нужно указывать явно в описание колонок в объекте attributes в свойстве колонке lookupListConfig.
Пример описания зависимостей между колонками, наложения произвольной фильтрации и сортировки:
[javascript]
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);
}
}
}
}
[/javascript]
Спасибо, заработало! Правда Вы немного ошиблись в createColumnFilterWithParameter, нужно 3м параметром не "department", а "department.value", и после этого работает! Правда, если в поле KnowledgeLevel выбрал левел для Department1, и мы меняем департмент на Department2, то поле не очищается от прежнего значения, уже, возможно, некорректного для Department2.
Вот мой полный код:
[javascript]
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;
}
}
}
[/javascript]