Добрый день!

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

Нравится

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

Иван, здравствуйте!

На данный момент, логика расчета среднего показателя реализована только для колонок, которые фактически присутствуют в БД. Пока агрегирующие значения не хранятся в БД, а их можно только сформировать динамически (например, вывести колонку в реестр), то рассчитать по ним итоги (среднее/минимум/максимум) возможности нет.

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

Юлия, спасибо за ответ! уже нашёл похожий пост по хэштегу #среднее время, там как раз про представление в БД.

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

При попытке использовать параметр в запросе $top (см пример запроса)

ProductStockBalanceCollection?$top=100$filter=Warehouse/Id eq guid'ba765c02-b0aa-11e6-bea8-00155d020d02'

получаю ответ о некорректности использования этого параметра

Incorrect format for $top argument '100$filter=Warehouse/Id eq guid'ba765c02-b0aa-11e6-bea8-00155d020d02''.

 

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

Без использования этого параметра - отрабатывает корректно 

Нравится

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

Добрый день.

Произошел сбой при отправке e-mail. В результате чего на контрагенте осталась висеть задача http://prntscr.com/jaufow .

Но при попытке её завершить попадаю в актиность e-mail, в которой отсутствую кнопки отправить, завершить или отменит. http://prntscr.com/jaugxs

Подскажите, пожалуйста, как снять или завершить данную активность (ни в черновиках ни в исходящих это письмо не висит).

Нравится

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

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

В случае если тип данной активности "Email"  и оно было не отправлено, то письмо должно отображаться в черновиках(проверьте так же обработанные и не обработанные черновики).

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

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

Друзья, скорее всего очевидный вопрос, но не нашел ни упоминания, ни гайда.

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

Примерно как описание группы вопросов в анкете, далее вопросы, снова описание группы вопросов...

Делать для этого Текстовое поле, скрывать Имя  и заполнять из карточки в карточку одинаковыми значениями не хочется.

Нравится

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

Добрый день. А элемент Группа полей разве Вам не подойдёт? Он вроде как для таких целей и был создан.

Кисловский Михаил Андреевич,

Ок, группа полей, но есть ограничение на длину названия, перенос строк.

То есть описание-разделитель не формата "Группа Вопросов 1", а "В данном разделе представлены вопросы из группы 1. Подразумевается ответ об участниках департамента и еще пару предложение описания раздела"

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

 

Здравствуйте, ZAN

На данный момент в приложении нет возможности реализовать Вашу задачу пользовательскими средствами.

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

На данный момент можно, средствами разработки, написать diff который использовать в необходимом css для отображения описания полей на странице.

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

Добрый день! В документации по разработке, в статье о ProcessEngineService говорится:

Вызов метода Execute() можно выполнять с помощью HTTP-запросов GET и POST.

В посте от 14 года среди ответов есть следующий:

Добрый день.К сожалению, передача параметров в потоке метода POST в текущих версиях bpm’online не реализована.

Скажите, пожалуйста, существует ли сейчас возможность передачи параметров в бизнес-процесс в теле post-запроса? И если существует, то очень хотелось бы посмотреть пример реализации, потому что у меня упорно не получается передать параметры (при этом, через GET всё работает)

Нравится

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

Добрый день, Иван!

Такая возможность есть, 

Пример: URI /0/ServiceModel/ProcessEngineService.svc/RunProcess

Body 

{"parameterValues":[{"name":"TextParameter","value":"TestValue."}],"schemaUId":"9c7ff5ab-5808-4b1c-9c9e-e66537c00cf8","schemaName":"UsrProcess1"}

 

Tsopa,

Спасибо большое, сработало! Подскажите ещё, пожалуйста, как передать json в value? Обычный текст передается корректно, а json не ловится из бизнес-процесса.

Tsopa,

Всё заработало, и json передался. Спасибо большое!

Tsopa,

Добрый день!

А что указать в Body, чтобы в ответе получить значение параметра с именем "Result" (имя для примера указал)?



А теперь более подробно мой вовпрос.

Есть БП с текстовым параметром (TextResult), целочисленным параметром (IntResult), идентификатор (AccountId). В БП я задаю им определенные значения, явно отличные от пустой строки, нуля и пустого Guid. После выполнения БП я хочу получить результирующее значение любого параметра.

Пробовал как указано на академии Get запрос делать прямо в строке браузера http://localhost:8082/0/ServiceModel/ProcessEngineService.svc/TestProce…

ответ: <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">null</string>     ---- null, вместо текста который должен был быть результатом.

на запрос http://localhost:8082/0/ServiceModel/ProcessEngineService.svc/TestProce… получаю ответ <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">0</string>   ---- опять ноль, хотя указывал разные целые числа

ну и для Guid ответ <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">"00000000-0000-0000-0000-000000000000"</string>  --- снова ноль.

НО входящие значения параметров БП применяются и всё отлично.

Если из js делаю post запрос как вы предложили, то надеюсь получу результат, правда не знаю как указать ResultParameterName=TextResult...

 

Вот код

var bpUrl = Terrasoft.workspaceBaseUrl +'/ServiceModel/ProcessEngineService.svc/RunProcess';
var data = {
	"schemaName":"TestProcess",
	"resultParameterName":"TextResult" //пробовал и с заглавной буквы ResultParameterName
};
 
var result = Terrasoft.AjaxProvider.request({
	url: bpUrl,
	headers: {
		'Accept': 'application/json',
		'Content-Type': 'application/json'
	},
	method: "POST",
	jsonData: data,
	scope: this,
	callback: function(request, success, response) {
		var responseObject = Terrasoft.decode(response.responseText);
		debugger; //здесь останавливаюсь и получаю
		//см скриншот
	}
});

Нет TextResult !!! 

Помогите плиз, или может хоть кто знает почему GET запрос пустые параметры возвращает.

C GET разобрался. Нужно обязательно компилировать код, даже если простая формула.

Вопрос с POST запросом в силе.

Степин Константин Владимирович,

Если рассматривать метод Execute, то возможности отправлять параметры в теле POST запроса нет. Также, не рекомендуется отправлять POST запросы к методу Execute так как он устарел. Вместо этого стоит воспользоваться методом /RunProcess.

Пример POST-запроса: 

https://[site name]/0/ServiceModel/ProcessEngineService.svc/RunProcess

пример Header:

Content-Type: application/json

BPMCSRF: BgsjByc16fsEZfuAr/CxDO

Cookie: BPMLOADER=vuhtzmo2wh2mxgb1amggorf2; .ASPXAUTH=FFF4F....; BPMCSRF=BgsjByc16fsEZfuAr/CxDO;

пример Body:

{"schemaName":"Process3", "parameterValues"[{"name":"UsrParam","value":"TestValue"}]}

 

Также примет POST-запроса к Execute:

https://[site]/0/ServiceModel/ProcessEngineService.svc/[schemaName]/Execute

пример Header:

Content-Type: application/json

BPMCSRF: BgsjByc16fsEZfuAr/CxDO

Cookie: BPMLOADER=vuhtzmo2wh2mxgb1amggorf2; .ASPXAUTH=FFF4F....; BPMCSRF=BgsjByc16fsEZfuAr/CxDO;

пример Body:

{}

 

Tsopa,

Это именно то что я искал, спасибо!

Tsopa,

Я так понимаю, что в версии 5.4 нету шансов отправить параметры в теле POST-запроса ?

Ігор Андрусенко,

К сожалению, в версии 5.4 такая возможность не реализована. 

Добрый день!



Каким образом при вызове процесса через ProcessEngineService.svc / RunProcess можно получить результат выполнения этого процесса в виде переменной этого процесса.



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



Пробовал в тело запроса прописать значения переменной: "resultParameterName": "Result". Но к сожалению не возвращается значение параметра Result?



Приходит ответ в следующем виде:



{ "ErrorInfo": null, "success": true, "processId": "7a71fb9e-536e-4d85-817b-e70b6c17c4a8", "processStatus": 1}

В статье есть пример получения результата:

Web-cервис ProcessEngineService.svc позволяет запустить определенный бизнес-процесс и получить результат выполнения этого процесса через заданный параметр. Для этого необходимо вызвать метод Execute() в следующем формате:

http[s]://<адрес_приложения_bpm'online>/0/ServiceModel/ProcessEngineService.svc/PROCESSSCHEMANAME/Execute?ResultParameterName=RESULTPARAMETERNAME[&<опциональные входящие параметры бизнес процесса>],

где

  • PROCESSSCHEMANAME — название схемы процесса, экземпляр которого необходимо запустить на выполнение;
  • RESULTPARAMETERNAME — имя параметра процесса, который хранит результат выполнения процесса. Если этот параметр не задан, то web-сервис запустит указанный бизнес-процесс без ожидания результата его выполнения.

ВАЖНО

Если в вызываемом процессе отсутствует параметр с именем RESULTPARAMETERNAME, web-сервис вернет значение null.

Например, необходимо выполнить запуск бизнес-процесса CustomProcess. Результат выполнения процесса хранится в исходящем параметре процесса CustomProcessResult и возвращается в запросе. Дополнительно в процесс CustomProcess передается параметр incomeParam со значением "IncomeParamValue". Тогда строка GET-запроса будет следующей:

.../0/ServiceModel/ProcessEngineService.svc/CustomProcess/Execute?ResultParameterName=CustomProcessResult&incomeParam=IncomeParamValue

Результат выполнения метода Execute() возвращается в виде строки, содержащей JSON-объект (допустимо получение значения null). Десериализация JSON-объекта и приведение полученного результата к определенному типу данных должны выполняться в коде, вызывающем web-сервис.

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

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

Из всего этого понимаю:

1. Что метод RunProcess можно вызвать и передать в него тело запроса, но сформированый результат он не вернет?

2. Для получения сформированного результата нужно еще будет сделать запрос методом Execute, который должен вернуть сохраненьй в системе результат процесса, который был вызван методом RunProces в 1-м пункте?

Выше написано:

Вызов метода Execute() можно выполнять с помощью HTTP-запросов GET и POST.

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

все что передаем в теле запроса методом Execute бизнес-процесс не может прочитать.

Лишь через RunProcess бизнес-процесс видит тело запроса.

Как подготовить тело запроса для метода Execute, чтобы бизнес-процесс обработал данные?

Если в теле не видит, попробуйте передавать в адресе, как в GET.

 методом GET нельзя передавать большие объемы информации, потому что данные, передаваемые этим методом входят в соств URL, длина которого ограничена

Если передаются большие объёмы, то и процесс, скорее всего, будет выполняться не мгновенно. Возможно, лучше не ждать его завершения, а пересмотреть архитектуру запуска сервиса. Например, из БП запускать вызов веб-сервиса (уже в противоположную сторону) или писать результаты в какую-то таблицу, а потом забирать по OData.

Спасибо за ответ

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

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

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

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

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



Спасибо!

Нравится

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

Добрый день, Роман!

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

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

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

Могу посоветовать несколько вариантов:

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

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

Хорошего дня!

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

Татьяна Адамчук, прекрасная новость! До того приходилось реализовывать это дополнительными методами

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

Задача: пользователь вводит число в поле.

Система обрабатывает это число(применяет скидку) и записывает обратно в это же поле. Как сделать что бы все работало без зацикливания и ошибок?

Нравится

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

Добрый день, Виталий!

Если процессом с использованием элемента "Формула" пересчитывать, то лучше два поля, например 1 поле "скидка" и второе поле "итоговая сумма" и процесс стартовать по факту заполнения поля "скидка", формулой пересчитывать итоговую сумму и записывать значение в соответствующее поле. В итоге процесс не будет стартовать по факту изменения итоговой суммы, так как он завязан на поле "скидка", а скидка у нас остается неизменной.

Если же нужно именно через 1 поле, то логикой на странице  https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-vych…;

 

Адасюк Валерий Викторович, Это второй вариант, если поп простому: пользователь вводит значение в поле и система автоматом увеличивает это значение на 5. Тоесть Ф. подписки должна сработать только один раз

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

Всем доброго времени суток. Версия 7.11

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

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

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

По идее можно добавить на основную запись скрытую колонку, и как-то загружать деталь в зависимости от условий.. есть, например, решение как скрыть лишние записи - https://community.terrasoft.ua/node/26289

Но вот можно ли вообще реализовать показ разных колонок?

Нравится

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

чисто в теории:

колонки подтягиваются из профиля при загрузке грида. я бы расковырял метод initProfile(из BaseGridDetailV2) и в зависимости от условий подставлял нужную мне настройку реестра.

Данила, спасибо, интересная идея.

А можно ли подставлять настройки реестра на лету?

Как раз в сообщении Данила и написан примерный ход решения. Страница запрашивает Profile (для каждого пользователя свой) в котором храняться настройки отображения. Там и можно на лету подставить нужные настройки.

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

Добрый день, коллеги.

Прошу поделиться опытом по следующим вопросам:

1. Как корректно привязать в данные пакета признак актуальности версии БП (На данный момент делаю через insert в таблицу SysSchemaProperties)?

2. Как корректно привязать в данные пакета признак активности кейса раздела (На данный момент Update записи в SysSchemaUserProperty)?

3. Как корректно отключить БП и привязать в данные пакета этот признак (На данный момент Insert в SysProcessDisabled) 

Нравится

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

Можно ли создать новую и привязать её к объекту?

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

Версия 7.11.

Нравится

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

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

Да, конечно. На Community есть несколько постов по ручной регистрации раздела (например, https://community.terrasoft.ru/node/26721), алгоритм установки нужных связей с объектом там также есть. Для страницы справочника достаточно будет создать схему и зарегистрировать связи с объектом в таблицах SysModuleEntity и SysModuleEdit аналогично регистрации страниц раздела. 

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