Добрый день. Реализовали вызов справочного окна с иерархической структурой на основе представления с двухуровневой иерархией (в объекте представления указали колонку для иерархии, при вызове справочного окна в конфиге установили свойство hierarchical: true). Вызов окна работает. Но возникла проблема с поиском: элементы нижнего уровня не отображаются, если элементы верхнего уровня не соответствуют условию фильтрации (примеры на скриншотах). Выяснили, что фильтр применяется в методе pushSelectFilters в LookupPageViewModelGenerator, но замещение этой схемы запрещено. Необходимо сделать так, чтобы элементы верхнего уровня отображались, если есть подчинённые элементы, которые удовлетворяют условиям в строке фильтра. Есть ли альтернативные способы реализации? Кто-то сталкивался с подобной проблемой?

Нравится

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

Смотрите, создаете новую схему MyNewLookupPageViewModelGenerator

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

Затем создаете по такому же принципу свою схему MyNewLookupPage в нем подключаете ранее созданную схему.

И там где вы вызываете свой справочник с иерархической структурой делаете вызов с таким конфигом

 

var config = {

                        entitySchemaName: "ExampleTable",

                        columns: ["Name", "Parent.Name"],

                        multiSelect: false,

                        hierarchical: true,

                        lookupPageName: "MyNewLookupPage"

                    };



После этого при открытии вашего справочника, будет работать уже ваша реализация метода pushSelectFilters  в схеме MyNewLookupPageViewModelGenerator

Коллеги,  здраствуйте!



Переопределить логику LookupPageViewModelGenerator  нет возможности.

Однако в будущих релизах планируется перевод иерархических реестров на Angular, где этот подход поменяется.

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

Добрый день!

Есть ли в Creatio какая-либо возможность ограничить права доступа на записи в зависимости от значений в определенной колонке такой записи?

Например, если в объекте "Контрагент" в колонке "Отрасль" будет значение "Банки", то такие записи смогут видеть только пользователи с ролью "Менеджер по Банкам".

Нравится

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

Можно бизнес процессом после создания/изменения записи. У меня так вся система работает.

Дополню совет Алексея - можно настроить БП со стартовым сигналом по созданию или изменению записи, при этом в условии фильтрации нужно указать нужно значение колонки "Отрасль". Далее с помощью элемента Изменить права доступа выдать права доступа нужной роли.

 

Ссылка на общую документацию по бизнес-процессам.

И изменение доступа к контрагенту часто должно повлечь изменение доступа к его документам, задачам, счетам и т.п.

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

Всем привет. Пытаюсь сделать своё кастомное бизнес-правило в мобилке, а оно работает как-то некорректно. Кто-нибудь может подсказать в чем может быть ошибка?

Terrasoft.sdk.Model.addBusinessRule("Activity", {

    name: "ActivityCategoryVisibilityRule",

    ruleType: Terrasoft.RuleTypes.Custom,

    triggeredByColumns: ["ActivityCategory"],

    events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Load],

    executeFn: function(record, rule, column, customData, callbackConfig, event) {

        var category = record.get("ActivityCategory.Id").toUpperCase();

        if (category === "42C74C49-58E6-DF11-971B-001D60E938C6" || //Meeting 

            category === "E52BD583-7825-E011-8165-00155D043204" || //Call

            category === "BC8B0E9A-6574-4A22-9538-BDE44C484008" || //Exhibition

            category === "F51C4643-58E6-DF11-971B-001D60E938C6" || //To do

            category === "17E871DD-1BF0-4E02-8D15-763A8F2C78C9" || // Forum round table

            category === "B821675D-8303-448B-936D-E931FFFD00BD" // Workshop

           ) {

            record.changeProperty("AtcSubcategory", {

                hidden: {

                    value: false

                }

            });

        } else {

            record.changeProperty("AtcSubcategory", {

                hidden: {

                    value: true

                }

            });

        }

        Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);

    }

});

Нравится

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

Добрый день

Можете подробнее сказать про "оно работает как-то некорректно"? smiley

Как-то некорректно это как?

Артем Гура,

Нашёл в чем проблема. Корректно сетить свойство нужно вот так:

record.changeProperty("AtcSubcategory", {

                hidden: true

            });

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

Подскажите пожалуйста, можно ли на страницу контрагента добавить новое поле - ИНН, ОГРН, КПП юридического лица с валидацией? Т.е. уже готовое поле ИНН, которое будет проверять правильность ввода ИНН (валидировать по правилам "ключевания"). Или придется писать собственную валидацию поля? 

Нравится

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

Добрый день.

 

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

Для решения нужно прибегнуть к средствам разработки. При помощи поиска на Community можно найти ряд релевантных статей по данному вопросу.

 

Похожее обсуждали тут и тут. Также см. статью. Похожий вопрос и разные подходы к его решению обсуждались тут. Также валидация детали описана в статье SDK в п. 2.

Как-то приходилось делать валидацию ИНН. Вот готовый код.

			setValidationConfig: function() {
				// Вызывает инициализацию валидаторов родительской модели представления.
				this.callParent(arguments);
				this.addColumnValidator("UsrINN", this.innValidator);
			},
 
			innValidator: function() {
				// Переменная для хранения сообщения об ошибке валидации.
				var inn = this.$UsrINN;
				var invalidMessage = this.validateInn(inn);
				// Если валидация прошла успешна, в объекте возвращаются пустые строки.
				return {
					// Сообщение об ошибке валидации, которое отображается в информационном окне
					// при сохранении страницы.
					fullInvalidMessage: invalidMessage,
					// Сообщение об ошибке валидации, которое отображается под элементом управления.
					invalidMessage: invalidMessage
				};
			},
 
			validateInn: function(inn) {
				var error = "";
				var result = false;
				if (typeof inn === "number") {
					inn = inn.toString();
				} else if (typeof inn !== "string") {
					inn = "";
				}
				if (!inn.length) {
					error = "необходимо заполнить";
				} else if (/[^0-9]/.test(inn)) {
					error = "ИНН может состоять только из цифр";
				} else if ([10, 12].indexOf(inn.length) === -1) {
					error = "ИНН может состоять только из 10 или 12 цифр";
				} else {
					var checkDigit = function (inn, coefficients) {
						var n = 0;
						for (var i in coefficients) {
							n += coefficients[i] * inn[i];
						}
						return parseInt(n % 11 % 10);
					};
					switch (inn.length) {
						case 10:
							var n10 = checkDigit(inn, [2, 4, 10, 3, 5, 9, 4, 6, 8]);
							if (n10 === parseInt(inn[9])) {
								result = true;
							}
							break;
						case 12:
							var n11 = checkDigit(inn, [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
							var n12 = checkDigit(inn, [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
							if ((n11 === parseInt(inn[10])) && (n12 === parseInt(inn[11]))) {
								result = true;
							}
							break;
					}
					if (!result) {
						error = "Неправильное контрольное число";
					}
				}
				return error;
			}

 

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

Добрый день!

Пытаюсь использовать темплейт: https://marketplace.terrasoft.ru/template/raschet-rabochikh-dney-v-bizn…

После генерации+компиляции системы и очистки редиса в системе все еще не появляется возможность выбрать указанные в описании действия процесса (не отображаются в справочнике). При этом установка темплейта прошла успешно. В чем может быть проблема?

Нравится

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

Сделайте зависимость своего пакета от установленного пакета GlbCalendarService. Тогда и появятся действия в редакторе биззнес-процеса

Алексей Следь, благодарю

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

Добрый день! Прошу уточнить, если ли возможность добавить условие бизнес-правила по роли текущего пользователя (а не конкретному пользователю), например:

Отобразить вкладку Админ только пользователям с ролью System Administrator

 

Нравится

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

Нет. Есть обходной способ через права на операции. Приоткрытии страница проверяется право на операцию и атрибуту присваивается значение True/False. А далее уже бизнес правило на этот атрибут/

Вот подробно на Tech Hour

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



Присоединюсь к ранее предоставленному ответу. Действительно, на текущей конфигурации базовыми средствами настроить правило для роли нельзя.



Тем не менее в качестве обходного решения Вы можете либо добавить всех пользователей, что входят в роль, отдельным условием в бизнес правиле, либо использовать настройку прав доступа по колонкам:

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/up…



В планах развития продукта есть задача на рассмотрение реализации данного функционала базовыми средствами.

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

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

Например, нам нужно вывести график в итогах с ответственными за лиды, в которых последнее письмо - входящее:

Строим график по объекту Лид, колонка Ответственный. В фильтрах указываем Лид.Активность (по колонке Лид).Дата создания максимум = Текущий год 

и Тип = Email, Тип сообщения = Входящее.

Как взять просто последнюю запись в детали по Дата создания.Максимум без этого "= <Текущий год>"?

При таком фильтре он просто выводит лиды, в которых есть входящее письмо в этом году, но оно не последнее.

 

Дополнительно к этому вопросу еще как вывести в отчет текстовое поле из последней записи в детали, например, комментарий к последней активности по лиду?

Нравится

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

Добрый день!

Вы корректно описали взятие самой "молодой" записи из детали. Когда выбираете максимум в дате создания. Почему вы думаете, что фильтр выдает лиды, где входящее письмо не последнее. Если график вывел записи, значит в списке есть письмо с максимальной датой.  Если письма не будет за этот год в лиде, то в график для отображения запись не попадет. Может есть скриншоты примеров, где некорректно выводит и почему?



Если вам надо вывести комментарий по самой последней активности, то так настроить через отчет Word нельзя.

Можно вывести все активности, где заполнен комментарий, то есть результат подробно не пуст.

 

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

Добрый день, подскажите что может быть не так. Настраиваю машинное обучение, контейнеры все загрузились и сервисы проверил, настройки так же по инструкции сделал. 

Из документации https://academy.terrasoft.ru/docs/developer/elements_and_components/mac…

пишут что сервис доступен 

https://demo-ml.bpmonline.com/swagger/index.html#/MLService

но у меня 404, так же для проверки себя, заказал стенд пробный, там та же ошибка.Изображение удалено.Изображение удалено.Изображение удалено.

Нравится

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

Добрый день!

Чтоб попасть на сервис нужно переходить по прямой ссылке

https://demo-ml.bpmonline.com/swagger/index.html#/MLService

Так же, чтоб начать использовать машинное обучение нужно прописать в системных настройках APi ключ и ServiceUrl, можно почитать в статье:

https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/nastrojka_k…

Или в чем возникает проблема, не отрабатывает машинное обучение?

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

Есть объект, настроил бизнес-процесс, при переводе объект в статус Х отправлять письмо. Нужно чтобы в письме отправлялась ссылка на сам объект

Подскажите как отправлять ссылку в письме.

Нравится

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

Добрый вечер.

 

Вот ссылка на публикацию, где подробно рассмотрен аналогичный кейс.

Добрый вечер.

 

Вот ссылка на публикацию, где подробно рассмотрен аналогичный кейс.

А ещё есть более простой вариант: ссылку на объект настроить прямо в шаблоне e-mail, но этот способ подойдет только, если можно использовать шаблон:

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

Есть контакт, в ней поле "Номер карты", допустим там значение 111 (уникальное)

Есть объект, в нем поле "Номер карты", там тоже значение 111

Мне нужно чтобы в объект подставился контакт, найти его можно по номеру карты. Контакты и объекты уже созданы

Мне нужно сделать это нужно массово, по всем объектам

Прошу подсказать как можно это сдедать

Нравится

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

Добрый вечер.

 

Если это нужно сделать единоразово, можно написать соответствующий sql-запрос и применить его для базы данных.

 

Также можно попробовать создать бизнес-процесс, в котором реализовать перебор коллекции, то есть выбрать все записи, где не заполнено поле контакт и для каждой записи запускать подпроцесс, в котором искать контакт по номеру карты.

 

Подробнее об этой функциональности читайте по ссылке на Академии.

Добрый вечер.

 

Если это нужно сделать единоразово, можно написать соответствующий sql-запрос и применить его для базы данных.

 

Также можно попробовать создать бизнес-процесс, в котором реализовать перебор коллекции, то есть выбрать все записи, где не заполнено поле контакт и для каждой записи запускать подпроцесс, в котором искать контакт по номеру карты.

 

Подробнее об этой функциональности читайте по ссылке на Академии.

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