Создал веб-сервис опроса погоды. В выходных данных есть поля дат. Эти даты надо сконвертировать из int в DateTime.Изображение удалено.

Не могу понять, как обратиться к параметрам веб-сервиса из задания-сценария?

Set("dt", GetDt(Get<int>("WebService1.dt")));
Set("sys_sunrise", GetDt(Get<int>("WebService1.sys_sunrise")));
Set("sys_sunset", GetDt(Get<int>("WebService1.sys_sunset")));
return true;

 

Нравится

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

Можно точнее? Что значит из int в DateTime?

public DateTime GetDt(int unixDate)
{
    var dt = new DateTime(1970,1,1,0,0,0,0, DateTimeKind.Utc);
    dt = dt.AddSeconds(unixDate).ToLocalTime();
    return dt;
}

Стандартный метод преобразования unix long в DateTime.

Дамиан, Вы можете создать в БП параметры нужного типа и связать их со входящими параметрами веб-сервиса. Затем из скрипта работать уже с ними, используя Get.

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

Можете привести код или ссылки?

Дамиан, как работать с параметрами при помощи Get, есть тут.

Я имею в виду, что в дизайнере БП привязать параметр процесса к исходящему параметру веб-сервиса, а затем работать уже с ним.

 

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

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

Есть задача по интеграции сайта со сторонним приложением. На стороне реализовано api с рядом запросов. Но реализация сторонних запросов такова, что мне приходится в бизнес процессе вызывать запросы в цикле. Может кто-то подскажет вариант вызова вэб-сервиса в тексте задания-сценария БП?

Нравится

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

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

if (ServiceUrl == Guid.Empty || string.IsNullOrEmpty(ServiceMethod)) {
	return true;
}
string serviceUrl = (new Select(UserConnection)
	.Column("URL")
	.From("WebServiceURL")
	.Where("Id").IsEqual(new QueryParameter("Id", ServiceUrl)) as Select)
	.ExecuteScalar&lt;string&gt;();
HttpWebRequest webRequest = CreateWebRequest(serviceUrl, ServiceMethod);
string Request = @"&lt;soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:web=""http://www.webserviceX.NET/""&gt;
&lt;soap:Header/&gt;
	&lt;soap:Body&gt;";
Request += RequestBodyInternal;
Request += @"
	&lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;";
webRequest.ContentLength = Request.Length;
using (Stream stream = webRequest.GetRequestStream()) {
	using (StreamWriter streamWriter = new StreamWriter(stream)) {
		streamWriter.Write(Request);
		streamWriter.Close();
	}
}
using (WebResponse response = webRequest.GetResponse()) {
	using (StreamReader rd = new StreamReader(response.GetResponseStream())) { 
		Responce = rd.ReadToEnd();
	}
}
PrepareResponceResult();
if (!IsLoggingRequestAndResponce) {
	Request = string.Empty;
	Responce = string.Empty;
}
return true;

 

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

Пытаюсь читать данные, как писали опытные люди

var entities1 = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask1.ResultCompositeObjectList");
var	entityLocation	= entities1.FirstOrDefault();
if (entityLocation == null)
	throw(new Exception("NULL!!!"));

ReadDataUserTask1 - чтение 1 записи.

entityLocation получается null, хотя я читаю элемент, по заранее заданному Id.

Если сделать просто entities1.First(), то ошибка System.InvalidOperationException: Последовательность не содержит элементов в System.Linq.Enumerable.First

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

Нравится

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

Попробуйте обращаться не к ResultCompositeObjectList, а к ResultEntity. И тип данных Entity

 

Попробуйте обращаться не к ResultCompositeObjectList, а к ResultEntity. И тип данных Entity

 

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

Доброго времени суток, в общем проблема такая. Необходимо отправить на веб сервер данные в формате xml, на сколько я понял из документации элемент "Вызвать веб сервер" отправляет Json запросы  а не XML. Возможно ли отправить запрос в веб сервер в формате XML из элемента "Задание сценарии" или лучше каким нибудь другим ходом пойти? Буду признателен за советы , а желательно с  примером)  

Нравится

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

Добрый день!

Да, лучше отправьте с помощью задания-сценария с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!

Да, лучше отправьте с помощью задания-сценария с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

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

Коллеги, приветствую.

Есть некоторый элемент- действие "Чтение данных", который считывает записи из таблицы и помещает в некоторую результирующую коллекцию ResultEntityCollection.

Как обратиться к этой коллекции из кода C# в действии "Задание- сценарий"?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Алексей,

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

Олег, спасибо большое за ответ! Посмотрю сегодня.

Олег, не могли бы Вы выложить пример в UTF-8? Был бы весьма признателен.

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

Согласно этому сайту, мой коллега хотел написать следующее:
1. Создать параметр процесса типа Строка - TestParam.
2. В значение параметра указать [#Read data 1.First item of resulting collection#].GetTypedColumnValue("Name")
3. В элементе Задание-сценарий работать с параметром.
var contactFullName = Get("TestParam");

Отлично, спасибо большое за ответ!

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