Добрый день.
В карточке обращения есть группа полей (например, Сроки), мне нужно скрыть\показать группу в зависимости от каких-либо условий (например, показать группу полей Сроки только на стадии "Решено").
как пример LeadPageV2 группа полей "Регистрационные данные"
attributes:{
...
//атрибут значением которого мы будем контролировать видимость группы полей"isLeadPageRegisterInfoVisible":{
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value:false},
...
}
diff:{
...
//merge для конфигурационного объекта группы полей{"operation":"merge",
"name":"LeadPageRegisterInfo",
"values":{//"биндинг" (привязка) значения свойства viewModel к атрибуту"visible":{bindTo:"isLeadPageRegisterInfoVisible"}}},
...
},
methods:{
...
"onEntityInitialized": function(){this.callParent(arguments);//сохраним в глобальной области видимости контекст карточки, для удобного доступа из консоли
document.thisPageScope=this;}
...
}
теперь откроем карточку лида, и в консоли поиграемся значением атрибута:
document.thisPageScope.set("isLeadPageRegisterInfoVisible", true);//наблюдаем появившуюся группу полей
document.thisPageScope.set("isLeadPageRegisterInfoVisible", false);//наблюдаем как группа полей была скрыта.
вам необходимо определить группу полей в diff секции карточки
и ёё свойство visible забиндить на атрибут (булево) значением которого в последствии управлять из Вашего клиентского кода, в зависимости от значения в атрибуте - группа полей будет скрыта или продемонстрирована.
как пример LeadPageV2 группа полей "Регистрационные данные"
attributes:{
...
//атрибут значением которого мы будем контролировать видимость группы полей"isLeadPageRegisterInfoVisible":{
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value:false},
...
}
diff:{
...
//merge для конфигурационного объекта группы полей{"operation":"merge",
"name":"LeadPageRegisterInfo",
"values":{//"биндинг" (привязка) значения свойства viewModel к атрибуту"visible":{bindTo:"isLeadPageRegisterInfoVisible"}}},
...
},
methods:{
...
"onEntityInitialized": function(){this.callParent(arguments);//сохраним в глобальной области видимости контекст карточки, для удобного доступа из консоли
document.thisPageScope=this;}
...
}
теперь откроем карточку лида, и в консоли поиграемся значением атрибута:
document.thisPageScope.set("isLeadPageRegisterInfoVisible", true);//наблюдаем появившуюся группу полей
document.thisPageScope.set("isLeadPageRegisterInfoVisible", false);//наблюдаем как группа полей была скрыта.
В мастере "бизнес-правил" (новые, в 7.10)
По какой-то причине недоступен пункт "Добавить действие", т.е. условия можно добавлять не ограничено, а вот действие - только одно. Промелькнула мысль, что "оно так устроено", но само наличие, пускай и не активного, пункта "Добавить действие" косвенно говорит о том, что действий может быть несколько на один набор условий (что вполне логично).
Я что-то делаю не так ?
Как пожелание:
Иметь возможность выполнять группу действий основываясь на группе условий - весьма ожидаемый кейс.
Зачастую доступность/видимость/обязательность десятков полей, зависит от единой группы условий.
PS: мы понимаем что тут необходимо повесить требуемые конечные свойства видимость/доступность/обязательность - на атрибут и управлять его состоянием в логике.
Но, ИМХО, в бизнес-правилах, такой кейс очень будет "к месту".
само собой тут не хватает "противоположенных" действий:
Если есть действие "Сделать поле редактируемым", то по идее должно быть и "Сделать поле недоступным"
Если есть действие "Скрыть поле", то должно быть и "Показать поле"
и так далее...
Можно конечно отталкиваться от "противоположенности" условий, но в таком случае необходимо предусматривать особые начальные состояния.
Например чтобы эффективно использовать "Показать поле на странице"
Его для начала следует "скрыть", т.е. описать его как изначально скрытое, в то время как по умолчанию (например из мастера) поля создаются видимыми.
По этому логичнее скрывать его там где оно не нужно, чем показывать его везде где оно нужно.
ну я думаю кейс понятен :) одно бизнес-правило, против нескольких бизнес-правил и работы со схемой, для реализации одного и того же поведения.
:) и еще немного.
В мастере редактирования бизнес-правил, очень не хватает сортировки, а в идеале еще и колонок с литералами полей на которые они влияют. Поскольку наименования формируются автоматически,
"глазками" очень сложно искать искомое в огромном списке.
все Ваши замечания резонны, думаю, что они будут реализованы в ближайших релизах. То, что сейчас есть в версии 7.10 - это реализация в первом приближении.
От себя добавлю, что по логике, дизайнер бизнес правил должен предоставлять практически все возможности настройки, что есть и у настраиваемых в конфигурации правил.
Уже сейчас очевидно, что очень не хватает стандартной возможности автозаполнения по обратным связям.
И, если мы говорим о пользовательском инструменте, то и названия колонок, и пути должны указываться не через объекты энтити схем, а через пользовательский интерфейс настройки связей аналогичный тому, что есть при настройке фильтрации и колонок реестра.
Спасибо за обратную связь.
Данные пожелания нам известны и зафиксированы департаментом разработки для рассмотрения возможной реализации в будущих версиях.
Вопрос...
Так а каким образом согласуются/конкатенируются/мержатся несколько бизнес-правил, которые ориентированы на одно и то же поле, в рамках одной сущности.
Логическое "И" или логическое "ИЛИ"
или там вообще особая схема ?
По моим наблюдениям, если написать такую логику, когда правило 1 противоречит правилу 2, то применится случайное. Не думаю, что на этот случай есть какие-то правила мержа, ведь непонятно зачем вообще такое делать.)
"Мотков Илья" написал:Не думаю, что на этот случай есть какие-то правила мержа, ведь непонятно зачем вообще такое делать.)
В пределах одного бизнес-правила можно использовать только группу "И" или группу "ИЛИ",
т.е. нельзя развернуть такую логику в пределах одно правила:
"Если поле X содержит Z или W, и поле Y равно Q, то делать поле N обязательным"
Такое в текущем положении вещей можно организовать только двумя бизнес-правилами:
1)"Если поле X содержит Z, и поле Y равно Q, то делать поле N обязательным"
2)"Если поле X содержит W, и поле Y равно Q, то делать поле N обязательным"
И вот теперь вступает в силу мой вопрос.
Так как же они конкатенируются объединяются.
PS: На самом деле два разработчика в разных схемах добавили свои бизнес-правила. пока у каждого было свое БП - все было нормально, после объединения в цепочку замещающих схем на тесте - правило ведет себя как-то странно, но оно точно не делает того чего от него ожидают :)
В итоге правила как-бы и не противоречат друг другу, и переписать его в одно правило тоже нет возможности. вот...
Так ведь они никак не конкатенируются/объединяются. Если X содержит Z, отработает правило 1, если X содержит W, отработает правило 2. Так как они не противоречат друг-другу - все хорошо, сделать "более обязательным" поле Вы уже не сможете.
Не-а :)
В итоге не работают оба правила :) в этом то и кроется проблема понимания того как оно вообще должно работать в таком случае.
Результат для приведенного примера таков:
Имеем два правила:
1)"Если поле X содержит Z, и поле Y равно Q, то делать поле N обязательным"
2)"Если поле X содержит W, и поле Y равно Q, то делать поле N обязательным"
в итоге имеем следующее поведение:
правила вообще не работают - ни одно из них.
Если переписать правила иначе:
1)"Если поле X содержит Z или W, то делать поле N обязательным"
2)"Если поле Y равно Q, то делать поле N обязательным"
в итоге имеем следующее поведение:
Если поле X содержит Z или W, поле N становится обязательным
значение поля Y - вообще не играет ни какого значения.
Илья, здравствуйте.
Указанные Вами правила все же противоречат друг другу, так как если поле X содержит Z, то оно должно быть обязательным согласно 1 И не должно быть обязательным согласно 2. Возможно, более наглядным будет пример с правилом видимости. Поэтому работает только одно из них. Как уже указал мой коллега выше, добавили пожелание для реализации в будущих релизах - возможность создания сложных условий в бизнес-правилах с помощью дизайнера.
Доброго времени суток! В продукте sales enterprice 7.8 нужно в зависимости от некоторых значений типа документа проставлять галку в одном из чекбоксов карточки:
если пользователь выбирает значения 1 и 3, чекбокс проставляется, если пользователь выбирает значение 2, то галка либо не проставляется, либо исчезает, если до этого галка в чекбоксе стояла.
Это реализуется с помощью бизнес-правила? и как, если да?
К сожалению, не получилось это реализовать с помощью бизнеса-правила. Массив enums.property не подходит, т.к. нам нужно установить конкретное значение чекбокса, а не его видимость, обязательность и т.д. Что неправильно делаю:
Скорее сюда читать. Пункт 6 кроме того, что вам не надо заменять обработчик onentityinitialized.
Ваше поле (это же поле булевское как галка у вас отображается, да?) с галкой в attributes, в dependencies то поле с типом, метод напишите свой, чтоб галку проставлял снимал на основании значения поля тип
Скорее сюда читать. Пункт 6 кроме того, что вам не надо заменять обработчик onentityinitialized.
Ваше поле (это же поле булевское как галка у вас отображается, да?) с галкой в attributes, в dependencies то поле с типом, метод напишите свой, чтоб галку проставлял снимал на основании значения поля тип
Получилось!:) Спасибо, Александр, дай вам Бог здоровья)))
В SDK bpm'online добавлен подраздел "Примеры решения типовых задач". В нем мы будем размещать решения кейсов, связанных с разработкой пользовательского интерфейса и бизнес-логики приложения.
Заходите на сайт Terrasoft Academy в раздел "Документация SDK" и узнайте как:
Мне кажется, надо бы добавить в бизнес-правила свойство enabled (для самого бизнес-правила), причем, желательно с возможностью забиндить его куда-нибудь, и метод для установки этого свойства (включения/выключения) в замещающих схемах.Например, чтобы можно было в своем пакете на отдельно-взятой странице отключить все бизнес-правила, к нему не относящиеся, не затирая их при этом.
Дмитрий, можно попробовать забиндить бизнес-правило на метод, который будет возвращать конфиг правила в зависимости от условий.
Мне кажется, это должно решить задачу.
Есть набор бизнес-правил в базовых схемах. Если они не должны использоваться в пользовательском пакете, надо бы иметь возможность их отключить. У меня ,кстати, не получилось - смог только перезаписать их (с тем же названием) на свои, что в общем-то не очень корректно. Если бы можно было добавить в дифф признак отключения правила, или в каком-то методе, инициализирующем правила, его проставить, это было бы удобно.
Спасибо, что помогаете нам развивать и улучшать наши продукты. Ваша идея принята для анализа аналитиками проектного офиса и будет рассмотрена возможность ее реализации в одной из последующих версий программного продукта.
Настройка происходит в карточке путем изменения конфигурации полей.
Подготовка
Для работы с бизнес правилами нужно добавить в страницу зависимость от модуля бизнес правил:
Настройка
В настройку контрола страницы добавляем блок правил по шаблону: Пример настройки бизнес правила BINDPARAMETER
{
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE, name:'Winner',
columnPath:'Winner',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible:true,
rules:[{ //Указываем тип правила
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER, //Подписываемся на параметр "Видимый"
property: BusinessRuleModule.enums.Property.VISIBLE, //Указываем правило объединения условий в случае если в массиве conditions более одного условия //по умолчанию Terrasoft.LogicalOperatorType.AND
logical: Terrasoft.LogicalOperatorType.AND,
conditions:[{
leftExpression:{ //Сравниваем значение от атрибута модели "Доход"
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute:'Revenue' }, //Устанавливаем правило сравнения "Больше"
comparisonType: Terrasoft.core.enums.ComparisonType.GREATER,
rightExpression:{ //С константой '5000'
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value:5000 } }] }] }
Бизнес правило привязывается к параметру "Видимый" контрола Победитель (Winner).
В пакете условий указывается одно условие: если Доход (Revenue) больше 5000, Победитель становится видимым, иначе Победитель скрывается.
Пример настройки бизнес правила BINDPARAMETER для типа значений CARDSTATE
Бизнес правило позволяет установить значение видимости или доступности для редактирования контрола в зависимости от текущего состояния страницы.
В данном случае указывается, что поле будет доступно для редактирования только в режиме изменения записи, а в режиме добавления/копирования будет неактивно.
Пример настройки бизнес правила FILTRATION
{
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE, name:'Contact',
columnPath:'Contact',
dataValueType: Terrasoft.DataValueType.ENUM,
visible:true,
rules:[{ //Указываем тип правила
ruleType: BusinessRuleModule.enums.RuleType.FILTRATION, //Указываем будет ли обратное автозаполнение
autocomplete:true, //Указываем мета-путь относительно базового обьекта('Contact') //по которому будем фильтровать
baseAttributePatch:'Account', //Указываем тип фильтрации
comparisonType: Terrasoft.ComparisonType.EQUAL, //Указываем тип значения для фильтрации
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, //Указываем атрибут модели для сравнения (если тип значения - атрибут)
attribute:'Account', //Указываем мета-путь значения в выбранном атрибуте (если нужно)
attributePath:'', //Если тип значения не атрибут, указываем значение //(константа | имя системной настройки | имя системного значения)
value:'' }] }
Бизнес правило устанавливает фильтрацию контрола Контакт (Contact) по полю Контрагент (Account) в зависимость от значения атрибута модели Контрагент (Account)
Пример настройки бизнес правила AUTOCOMPLETE (Правило доступно с версии 7.0.1.106)
{
type: Terrasoft.ViewModelSchemaItem.ATTRIBUTE, name:'JobTitle',
columnPath:'JobTitle',
... rules:[{ //Указываем тип правила
ruleType: BusinessRuleModule.enums.RuleType.AUTOCOMPLETE, //Указываем атрибут-источник модели для автозаполнения
attribute:'Job', //Указываем тип автозаполнения
autocompleteType: BusinessRuleModule.enums.AutocompleteType.DISPLAYVALUE }] }
Бизнес правило производит автозаполнение контрола Полное название должности (JobTitle) из параметра displayValue значения контрола Должность (Job)
Перечисления
Данные перечисления не являются ядровыми и становятся доступны после подключения модуля бизнес правил. Тип действия бизнес правила
Тип
Описание
BusinessRuleModule.enums.RuleType.AUTOCOMPLETE
Установка правил автозаполнения контрола Пример: автозаполнение полного названия должности исходя из выбранной должности..
BusinessRuleModule.enums.RuleType.BINDPARAMETER
Установка правил на параметр контрола Пример: Включить поле результат при изменении состояния в карточке активности.
BusinessRuleModule.enums.RuleType.FILTRATION
Установка правил фильтрации контрола Пример: Фильтрация контактов по выбранному контрагенту.
Тип автозаполнения
Тип
Описание
BusinessRuleModule.enums.AutocompleteType.ASIS
Автозаполнение значением "как есть"
BusinessRuleModule.enums.AutocompleteType.VALUE
Автозаполнение параметром value. Актуально для lookup-значений.
Значение текущего состояния страницы (добавление/редактирование/копирование и т.п.).
Элемент из списка ConfigurationEnums.CardState Пример использования: ConfigurationEnums.CardState.Edit (Страница в режиме редактирования)