Коллеги, добрый день!

Такой кейс: есть бизнес-процесс с несколькими задачами, которые создаю с помощью элемента бизнес-процесса «Выполнить задачу». Для примера, создаем такой процесс: при создании новой записи в разделе «Счета» запускается бизнес-процесс, состоящий из трех последовательных задач: «Уточнить юридический адрес Контрагента», «Отправить счет на оплату по почте» и «Ожидать оплату». Для заполнения параметров создаваемой активности «Читаю данные» из записи созданного Счёта, в том числе, в поле «Ответственный» создаваемых Активностей ставлю значение поля «Ответственный» из записи Счёта.

В реальной жизни, пока пользователь выполнял задачу, ответственный сотрудник по Счёту мог поменяться (уволился, перевёлся и т.д.). Логично, что при формировании следующей задачи следует в поле «Ответственный» поставить новое значение из Счёта. Однако для этого необходимо заново прочитать запись «Счёт» с помощью элемента «Читать данные». Таким образом, поскольку мы не знаем, когда будут изменены данные в Счёте, приходится перед каждым элементом задачи ставить элемент «Читать данные» и ориентироваться на него при создании новой Активности.

Хотела бы обсудить, какие еще варианты решения этого кейса есть. Напрашивается вытащить однотипные действия (в нашем случае – «Читать данные» Счёта) в отдельный событийный подпроцесс, но что бы я не делала, я не смогла запустить его более одного раза либо без ошибок.

Нравится

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

Проще всего именно так и делать - три раза читать данные. Просто и надежно.

Добрый день! 

Оптимальнее всего это будет сделать посредством бизнес-кейсов:

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

Также это избавит от необходимости создавать множество чтений данных.

Удачи!

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

Коллеги, добрый день!

Ранее в сообществе несколько раз поднимались темы использования элемента "Чтение данных" для получения "результирующей коллекции", чтобы в последствии её использовать в элементе "Задание-сценарий" для различных нужд. В версии 7.8 осталось только режимы: "читать первую запись", "считать количество записей" и "считать функцию".

Каким образом в данной версии можно получить Результирующую коллекцию? И каким образом можно к ней обратиться в элементе "Задание-сценарий"?

Заранее спасибо!

Нравится

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

Добрый день!

Пример обработки коллекции из чтения данных в ScriptTask:

EntityCollection entities = Get<EntityCollection>("ReadDataUserTask1.ResultEntityCollection");

var result = new Collection<string>();

foreach(Entity entity in entities) {

    

    var cityName = entity.GetTypedColumnValue<string>("Name");

    string temp = cityName.ToString();

    result.Add(temp);

    }

string displayValue = result.ConcatIfNotEmpty(",");

Set("MyResult", displayValue);

return true;

* MyResult - параметр процесса с типом Строка неограниченной длины

* ReadDataUserTask1 - название элемента Чтения данных

 

Олег, Спасибо!

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

Обнаружил некорректное поведение при отправке esq запроса, формируемого на стороне клиента.
Мне необходимо отфильтровать значения, выпадающие в Lookup поле.
Для этого в конфиге лукапа я устанавливаю значение свойству filters, в котором указываю, какие условия должны выполняться (ЛИБО поле не должно равняться определенному значению, ЛИБО поле может быть равно null).
Чтобы выполнялось условие "либо" - я указываю logicalComparisonTypes объекта Terrasoft.FilterGroup равное Terrasoft.LogicalOperatorType.OR (1).
Но фильтрация почему-то происходит, как будто я указываю условие не "либо", а "и".

Проверяю через tcpdump - какой именно запрос летит на сервер после формирования на клиенте, и к моему удивлению в запрос лепится "and" вместо "or".

001

Может кто сталкивался с подобной проблемой на 7.7, 7.8 или 7.10 - подскажите, пожалуйста, как боролись!

Нравится

3 комментария
Terrasoft.createFilterGroup().logicalOperation

возвращает по-умолчанию 0.

Ну собственно да, ответ выше, пишите
var filtersCollection = Terrasoft.createFilterGroup();
filtersCollection.logicalOperation = Terrasoft.LogicalOperatorType.AND;
при создании группы

Спасибо!
По ошибке использовал logicalComparisonTypes вместо logicalOperation

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

Версия 7.8.2.1561
Создал новую деталь без использования мастера деталей.
Зарегистрировал в SysDetail, SysEntityModule, SysModulEdit
Деталь добавляется в карточку через мастер разделов.
Но при попытке настроить отображение полей (Действие "Настроить колонки") появляется ошибка:

Uncaught Ext.JSON.decode(): You're trying to decode an invalid JSON String: undefined

При добавлении полей вручную в DataGrid детали, поля отображаются.

Нравится

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

Здравствуйте, Игорь!

Данная проблема была устранена в следующем релизе. Для решения необходимо обновить приложение на более новую версию или установить пакет с исправлениями. Для выполнения этих действий Вам нужно обратится в поддержку support@terrasoft.ru.

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

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

Нравится

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

Здравствуйте!

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

Рекомендую посмотреть реализацию метода addRecord() в схеме BaseProfileSchema (не уверен, что в 7.8.0 есть - в 7.9.0 точно есть).

нашел вот такое:
var entitySchemaName = this.getEntitySchemaName(typeColumnValue);
this.openAddMiniPage({
entitySchemaName: entitySchemaName,
moduleId: this.getMiniPageSandboxId(entitySchemaName),
valuePairs: this.getOpenDefaultValues(typeColumnValue, ConfigurationEnums.CardStateV2.ADD)
});
если мне нужно мини карточку контакта то нужно подставить другой entitySchemaName, но что такое typeColumnValue и ConfigurationEnums.CardStateV2?

Виталий, насколько я понял, то:

- typeColumnValue — значение колонки типизации записи (https://academy.terrasoft.ru/sites/default/files/documents/docs/technic…)

- ConfigurationEnums.CardStateV2 - текущее состояния страницы. В данном случае указывается, что действиебудет доступно для редактирования только в режиме добавления записи, а в режиме изменения/копирования будет неактивно (схема ConfigurationEnums).

при чем тут typeColumnValue??? и
entitySchemaName в ContactMiniPage указан Contact
разве нужно брать не ИД - "ViewModule_MiniPageListener_MiniPage_ContactMiniPage"?

Здравствуйте!

typeColumnValue - значение по которому типизируется раздел (в одном разделе может быть несколько страниц редактирования в зависимости от значения поля, по которому типизируется раздел). Хранится в таблице SysModuleEdit.
ConfigurationEnums.CardStateV2 - режим работы с записью.
Может быть:
- добавление новой записи,
- редактирования существующий записи,
- копирование существующей записи.

"Демьяник Алексей" написал:Хранится в таблице SysModuleEdit.

А если база находится на серверах Террасофта?

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

В данном случае Вы можете воспользоваться решением "PT SQL Executor for bpm’online" от партнера "Программные технологии": https://marketplace.terrasoft.ru/app/49

Благодарю за советы, вот что у меня получилось(работает):
onCreateContactClick: function() {
this.openAddMiniPage({
entitySchemaName: "Contact",
valuePairs: this.getAddMiniPageDefaultValues(this.Terrasoft.GUID_EMPTY)
});
}
typeColumnValue еще можно узнать из отладчика.

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

Обычное дело: как в 7.8 менять цвет строки в зависимости от значения колонок
вот как тут: https://community.terrasoft.ru/forum/topic/12359
только для 7.8

Нравится

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

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

Виталий, здесь посмотрите - http://www.community.terrasoft.ru/forum/topic/12855

там тоже что уже решено у меня.
как перехватить событие, когда карточку закрыли(сюда нужно вставить обновление записи реестра)

Здравствуйте.
Чтобы среагировать на событие закрытие карточки, достаточно переписать метод onSaved карточки. Другое дело что это карточка, и код вы пишите в карточке, а чтобы секция об этом узнала, то вам необходимое использовать песочницу (сообщения). О песочнице читайте здесь:
http://www.community.terrasoft.ru/forum/topic/15210
Алгоритм:
Сохраняется карточка, в методе onSaved делаете публикацию сообщения.
В секции слушаете это сообщение и делаете reloadGridData

а разве нельзя переписать существующую функцию, ту что обновляет данные из колонок?

А как она узнает что запись изменилась? Никак, для этого и нужна песочница(сообщения).

"Радчук Виталий Владимирович" написал:

а разве нельзя переписать существующую функцию, ту что обновляет данные из колонок?


Можно попробовать переопределить метод onCardModuleResponse в нужной схеме раздела (вычислил путем отладки). Этот метод изначально объявлен в схеме NUI.BaseSectionV2 и выглядит следующим образом (взял пример из 7.6):

	/**
	 * Обрабатывает ответ карточки после сохранения записи.
	 * @param {Object} response
	 * @return {Boolean}
	 */
	onCardModuleResponse: function(response) {
		this.set("IsCardInChain", response.isInChain);
		this.loadGridDataRecord(response.primaryColumnValue);
		return true;
	}

У метода loadGridDataRecord вторым параметром можно передать callback метод, который выполнится после обновления полей активной записи грида полями из сохраненной карточки редактирования этой записи. В этом callback-методе и проверять значение нужной вам колонки и менять подсветку записи при необходимости.

Пример реализации, если взять, что цвет записи в гриде зависит от значения кастомного поля TsSpecialFeature:

	/**
	 * Обрабатывает ответ карточки после сохранения записи.
	 * @overridden
	 * @param {Object} response
	 * @return {Boolean}
	 */
	onCardModuleResponse: function(response) {
		this.set("IsCardInChain", response.isInChain);
		this.loadGridDataRecord(response.primaryColumnValue, this.onCardModuleResponseCallback);
		return true;
	},
	/**
	 * Callback-функция обработки результата перечитывания указанной записи из базы данных
	 * @protected
	 */
	onCardModuleResponseCallback: function() {
		var activeRow = this.getActiveRow();
		if (activeRow) {
			var tsSpecialFeature = activeRow.get("TsSpecialFeature");
			if (tsSpecialFeature &&
				tsSpecialFeature.value !== TSCConstants.TsSpecialFeature.None.value) {
				activeRow.customStyle = { "background-color": lightTomatoColor};
			} else {
				activeRow.customStyle = null;
			}
		}
	}
Показать все комментарии

версия: 7.8 service
1. Как сделать вторую вкладку в разделе? что бы можно было там выводить другие поля из карточки.
2. Как сделать чтобы две-три колонки кроме своих названий имели еще одно общее которое будет написано вверху.

Нравится

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

Виталий, здравствуйте!

Если мы правильно поняли, то как вариант Вы можете воспользоваться базовыми средствами:

1. Вы можете добавить вкладку через мастер раздела;

2. Добавить и назвать группу полей, затем расположить пользовательские колонки;

Также можете посмотреть ознакомительный видеоролик - https://www.youtube.com/watch?v=DLFjsAR2CbI&t=271s

Нет, не то, это должна быть другая вкладка реестра, как в 3.х: "все контакты", "мои контакты". Такое можно сделать?

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

В bpm'online 7.8 есть представления разделов. По умолчанию в разделах есть два представления:
1) Список
2) Итоги

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

Это сложная реализация, требующая навыков программирования на языке JS.

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

Можете дать ссылку на документацию(более сложного способа)? Если она есть по именно данному случаю.

Здравствуйте, подобную задачу решали тут:

http://www.community.terrasoft.ru/blogs/12682
И тут: http://www.community.terrasoft.ru/forum/topic/15335

Удачи.

О, благодарю, то что нужно, а что по второму вопросу? он тоже касается реестра

Надеюсь, что это увидим в ближайших версиях. По этой функциональности из 3.х многие тоскуют

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

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

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

В преддверии выпуска новой версии bpm’online 7.9, мы подготовили еще один пакет обновлений CRM-линейки bpm’online.

Сегодня в списке изменений:

  • Работа с данными. Добавлена возможность выбора всех записей текущего раздела с учетом установленных фильтров.
  • Почта и телефония. Улучшена работа с различными каналами коммуникаций: предусмотрена порционная загрузка писем, добавлена возможность задавать псевдоним при отправке email, а также реализована поддержка Asterisk 13.
  • Инструменты администрирования. Чтобы обеспечить быстрый старт работы с системой, добавлена возможность импортировать из Excel список пользователей и их ролей.
  • Инструменты разработки. Повышено удобство и скорость работы в режиме конфигурирования системы. Теперь для перехода в раздел «Конфигурации» доступен короткий путь, список пакетов и действий отображаются рядом, добавлены функции сортировки и фильтрации пакетов, а также появилась возможность отфильтровать все измененные схемы

Узнайте больше на сайте Академии

Нравится

Поделиться

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

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

Известный модуль MultiMaskEdit позволяет реализовать маску, но значение в базу данных записывает в таком же виде. Если при сохранении очистить значение от ненужных символов, то при последующей загрузке значение не отображается, т.к. не соответствует маске. Также не отображаются частичные значения.
Например при маске +7(999) 999-99-99 и значении +7(999) 123-34-5 мы не увидим значения.

Нравится

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

Смотрел, с этих тем и начал. Проблема подробно описана в первом посте. Маска нужна только для отображения, но не для записи в базу.

Хардкод-решение. Сделать два поля, одно — номер с символами, другое — только цифры. Маску привязать к первому полю. Второе заполнять программно при изменении первого (при помощи БП или триггера в БД).

Александр, спасибо, пока примерно так и работает. Думал, может есть какое-то красивое решение.

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

При выборе контрагента и открывающемся Lookup окне, заголовок ставится "Основные сферы деятельности" причем подобное воспроизводится во всех разделах.

Кто то сталкивался с подобным? В какую сторону копать вообще?
1

Нравится

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

Банальную очистку кэша браузера и редиса я конечно боюсь предложить, но очень на это похоже.
А это только для окна выбора контрагента? например счет выбирать такой же заголовок?

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

Так там мультивыбор, и заголовки по другому формируются... А скажем если без мультивыбора в договоре выбирать все ок? Просто чтоб понять это проблема системная или конкретно в карточке Лида на действие выбора возникает

Вопрос снят, кто то создал справочник и назвал его Основные сферы деятельности, подвязан на объект Контрагент

Интересный эффект получился :)

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