Добрый день.
В карточке обращения есть группа полей (например, Сроки), мне нужно скрыть\показать группу в зависимости от каких-либо условий (например, показать группу полей Сроки только на стадии "Решено").

Подскажите, как это сделать?

Пробовала сделать через бизнес-правила https://academy.terrasoft.ru/documents/technic-sdk/7-10/pravilo-bindpara... , но не получилось.

Нравится

2 комментария
Лучший ответ

как пример 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)

По какой-то причине недоступен пункт "Добавить действие", т.е. условия можно добавлять не ограничено, а вот действие - только одно. Промелькнула мысль, что "оно так устроено", но само наличие, пускай и не активного, пункта "Добавить действие" косвенно говорит о том, что действий может быть несколько на один набор условий (что вполне логично).
Я что-то делаю не так ?

Нравится

12 комментариев

Это нормально, вам нужно под каждое действие сделать отдельное БП. Так же работали и рукописные БП, посмотрите на академии.

Как пожелание:
Иметь возможность выполнять группу действий основываясь на группе условий - весьма ожидаемый кейс.
Зачастую доступность/видимость/обязательность десятков полей, зависит от единой группы условий.

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. Возможно, более наглядным будет пример с правилом видимости. Поэтому работает только одно из них. Как уже указал мой коллега выше, добавили пожелание для реализации в будущих релизах - возможность создания сложных условий в бизнес-правилах с помощью дизайнера.

Показать все комментарии

Научить бизнес-правила понимать все типы сравнения ( В том числе >= и =).Сейчас в BusinessRulesApplierV2 следующий код: getConditionResult: function(left, type, right) {                                 var conditionResult = true;                                 switch (type) {                                         case Terrasoft.ComparisonType.IS_NULL:                                                 conditionResult = Ext.isEmpty(left);                                                 break;                                         case Terrasoft.ComparisonType.IS_NOT_NULL:                                                 conditionResult = !Ext.isEmpty(left);                                                 break;                                         case Terrasoft.ComparisonType.EQUAL:                                                 conditionResult = (left === right || (Ext.isEmpty(left) && Ext.isEmpty(right)));                                                 break;                                         case Terrasoft.ComparisonType.NOT_EQUAL:                                                 conditionResult = (left !== right);                                                 break;                                         case Terrasoft.ComparisonType.GREATER:                                                 conditionResult = (left > right);                                                 break;                                         case Terrasoft.ComparisonType.LESS:                                                 conditionResult = (left right);                                                 break;                                         default:                                                 break;                                 }                                 return conditionResult;                         }, Всего-то нужно пару строк добавить.

1 комментарий

Здравствуйте, Александр!

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

Показать все комментарии

Доброго времени суток!
В продукте sales enterprice 7.8 нужно в зависимости от некоторых значений типа документа проставлять галку в одном из чекбоксов карточки:
если пользователь выбирает значения 1 и 3, чекбокс проставляется, если пользователь выбирает значение 2, то галка либо не проставляется, либо исчезает, если до этого галка в чекбоксе стояла.
Это реализуется с помощью бизнес-правила? и как, если да?

Нравится

4 комментария

Анастасия, здравствуйте!

Действительно, Вы правы, этот функционал можно реализовать через бизнес-правило. Рекомендации описаны в руководстве для разработчиков https://academy.terrasoft.ua/documents/technic-sdk/7-8/biznes-pravila-i…

"Мария Ватулина" написал:

Анастасия, здравствуйте!

Действительно, Вы правы, этот функционал можно реализовать через бизнес-правило. Рекомендации описаны в руководстве для разработчиков https://academy.terrasoft.ua/documents/technic-sdk/7-8/biznes-pravila-i-...

К сожалению, не получилось это реализовать с помощью бизнеса-правила. Массив enums.property не подходит, т.к. нам нужно установить конкретное значение чекбокса, а не его видимость, обязательность и т.д. Что неправильно делаю:

rules: {
"UsrPaid": {
BindParametrVisibilePlaceByType: {
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
valueType: BusinessRuleModule.enums.ValueType.CONSTANT,
value: true,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "Type"
},
comparisonType: Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: "2cb5cac1-1523-e011-a94a-00155d043204"
}
}]
}
}
}

А правило FILTRATION удается применить только для фильтрации значений справочной колонки, а у нас чекбокс.

И не получится с помощью бизнес правила :)

Скорее сюда читать. Пункт 6 кроме того, что вам не надо заменять обработчик onentityinitialized.
Ваше поле (это же поле булевское как галка у вас отображается, да?) с галкой в attributes, в dependencies то поле с типом, метод напишите свой, чтоб галку проставлял снимал на основании значения поля тип

"Александр Кудряшов" написал:

И не получится с помощью бизнес правила :)

Скорее сюда читать. Пункт 6 кроме того, что вам не надо заменять обработчик onentityinitialized.

Ваше поле (это же поле булевское как галка у вас отображается, да?) с галкой в attributes, в dependencies то поле с типом, метод напишите свой, чтоб галку проставлял снимал на основании значения поля тип

Получилось!:) Спасибо, Александр, дай вам Бог здоровья)))

Показать все комментарии

В SDK bpm'online добавлен подраздел "Примеры решения типовых задач".
В нем мы будем размещать решения кейсов, связанных с разработкой пользовательского интерфейса и бизнес-логики приложения.
Заходите на сайт Terrasoft Academy в раздел "Документация SDK" и узнайте как:

Статьи расположены в разделе "Разработка конфигураций на платформе" в подразделе "Примеры решения типовых задач"

Нравится

Поделиться

0 комментариев
Показать все комментарии
Мне кажется, надо бы добавить в бизнес-правила свойство enabled (для самого бизнес-правила), причем, желательно с возможностью забиндить его куда-нибудь, и метод для установки этого свойства (включения/выключения) в замещающих схемах.Например, чтобы можно было в своем пакете на отдельно-взятой странице отключить все бизнес-правила, к нему не относящиеся, не затирая их при этом.
3 комментария

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

Есть набор бизнес-правил в базовых схемах. Если они не должны использоваться в пользовательском пакете, надо бы иметь возможность их отключить. У меня ,кстати, не получилось - смог только перезаписать их (с тем же названием) на свои, что в общем-то не очень корректно. Если бы можно было добавить в дифф признак отключения правила, или в каком-то методе, инициализирующем правила, его проставить, это было бы удобно.

Здравствуйте, Дмитрий!

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

Приятного дня!

Показать все комментарии

Настройка логики полей карточки

Настройка происходит в карточке путем изменения конфигурации полей.

Подготовка

Для работы с бизнес правилами нужно добавить в страницу зависимость от модуля бизнес правил:

Настройка

В настройку контрола страницы добавляем блок правил по шаблону:
Пример настройки бизнес правила 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

{
    ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
    property: BusinessRuleModule.enums.Property.ENABLED,
    conditions: [{
            leftExpression: {
                type: BusinessRuleModule.enums.ValueType.CARDSTATE
            },
            comparisonType: Terrasoft.core.enums.ComparisonType.EQUAL,
            rightExpression: {
                type: BusinessRuleModule.enums.ValueType.CONSTANT,
                value: ConfigurationEnums.CardState.Edit
            }
        }
    ]
}

Бизнес правило позволяет установить значение видимости или доступности для редактирования контрола в зависимости от текущего состояния страницы.

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

Пример настройки бизнес правила 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-значений.
BusinessRuleModule.enums.AutocompleteType.DISPLAYVALUE Автозаполнение параметром displayValue. Актуально для lookup-значений.

Параметр контрола

Тип Описание
BusinessRuleModule.enums.Property.VISIBLE Контрол видим
BusinessRuleModule.enums.Property.ENABLED Контрол активен
BusinessRuleModule.enums.Property.REQUIRED Контрол обязателен к заполнению
BusinessRuleModule.enums.Property.READONLY Контрол доступен только на чтение

Тип значения для сравнения

Тип Описание
BusinessRuleModule.enums.ValueType.CONSTANT Константа
Пример: 100, "Иванов", "449d832-a4cc-4b01-b9d5-8a12c42a9f89"
BusinessRuleModule.enums.ValueType.ATTRIBUTE Значение другого контрола
Пример: "Revenue" (Доход)
BusinessRuleModule.enums.ValueType.SYSSETTING Системная настройка
Пример: "DefaultTax" (Налог по умолчанию)
BusinessRuleModule.enums.ValueType.SYSVALUE Системное свойство. Элемент списка системных свойств Terrasoft.core.enums.SystemValueType
Пример: Terrasoft.core.enums.SystemValueType.CURRENT_DATE (Текущая дата)
BusinessRuleModule.enums.ValueType.CARDSTATE Значение текущего состояния страницы (добавление/редактирование/копирование и т.п.).
Элемент из списка ConfigurationEnums.CardState
Пример использования: ConfigurationEnums.CardState.Edit (Страница в режиме редактирования)

Нравится

Поделиться

2 комментария

Здравствуйте, Александр.
Есть несколько вопросов по вашему новому посту. Буду признателен за комментарии. Начинающий, не во всем пока разбираюсь.

В настройку контрола страницы добавляем блок правил по шаблону:

Далее этот "контрол" повторяется везде. Не понимаю смысл этого слова.

Здравствуйте, Павел.

Под термином "контрол" в данной статье подразумевается "Поле редактирования"

Пример:

Поле на карточке
Поле "Номер"

В коде структуры карточки выглядит так:

{
	type: Terrasoft.ViewModelSchemaItem.ATTRIBUTE,
	name: 'Number',
	columnPath: 'Number',
	dataValueType: Terrasoft.DataValueType.TEXT,
	visible: true
}

Бизнес правила вписываются в этот код задавая требуемое поведение.

Показать все комментарии