Добрый день. Не получается сериализовать объект в строку Json. 

Сериализую так  string requestJson=Json.Serialize(invoice);

Проблема в том что теги не обварачиваются внутри ковичек. 

Код создания объекта и результат приведены в снимках.

 

Прикрепленные файлы

Нравится

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

Добрый день!

Не совсем понял в чём заключается ошибка, в любом случае вы можете попробовать использовать библиотеку Newtonsoft, с помощью которой также можно сериализовать объект в JSON.

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

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



Как сделать что-то типо такого: 

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers().AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
}

 

.net core

Нравится

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

Стас, добрый день!

Для сериализации/десериализации вы можете в сервисе использовать либу Newtonsoft.

Для этого сперва нужно добавить следующие using:

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

После чего в методе сервиса вызвать:

var content = JsonConvert.SerializeObject(objectToSerialize);

Хочется что бы это был стандартный сериализатор, а не возвращать строку которая ещё раз будет сериализирована стандартным .net  сериализатором. 

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

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

Есть ли такая возможность?

Нравится

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

Добрый день, имеется лендинг работающий как отдельный сайт в IIS, идея в том чтобы в выпадающий список попадали данные из справочника в Creatio. Подскажите, как это можно реализовать?

Нравится

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

С созданием контактов в Creatio через Лэндинг разобрались, но как достать из справочника не понимаю)

В целом это описано в статье.

https://academy.terrasoft.ru/docs/user/instrumenty_crm/lendingi_i_web_f…

 

Но выпадающий список со значениями и id нужно генерировать на стороне лендинга. Если список справочных значений не меняется со временем, то это можно захардкодить. Если меняется, но редко, то лучше синхронизировать базу сайта и справочник creatio. Опять же при наличии бд на сайте. И потом из базы генерировать "код" со значениями. Третий вариант, через веб сервис/или odata каждый раз считывать значения справочника и генерировать на стороне лендинга список

Трефилов Павел Сергеевич,Спасибо, мы пробовали захардкодить но данными обязательное Контрагент поле все равно не заполняется, можно ли как-то побороть при отправке данных с лендинга? Через БП после создания не хотелось бы делать

Тут наверное делать поле "контрагент" необязательным на уровне объекта. Параллельно создавать текстовое поле контрагент, и процессом после создания пытаться искать (или создавать) контрагента по каким-то критериям. Например, если лендинг с типом "форма регистрации контакта", то там есть процесс по "поиску и созданию контакта", можно в него встроить логику с контрагентом, там доп поле на объекте создавать не нужно, его можно брать из веб формы.

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

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

Настраиваю интеграцию с сервисом Ringostat



 https://help.ringostat.com/knowledge-base/article/integration-with-ringostat-via-api?_ga=2.175421226.967939475.1632121367-102122395.1627983840&_gac=1.124763256.1630405486.Cj0KCQjwpreJBhDvARIsAF1_BU3JuXmxhDLRmAZxhF9xAkJXLrFr1vFGPsRwjQzEaPlH3z4kQxz0_lsaAlGpEALw_wcB



В веб сервисах, в новосозданном методе указаны данные параметры вызова и отработки ответа



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

 

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

 

На выходе получается такая ошибка

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



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

В чем может быть проблема ? 

Нравится

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

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

Если вы правильно настроили интеграцию, то рекомендую с помощью Postman провести дєбаг. Возможно такой запрос и должен вернуть этот результат. Необходимо протестировать отправку других запросов и посмотреть на результаты.

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

Есть JSON на 35 000+ строк.

На стороне сервера запрос принимается и обрабатывается 118 – 124 секунды.

Во время обработки запроса к нам приходит ошибка:

Received an unexpected EOF or 0 bytes from the transport stream. Trace at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size) at System.IO.StreamReader.ReadBuffer() at System.IO.StreamReader.ReadToEnd() at Terrasoft.Configuration.UsrCustomNamespace.UsrHelperForAuction.SendRequest[T](String api, T requestObject, Guid auctionId)

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

На стороне сервера были увеличены таймеры. С помощью POSTMAN запросы проходят без проблем.Изображение удалено.

В CRM при отправке запроса, HTTP Request был добавлен таймаут = 600 * 1000.

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

Ошибка осталась та же.

Нравится

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

Добрый день.

Подскажите, сколько по времени занимает выполнение запроса в Postman?

Если у вас закрывается сессия до выполнения запроса, я бы рекомендовал обратить внимание на системную настройку UserSessionTimeout. Максимальное значение данной настройки - 720 мин.

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

Добрый день! Появилась необходимость создать бизнес процессы через POST-запросы. 

Используя мануал для DataServise , написал кейс такого вида: 

 

 data = {
    "columnValues": {
        "items": {
            "Account": {
                "expressionType": 2,
                "parameter": {
                    "dataValueType": 10,
                    "value": "f3f8f781-3c5b-4ecb-89ef-5c1ed4da12ga"
                },
            },
 
            "Category": {
                "expressionType": 2,
                "parameter": {
                    "dataValueType": 10,
                    "value": "1c0bc159-150a-e111-a31b-f2g4hd04c01d"
                },
            },
....
            "operationType": 1,
            "rootSchemaName": "Case"
     },
    },
}

Но при post запросе вида: 

 

h = requests.post("
https://bpm-test.ru/0/dataservice/json/Reply/InsertQuery
", headers=headers, cookies=p.cookies, data=json.dumps(data))

Появляется ошибка :



 

{'responseStatus': {'ErrorCode': 'ArgumentNullOrEmptyException', 'Message': 'Значение аргумента "name" не может быть пустым', 'Errors': []}, 'rowsAffected': -1, 'nextPrcElReady': False, 'success': False}

С чем это может быть связано? если поле name даже не присутствует 

Нравится

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

Дмитрий, уточните, Вы спрашиваете о запуске процесса или о создании записи в каком-то разделе (в Вашем примере — Case)?

Если интересует именно первое, нужно использовать не DataService, а ProcessEngineService. Как его запускать в POST, см. тему.

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

Доброго дня, имеется bpm которая при GET запросе 0/ServiceModel/EntityDataService.svc/ContactColletion возвращает xml с контактами, можно ли GET запросом возвращать JSON и если да, то где про это написанно? Если нельзя, то как вернуть JSON для oData 3?

Нравится

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

Добавьте header к запросу

Accept: application/json;odata=verbose

Добавьте header к запросу

Accept: application/json;odata=verbose

я смог сделать это в постмане, но все же не понятно, мб подскажете возможно ли в террасофте возвращать json по обращению к uri, если можно сделать это не переписывая сервис, буду благодарен за подсказку)

условно я иду по адресу /0/ServiceModel/EntityDataService.svc/ContactCollection и мне падает 

 

{

    "d": {

        "results": [

            {

                "__metadata": {

                    "id": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…",

                    "uri": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…",

                    "type": "Terrasoft.Configuration.Contact"

                },

                "Photo": {

                    "__deferred": {

                        "uri": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…"

                    }

                },

                "Owner": {

                    "__deferred": {

                        "uri": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…"

                    }

...и т.д.

Насколько понял, только заголовком. Такой формат здесь не поддерживается: «ContactCollection?$format=json». А в OData 4 по умолчанию идёт JSON.

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

Подскажите как можно в C# сделать Serialize в json объект класса

public class ImportCreatioServiceCaseColumns
{
	[JsonPropertyName("idNumber")]
	public string IdNumber { get; set; }
	[JsonPropertyName("typeCase1Name")]
	public string TypeCase0Name { get; set; }
}
public class ImportCreatioProcessCaseColumnsOut
{
	[JsonPropertyName("schemaName")]
	public string BusinessProcessName { get; set; }
	[JsonPropertyName("parameterValues")]
	public ImportCreatioServiceCaseColumns ImportCreatioServiceCaseColumns { get; set; }
 
}

и привести его к виду 

{
	"schemaName":"KtImportCaseTransferTableInBPMTest",
	"parameterValues":
	[
		{"name":"idNumber","value":"80001019"},
		{"name":"typeCase1Name","value":"Алматы"}
	]
}

?

Это нужно что бы передать body в микровервис для запуска бизнес-процесса с параметрами POST методом.

Нравится

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

Можно подключитье  Json.NET он уже включен в коробке. Подробнее об использовании смотрите https://www.newtonsoft.com/json

 

Как то так

 

sing System;
using Newtonsoft.Json;
 
namespace JsonPrettyPrint
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Product product = new Product
                {
                    Name = "Apple",
                    Expiry = new DateTime(2008, 12, 28),
                    Price = 3.99M,
                    Sizes = new[] { "Small", "Medium", "Large" }
                };
 
            string json = JsonConvert.SerializeObject(product, Formatting.Indented);
            Console.WriteLine(json);
 
            Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);
        }
    }
 
    internal class Product
    {
        public String[] Sizes { get; set; }
        public decimal Price { get; set; }
        public DateTime Expiry { get; set; }
        public string Name { get; set; }
    }
}

 

Не работает так как нужен именно такой формат, уже пробовал как Вы советуете 

Григорий Чех пишет:

{"name":"idNumber","value":"80001019"},

Похожий формат обсуждают тут.

 

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

Похожий формат обсуждают тут.

А Вы пробовали вызывать бизнес-процесс из другого приложения через post вызов передавая параметры через тело запроса? 

Александр, см. тут.

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

День добрый.

Не смог отыскать примера структуры JSON'а для DataService.

В запросе отправляю следующий Json, без блока Filters отрабатывает корректно.

{
	"RootSchemaName": "Opportunity",
	"OperationType": "Select",
	"Columns": {
		"Items": {
			"Title": {
				"Expression":{
					"ExpressionType": "SchemaColumn",
					"ColumnPath": "Title"
				}
			}
		}
	},
	"AllColumns": false,
	"IsPageable": false,
	"Filters": {
		"RootSchemaName": "Opportunity",
		"FilterType": "CompareFilter",
		"LogicalOperation": "And",
		"LeftExpression": {
			"ExpressionType": "SchemaColumn",
			"ColumnPath": "Title"
		},
		"ComparisonType": "Contain",
		"RightExpression": {
			"ExpressionType": "Parameter",
			"Parameter": "test"
		},
		"LeftExpressionCaption": "test",
		"IsAggregative": false,
		"Key": "Title filter"
	}
}

Но при попытке использовать Filters сервис дает следующий ответ.

{
    "success": false,
    "responseStatus": {
        "ErrorCode": "NullReferenceException",
        "Message": "Ссылка на объект не указывает на экземпляр объекта.",
        "Errors": []
    },
    "rowsAffected": -1,
    "nextPrcElReady": false
}

Перепробовал различные варианты, но так и не смог отыскать где ошибка в структуре. Кто сталкивался и может привести пример структуры рабочего запроса? Спасибо!

Нравится

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

Добрый день.

Попробуйте для параметра значение указать таким образом:

"Parameter":{
    "DataValueType":[Тип данных],
     "Value":"[Значение колонки]"
}

 

Добрый день.

Попробуйте для параметра значение указать таким образом:

"Parameter":{
    "DataValueType":[Тип данных],
     "Value":"[Значение колонки]"
}

 

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

получилось, спасибо.

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