Привет,

 

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

На данный момент код выполняется в бизнес процессе как script task.

теперь мне его надо сохранить в базу данных. как это сделать? 

Прочитав статью Добавить данные https://academy.terrasoft.ua/docs/user/biznes_processy/spravka_po_eleme… я не уверен что это то, что мне нужно. 

 

Спасибо!

Нравится

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

попробовать через c# скрипт достучатся до пропети веб сервиса где лежит результат и там уже через Entity/Insert/CustomQuery.

попробовать через c# скрипт достучатся до пропети веб сервиса где лежит результат и там уже через Entity/Insert/CustomQuery.

Стас Гаврилюк,

спасибо за помощь. получилось сделать с помощью Entity.

 

var warehouseSchema = UserConnection.EntitySchemaManager.FindInstanceByName(WarehouseTableName);
var entity = warehouseSchema.CreateEntity(connection);
 
var entityExists = entity.FetchFromDB(conditionColumnName: WarehouseRefColumn, conditionValue: instance.Ref);
 
entity.SetDefColumnValues();
entity.SetColumnValue(WarehouseCityColumn, instance.CityDescription);
entity.Save();

 

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

Добрый день!

Интересует несколько вопросов, связанных с использованием web-сервисов:

1) Доступна ли  basic авторизация  для ProcessEngineService.svc а так же для кастомных конфигурационных сервисов? 

2) И если 1- да, то как правильно передать параметры авторизации?

Использую вебсервис так:

http://site/0/ServiceModel/ProcessEngineService.svc/RunProcess



{"parameterValues":

[

{"name":"Title","value":"TestValue1"},

{"name":"Description","value":"TestValue2"},

{"name":"Action","value":"TestValue3"}

],

"schemaUId":"AF7E3F40-0EFA-431A-94AA-4DEEFFE16E59",

"schemaName":"UsrCaseIntegrationProcess"}

 

Нравится

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

С авторизацией разобрался

Появился новый вопрос - как вернуть результат выполнения процесса. Как проавильно прописать в POST запрос ResultParameterName

Бакалов Павел Вячеславович,

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

Примеры запроса есть тут: https://academy.terrasoft.ru/documents/technic-sdk/7-12/web-servis-proc…

 

Tsopa,

Да, процесс компилируемый. Руководствуясь данной инструкции удалось выполнить процесс, передать параметры и получить результат используя метод GET. Но в инструкции написано, что так же можно использовать метод POST. Но у меня не вышло это сделать - процесс выполнился, но параметры в него не попали и результат соответственно не вернулся. Нет ли примеров POST запросов к методу Execute ?

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

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

Бакалов Павел Вячеславович,

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

Но если необходимо отправить POST запрос к Execute это можно сделать следующим образом: 

schemaName - эта название схемы процесса, который необходимо запустить

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: 

{}

 

как Вы решили проблему Basic авторизации?

См. тут. А вообще, базовую не рекомендуют, вот её сравнение с Cookies.

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

Добрый день!

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

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

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

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

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

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

Что за ньюанс такой, кто ведает прошу поделиться знаниями.

Может "Параметр процесса, который хранит результат выполнения процесса" (взято из академии) как-то нужно пометить в БП?

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

 

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

 

Нравится

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

Добрый день, 

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

Попробуйте проставить признак компилировать и снова выполнить запрос.

Tsopa,

Все верно спасибо.

Tsopa,

а что делать если процесс не компилируется (7.15.3) и в процессе не используется элемент задание-сценарий?

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

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

Добрый день! В документации по разработке, в статье о 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.

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

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

Запуск по урл бизнес-процессов из внешнего истчника не получает ответ от СРМ об успешном или неуспешном запуске БП. Просто пустая страница приходит в ответ. Из-за этого теряются данные, так как внешний источник отправил и думает, что СРМ получила данные, но иногда бывает, что процесс просто не запускался.



Вот урл  куда подставляю данные

$url = "https://Myssssite.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/CloseActivityAssignCoaching/Execute?Name=".str_replace(' ', '+', trim($name))."&Phone=".trim($phone)."&Email=".trim($email)."&Skype=".trim($skype)."&Coaching=".$coaching."&ActivityId=".$coachingId."";



Можно ли както заставить СРМ отдавать результат запроса, чтобы понимать что БП запущен или нет после такого запроса?

Нравится

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

Николай, здравствуйте!

Результат можно посмотреть в response запроса.

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

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