Добрый день.

При попытке выполнить любой элемент процесса, на котором была ошибка (скрипт/подпроцесс/и т.д.). Получаю эксепшен "Элемент процесса с идентификатором "{4BEFF0CF-58CD-447C-BAD6-4EAA63108F95}" не найден" (идентификаторы разные), при этом этот элемент есть в таблице "SysProcessElementLog":

Изображение удалено.

Да и как его может не быть, в таком случае он бы не отобразился в журнале (может {Terrasoft.Core.Process.ProcessEngineImpl}.ExecuteProcessElementByUId(procElUId) ищет его в другом месте?).

Также при отладке приложения и попытке найти процесс по этому элементу (через FindProcessByProcessElementUId(procElUId)), получаю null:

Изображение удалено.

 

Это очень ломает работу, приходится из-за каких-то ошибок сторонних сервисов (таймауты и т.д.), запускать по новой целые цепочки процессов. Есть у кого информация/идеи как решить эту проблему (версия crm 7.15.0.634)?

Может можно заменить библиотеку, отвечающую за бизнес процессы?

Нравится

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

Добрый день.

Судя по всему проблема в метаданных процесса, но точнее ответить не смогу.

По такому вопросу я рекомендую обратиться в техническую поддержку Creatio.

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

Добрый день!

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

Результат - письмо отправляется без вложений. В трассировке видно, что все файлы из той активности успешно прочитались, что в новую активность добавляются все эти записи, но при этом в созданной активности все равно пусто и в справочники Файлы и ссылки активности создается просто пустая строка. Не пойму, что я делаю не так.

 

Изображение удалено.

Нравится

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

Пересылка вложений в бизнес-процессах была реализована только в 7.17. Какая версия у Вас?

Соколов Павел Валерьевич,

Возможность работы с файлами в бизнес-процессах доступна только с версии 7.17.2, это упоминается в официальном описании релиза - 

https://academy.terrasoft.ru/docs/release/opisanie-relizov/opisanie-rel…

Описание работы нового элемента есть в академии - https://academy.terrasoft.ru/docs/user/biznes_processy/spravka_po_eleme…

Решил проблему. Файлы активности не переносились из-за значения "Встроенное вложение = Да" при создании новой активности. После смены на "Нет" файлы успешно скопировались в новую активность и вложения отправились

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

Коллеги, подскажите, по какой причине в рабочем месте раздел [Обращения] не отображается (для продуктов Bank Customer Journey) в рабочем месте (права доступа есть, выполнялась очистка кеша и повторный вход в систему)?

Нравится

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

Добрый день!

 

Раздел  [Обращения] доступен для продукта Bank Customer Journey. В версиях 7.15 не было четкого определения рабочее место основное или портальное. Определялся тип рабочего места только при добавлении туда первого раздела (портального или основного). Причиной описанного Вами поведения может быть то, что при не использовании портала, при добавлении раздела в новое рабочее место отображается два раздела "Обращения"(портальное (нет страницы карточки), и обычное), а в существующем обычном - 0 (система не может определить тип). Проверить это можно запросом select * from SysModule nolock where  [Code]  = 'Case'. Если [Type] = 1, то это портальный раздел.

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

Добрый день, есть кнопка:

 

{
	"operation": "insert",
	"name": "SendForApproval",
	"parentName": "Detail",
	"propertyName": "tools",
	"index": 3,
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"classes": { "wrapClass ": ["summary-approving-button"] },
		"caption": {
			"bindTo": "Resources.Strings.SendCommercialOfferForApprovalCaption"
		},
		"click": {"bindTo": "sendCommercialOfferForApproval"},
		"visible": {"bindTo": "getSendForApprovalButtonVisible"},
		"enabled": {"bindTo": "getSendForApprovalButtonVisible"}
	}
},

пытаюсь изменить цвет кнопки и цвет текста:

 

.summary-approving-button {
	background-color: #1c9110;
	color: #FFFFFF;
}

Ничего не выходит. Не кидайте камнями, я в css первый день :/

Нравится

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

Скорее всего ваш селектор просто менее приоритетный чем какой-то другой, который и задает цвет кнопке на самом деле.

https://idg.net.ua/blog/uchebnik-css/azy-css/kaskadnost

Владислав Литвинчук, 

По прежнему не могу решить данную проблему

 

styles: {
	textStyles: {
		color: "#de730b"
	}
},

Даже так я не могу изменить св-ва кнопки. "!important" в less не помог. В стилях у элемента по прежнему остается .t-btn-style-default. Мои стили не подтягиваются

Илья Белов,

А ваш css вообще в браузере отображается? Где вы описываете свои стили? Как их подгружаете в браузер? Можно ольше информации?

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

Добрый день! Как можно получить установочный файл BPMonline Messaging Service Install.msi 

 

Нравится

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

Добрый день! Для получения TMS нужно авторизованному лицу обратиться в службу поддержки.

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

Добрый день, создаю у сущности поле с типом Guid. Вывожу его на карточку, принудительно устанавливаю "enabled": true, но поле остаётся заблокированным для ввода. Есть ли возможность его разблокировать и валидировать поле на фронте инструментами коробки? Парсить на бэке каждый раз при изменении этого поля не хотелось бы.

Нравится

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

Пока пытаюсь сделать через строку с маской.

"operation": "insert",
"name": "UsrMercuryId",
"parentName": "ProfileContainer",
"propertyName": "items",
"index": 16,
"values": {
	"bindTo": "UsrMercuryId",
	"layout": {
		"colSpan": 24,
		"rowSpan": 1,
		"column": 0,
		"row": 16,
	},
	"visible": {
		"bindTo": "Type",
		"bindConfig": {
			"converter": "_accountTypeIsPayer"
		}
	},
	"controlConfig": {
		"className": "Terrasoft.controls.MultiMaskEdit",
		"mask": {
			"formats": ["00000000-0000-0000-0000-000000000000"]
		},
		"onBeforePasteFormatValue": "TSCCommon.getDigitsFromString",
		"maskConfig": {
			"definitions": {
				"0": {
					"re": "[0-9a-zA-Z]"
				}
			}
		}
	}
},

 Но нету модуля MultiMaskEdit.

Добрый день, Илья.

В базовой логике приложения поля с типом Guid редактировать нельзя. Можете реализовать строку с маской или валидировать строку через метод setValidationConfig.

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

Добрый день, как передать клиенту сообщение, которое я передаю в брошенное исключение в кастомной сервисе? Спасибо.

Нравится

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

Илья Белов,

Примерно так:

[OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
        public object SomeServiceMethod(object requestConfig) {
            try {
                return new {
                    ErrorMessage = SomeLogicMethod(requestConfig)
                };
            } catch (System.Exception ex) {
                return new {
                    ErrorMessage = ex.Message
                };
            }
        }
 
        public object SomeLogicMethod(object requestConfig) {
            CheckErrors();
            // Some logic
            return "response";
        }

 

Нужно вручную обработать данное исключение.

В веб-сервисе try..catch, который ловит исключение, и сервис возвращает объект, где есть сообщение ошибки.

На клиенте уже обработать, что если веб-сервис вернул сообщение ошибки, то показать его в модальном окне.

Владислав Литвинчук, 

У меня, есть некий пулл сообщений о проваленной валидации 

        private void CheckErrors()
        {
            if (_errorsPool.Count == 0)
                return;
 
            var sb = new StringBuilder();
            _errorsPool.ForEach(x => sb.AppendLine(x));
 
            throw new Exception(sb.ToString());
        }

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

Илья Белов,

Примерно так:

[OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
        public object SomeServiceMethod(object requestConfig) {
            try {
                return new {
                    ErrorMessage = SomeLogicMethod(requestConfig)
                };
            } catch (System.Exception ex) {
                return new {
                    ErrorMessage = ex.Message
                };
            }
        }
 
        public object SomeLogicMethod(object requestConfig) {
            CheckErrors();
            // Some logic
            return "response";
        }

 

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

Всем добрый день!

Бьюсь второй день. Нужно добавить группу фильтров в разделе с оператором OR.

По умолчанию в коробке в коллекцию фильтров filters добавляются группы через AND, при этом легко добавляется просто одиночный фильтр (например "FilterStatus"). Но вот группа фильтров - уже не работает.

Судя по примеру добавления фильтров "FixedFilter" и "CustomFilter" в коробке продукта - нужно как то хитро определять конфиг этой группы. Я добавляю items в группу, но получается не так, как у Terrasoft. Их исходного кода найти не могу. Помогите, пожалуйста :( Что не так...

getFilters: function() {
 
debugger;
var filters = this.callParent(arguments);
var items = this.$UsrGroups;
let counter = 1;
//создание группы фильтров
var usrFilterGroup = this.Ext.create("Terrasoft.FilterGroup");
usrFilterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
//добавление фильтра по каждой группе юзера
for (var item in items) {
	var tempFilterGroup = Terrasoft.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "Group.Id", item);
	usrFilterGroup.addItem(tempFilterGroup);
	window.console.log("Добавлен фильтр по группе " + item.Name);
	counter++;
}
filters.add("UserGroupsFilter", usrFilterGroup);
return filters;
}

 

Нравится

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

Вам нужно вернуть фильтр с условием User filter или Section filter, так?

 

Если так, то тогда нужно создать две группы, одна группа, которая будет объединять фильтры секции и вторая с вашими фильтрами. В общей группе сделать тип or, в вашей вам нужно. И потов вернуть не filters, а объединяющую группу.

 

var usrSectionFilterGroup = this.Ext.create("Terrasoft.FilterGroup");

usrSectionFilterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;



usrSectionFilterGroup.add("SectionFilter", filters);

var usrFilterGroup = this.Ext.create("Terrasoft.FilterGroup");

//ваш фильтр

usrSectionFilterGroup.add("UsrFilterGroup", usrFilterGroup);

return usrSectionFilterGroup;

 

 

Трефилов Павел Сергеевич,

Ваш вариант не работает (

Надо добавить фильтр так чтобы он нигде визуально не отображался, остальное не важно.

Помогите разобраться (

 

В ActivitySectionV2 так, и все работает... Тут тоже самое - нет... Каааааак?

getFilters: function() {
 
var filters = this.callParent(arguments);
	var fixedFilters = filters.contains("FixedFilters")	? filters.get("FixedFilters") : null;
	if (!this.Ext.isEmpty(fixedFilters) && fixedFilters.contains("Owner")) {
	var ownerFilters = fixedFilters.get("Owner");
	if (ownerFilters.contains("OwnerDefaultFilter")) {
	ownerFilters.removeByKey("OwnerDefaultFilter");
}
}
if (this.isSchedulerDataView()) {
	if (!filters.contains("ShowInSchedulerFilter")) {
	filters.add("ShowInSchedulerFilter", this.Terrasoft.createColumnFilterWithParameter(
		this.Terrasoft.ComparisonType.EQUAL, "ShowInScheduler", true));
	}
	if (!fixedFilters) {
		fixedFilters = this.Terrasoft.createFilterGroup();
		fixedFilters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
		filters.add("FixedFilters", fixedFilters);
	}
	var hasPeriodFilters = fixedFilters.contains("PeriodFilter");
	var periodFilter = hasPeriodFilters ? fixedFilters.get("PeriodFilter") : null;
	if (!hasPeriodFilters || (periodFilter && !(periodFilter instanceof Terrasoft.Collection))) {
		this.setDateFiltersCurrentDate(fixedFilters);
	}
}
	if (this.isNotSchedulerDataView() &&
		filters.contains("ShowInSchedulerFilter")) {
		filters.removeByKey("ShowInSchedulerFilter");
}
 
filters.add("NotEmailFilter", this.Terrasoft.createColumnFilterWithParameter(
	this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", ConfigurationConstants.Activity.Type.Email
));
 
return filters;
},
 
				/**
				 * ############# ############ ####### ## ####### ### ########## ## ####### ####.
				 * @private
				 * @param {Object} fixedFilters ###### ############ ########.
				 */
setDateFiltersCurrentDate: function(fixedFilters) {
	var now = new Date();
	var periodFilter = this.Terrasoft.createFilterGroup();
	periodFilter.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	periodFilter.add("DueDate", this.Terrasoft.createColumnFilterWithParameter(
	this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "DueDate",
	this.Terrasoft.startOfDay(now)));
	periodFilter.add("StartDate", this.Terrasoft.createColumnFilterWithParameter(
	this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "StartDate",
	this.Terrasoft.endOfDay(now)));
	if (fixedFilters.contains("PeriodFilter")) {
	fixedFilters.removeByKey("PeriodFilter");
}
fixedFilters.add("PeriodFilter", periodFilter);
},

 

Добрый день, Надежда!



Хочу у вас уточнить, вы проводили отладку вашего кода?

Также мне интересно, что именно у вас представляет $UsrGroups?

Попробовал запустить ваш код, в итоге объект items был undefiend.

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

Добрый день, подскажите есть ли короткий способ чтобы добавить примечание для текстового поля, например одной строкой в блоке diff?

Изображение удалено.

Нравится

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

Подсказки к полям добавляются так:

{

                "operation": "insert",

                "parentName": "ContactGeneralInfoBlock",

                "propertyName": "items",

                "name": "Owner",

                "values": {

                    "layout": {

                        "column": 12,

                        "row": 0

                    },

                    "tip": {

                        "content": {"bindTo": "Resources.Strings.OwnerTip"}

                    }


                }

            },

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

Добрый день. Как реализовать вложенный OR с помощью Terrasoft.Core.DB.Select?

select id from account
where id = '123'
and (name = 'dsfsdf' or TypeId = 'wrew234')

 

Нравится

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

Илья, нужно использовать OpenBlock и CloseBlock.

Пример есть тут.

Илья, нужно использовать OpenBlock и CloseBlock.

Пример есть тут.

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