Добрый день!

 

Есть родительский процесс в рамках которого "Менеджер" добавляет в обьект "Заявка" новую стадию заявки (связанный обьект "Стадия"), согласно которой Заявка попадает в очередь обработки Оператором. Дальше по итогам взятия Оператором из очереди данной заявки и ее проработки - в заявку добавляется новая стадия - и вот в этот момент необходимо отправить емейл уведомление "Менеджеру" о том, что заявка проработана.

Первую часть с менеджером реализовал в виде родительского процесса который переходит в подпроцесс:

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

Подпроцесс в свою очередь по сигналу добавления новой стадии "запускает" отправку емейл уведомления менеджеру:

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

Но наткнулся на 2 проблемы:

1. При использовании стартового сигнала в подпроцессе - сам подпроцесс не считывает параметр "Менеджер" из родительского процесса, как и любые другие параметры (пробовал менять стартовый параметр "Сигнал" на "Простое" - параметры передаются успешно). 

2. Как избежать запуска "Подпроцесса" для других заявок у которых новая стадия добавляется не с родительского процесса, а другими механизмами? (во избежание загрузки системы лишними процессами)

Нравится

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

Александр, Вы смешиваете два механизма: безусловный запуск подпроцесса из основного процесса и запуск процесса по сигналу на каком-то событии объекта.

 

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

 

По общему механизму со стадиями, который Вы создаёте, не вполне понял. Если после добавления стадии нужно проверить, создана ли она по процессу, можно создать в объекте стадии новое поле и ставить там пометку. Если Вы имеете в виду две разных стадии, по процессу создалась вторая, а уведомление отправить автору первой, то в процессе на событии создания второй стадии можно по связям с заявкой вычислить первую, её автора-менеджера и отправить уведомление ему. Если по типу стадии нельзя однозначно сказать, какая идёт за какой, можно добавить в объект справочное поле со ссылкой на предыдущую.

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

 

Если рассматривать Вашу реализацию задачи, то, во-первых, подпроцесс из родительского процесса можно не вызывать, он вызовется автоматически при наступлении события, указанного в сигнале. Во-вторых, параметр "Менеджер" можно вычитывать из записи в таблице 'Стадии' (это будет тот, кто создал эту стадию) и потом ему отправлять уведомление. Избежать запуска подпроцесса при добавлении новой стадии другими способами можно, если добавить в таблицу стадий некоторое поле-признак, которое будет указывать на добавление стадии по процессу, и перед отправкой письма проверять установлено ли значение для данного параметра. А в родительском процессе устанавливать значение этого параметра при создании стадии.

 

Правильнее, конечно, добавить вызов подпроцесса (но не по сигналу) из родительского процесса и в него передать и Id созданной стадии, и менеджера, которому нужно отправить письмо, но вызывать подпроцесс только тогда, когда новая стадия уже создана.

 

А в данном примере можно и не использовать подпроцесс, а добавить отправку e-mail менеджеру прямо в родительском процессе, но опять таки только тогда, когда новая стадия уже создана, то есть у Вас должен быть переход на отправку письма по условию.

Алла Савельева пишет:

Правильнее, конечно, добавить вызов подпроцесса (но не по сигналу) из родительского процесса и в него передать и Id созданной стадии, и менеджера, которому нужно отправить письмо, но вызывать подпроцесс только тогда, когда новая стадия уже создана.

А какой элемент в таком случае подойдет для запуска? 

 

 

Алла Савельева пишет:

А в данном примере можно и не использовать подпроцесс, а добавить отправку e-mail менеджеру прямо в родительском процессе, но опять таки только тогда, когда новая стадия уже создана, то есть у Вас должен быть переход на отправку письма по условию.

Тут же опять вопрос: а как понять что новая (последующая, другая) стадия уже создалась, если текущий экземпляр процесса работает в рамках созданной им одной записи, а все последующие стадии создаются вне процесса и прямо в процессе не участвуют?

Алла Савельева пишет: Во-вторых, параметр "Менеджер" можно вычитывать из записи в таблице 'Стадии' (это будет тот, кто создал эту стадию) и потом ему отправлять уведомление.

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

 

Алла Савельева пишет: Избежать запуска подпроцесса при добавлении новой стадии другими способами можно, если добавить в таблицу стадий некоторое поле-признак, которое будет указывать на добавление стадии по процессу, и перед отправкой письма проверять установлено ли значение для данного параметра. А в родительском процессе устанавливать значение этого параметра при создании стадии.

Признак "добавление стадии по процессу" можно добавить в запись созданную по процессу, но нам все равно нужно сначала как то дождаться создания последующей стадии и только потом отправить "Менеджеру" уведомление.

 

Александр, Вы смешиваете два механизма: безусловный запуск подпроцесса из основного процесса и запуск процесса по сигналу на каком-то событии объекта.

 

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

 

По общему механизму со стадиями, который Вы создаёте, не вполне понял. Если после добавления стадии нужно проверить, создана ли она по процессу, можно создать в объекте стадии новое поле и ставить там пометку. Если Вы имеете в виду две разных стадии, по процессу создалась вторая, а уведомление отправить автору первой, то в процессе на событии создания второй стадии можно по связям с заявкой вычислить первую, её автора-менеджера и отправить уведомление ему. Если по типу стадии нельзя однозначно сказать, какая идёт за какой, можно добавить в объект справочное поле со ссылкой на предыдущую.

Зверев Александр,

Александр, спасибо за советы, сделал подобным образом, только на стадию добавил не пометку, а статус. И дальше уже в рамках одного процесса по элементу "Обработать сигнал" отслеживаю изменение статуса в ранее созданной по процессу стадии, а после этого отправляю email создателю стадии.

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

 

Алла Савельева,

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

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

Добрый день!

Необходимо получить список обращений с фильтрацией по колонке Status. Но поскольку это поле не заполнено, беру колонку StatusId в которой указаны справочные ID статусов обращения.

Отправляю запрос в следующем виде:

https://mysite/0/odata/Case?$filter=StatusId eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

получаю ответ:

{
    "error": {
        "code": "",
        "message": "The query specified in the URI is not valid. Unrecognized 'Edm.String' literal 'guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'' at '12' in 'StatusId eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38''."
    }
}

 

Какие комбинации я только не пробовал:

https://mysite/0/odata/Case?$filter=StatusId/Id eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

https://mysite/0/odata/Case?$filter=StatusId eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

https://mysite/0/odata/Case?$filter=StatusId eq '7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

и т.д. - результат один и тот же - ошибка 400

 

При этом если я делаю запрос по колонке с данными типа string - запрос отрабатывает корректно и возвращает ответ 200, например так:

https://mysite/0/odata/Case?$filter=Number eq 'SR00000262'

 

Что я делаю не так?

Нравится

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

Должно работать так:

https://mysite/0/odata/Case?$filter=Status/Id eq 7e9f1204-f46b-1410-fb9a-0050ba5d6c38

 

Должно работать так:

https://mysite/0/odata/Case?$filter=Status/Id eq 7e9f1204-f46b-1410-fb9a-0050ba5d6c38

 

Спасибо, теперь ответ приходит корректный.

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

Добрый день!

 

После настройки БП в котором текущему пользователю открывается "Страница редактирования" для просмотра информации из базы знаний, заметил что процесс продолжает выполняться, т.к. элемент "Открыть страницу редактирования" не выполняется. Согласно рекомендаций данного комьюнити было добавлено условие в поле "Когда считать элемент выполненным?", а именно: "ID заполнено". При этом процесс все равно продолжает выполняться на этом элементе. Почему, мне непонятно.Изображение удалено.

Цель: от пользователя не ожидается никаких действий с данной страницей (редактирование/сохранение/закрытие страницы и т.д.), он может как перейти на другой раздел, так и закрыть браузер.

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

 

P.S. такая же проблема присутствует и на элементе процесса "Преднастроенная страница". Согласно документации элемент должен выполняться после нажатия "Закрыть" на преднастроенной странице, но несмотря на нажатие на "Закрыть" процесс продолжает выполняться на этом элементе дальше.

Нравится

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

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

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

 

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

 

Зверев Александр пишет:

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

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

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

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

Александр О пишет:

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

Так у Вас проверило условие, оно выполняется, вот и пошло дальше ещё до открытия страницы пользователем.

 

Возможно, поможет автогенерируемая страница с нужной информацией пользователю? Но там выполнение стоит на элементе, пока пользователь не нажмёт кнопку, отличную от отмены.

Александр О,  добрый день.

 

Подскажите, пожалуйста, удалось ли решить эту проблему? Если да, то как? Спрашиваю, т.к. сталкиваемся с такой же ситуацией в некоторых бизнес-процессах.

Эдуард Р,

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

 

1. Присылать пользователю уведомление из процесса в коммуникационную панель со ссылкой на страницу, которую он должен посмотреть. Минут этого варианта в том, что пользователь может открыть перечень уведомлений и не пройти по ссылке, при этом счётчик уведомлений сбросится, и пользователь в дальнейшем может забыть перейти по ссылке.

2. Показать пользователю автогенерируемую страницу и вывести в нее всю необходимую информацию из записи. Задача будет висить в коммуникационной панели пока не выполнится, но для выполнения всё равно нужно добавить в нее любую кнопку и назвать, к примеру, "Сохранить". Страница выполнится только когда пользователь нажмёт на эту кнопку.

 

Однако не уверен, есть ли смысл реализовывать отдельно автогенерируемую страницу, если Открыть страницу редактирования работает точно так же - пользователь жмёт "Сохранить" и элемент выполняется. Всё, что требуется от пользователя - один клик.

Эдуард Р,  вы можете попробовать отобразить страницу, которая автоматически закроется через указанное в таймере время. Притом, если страница будет открыта на момент истечения времени таймера, она будет оставаться на экране до тех пор, пока её не закроют вручную.

Это должно решить вашу проблему. На скриншоте пример реализации на BPMN с использованием  таймера на одну минуту и "включающего или" (в обоих условных потоках указано литеральное true).



.

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

Добрый день!

 

Хотелось бы узнать существуют ли какие то правила поиска внутри самого комьюнити, т.к. пересматривать иногда сотни статей является очень трудозатратным? Имеются ввиду правила поиска, по аналогии с правилами в поисковике (знаки, комбинации знаков).

Например: необходимо найти точную фразу "Установить результаты по обращению". При поиске по такой фразе находит страницы с отдельными словами, но не со всей фразой целиком:

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

Нравится

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

Александр, если функциональности внутреннего поиска не хватает, можно в Google написать запрос и там же site:community.terrasoft.ua, так можно будет искать по сайту и при этом использовать все параметры расширенного поиска, поиск за период и подобное.

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

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

На сайте клиента выгружается некорректное количество данных из представлении Итогов в разделе Звонки.

 

В разделе настроила Итоги "Отчет по звонкам" с фильтрации: 

Дата создания = Текущий месяц

Длительность > 0

В связи с разделом, указала ID. 

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

При экспорте отчета в Excel получаю запись в количестве 5192.

 

В разделе Звонки с этими же условиями получаю записи в количестве  12 113.  

 

А Через Действие.Экспорт в Excel получаю это же количество - 12 113.

В разделе в рамках проекта адаптацию не делали. 

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

Если кто-то сталкивался проблемой такого рода некорректности данных, очень прошу поделиться решением

Нравится

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

 

Айгерим, попробуйте сравнить список за какой-то небольшой период (например, час, а не месяц) и понять, каких звонков нет в выборке, в чём их отличия. Возможно, дело в правах доступа на записи или каком-то дополнительном условии. Если есть доступ к базе, можно отловить профайлером запрос.

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

Как в детали c полями получить дополнительные атрибуты отображаемого поля? (аналог LookupListConfig columns)?

Нравится

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

В конфигурации такой схемы нет.

Анна, например, в схеме карточек деталей OrganizationDetailPage и ServiceInServicePactDetailPage работают с lookupListConfig справочных полей.

 

Если же интересует в реестре детали, то в схеме SysAdminUnitInWorkplaceDetailV2 настраивают выбор из справочника пользователей и ролей, налагают ему фильтры:

/**
 * Open administration objects directories.
 * @private
 */
openSysAdminLookup: function() {
	this._getSysAdminLookupConfig(function openLookupByConfig(config) {
		this.openLookup(config, this.addCallBack, this);
	}, this);
},
 
/**
 * Creates a config to open a directory.
 * @private
 * @param {Function} callback Callback function.
 * @param {Object} scope Callback execution context.
 * @return {Object} Configuration object.
 */
_getSysAdminLookupConfig: function(callback, scope) {
	var config = {
		entitySchemaName: "SysAdminUnit",
		multiSelect: true,
		hideActions: true
	};
	this._getSysAdminUnitFilter(function(filterGroup) {
		config.filters = filterGroup;
		Ext.callback(callback, scope || this, [config]);
	}, this);
},

 

Зверев Александр,

имелась в виду FieldsDetail

В конфигурации такой схемы нет.

BaseFieldsDetail

Опытным путем выяснили, что дополнительные атрибуты можно добавить в initESQColumns, тогда они доступны в строке детали с полями

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

Добрый день!

Подскажите как активировать процесс по созданию Базы знаний после решения обращения.

Удалила его из справочника Деактивированных процессов, процесс Активный. Но при переводе обращения в стадию "Решено" процесс не запускается, меняла язык в системе на английский, ситуация не изменилась. 

 

Нравится

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

Яна, проверьте в самом процессе условия его запуска по сигналу. Возможно, кроме стадии там проверяют ещё какие-то поля и в Вашем случае условие не выполняется.

Систему не обновляли перед этим? Процесс не пробовали опубликовать? Возможно, там есть элементы, требующие публикации.

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