Веб-сервис.

Как для GET метода передать кастомный тип объекта во входных параметрах?

Есть тип:

    [DataContract]

    public class SomeType {

        [DataMember]

        public string path { get; set; }

        [DataMember]

        public string als { get; set; }

    }




Есть метод: 

[OperationContract]

        [WebInvoke(Method = "GET", 

            RequestFormat = WebMessageFormat.Json, 

            BodyStyle = WebMessageBodyStyle.Wrapped,

            ResponseFormat = WebMessageFormat.Json,

            UriTemplate = "/ping/{s}")]

            [return: MessageParameter(Name = "data")]

        public object Pong(string s, SomeType SomeData) {

            return JsonConvert.SerializeObject(SomeData);

        }

При попытке отправить гет запрос через постман и передать данные, получаем всегда ответ: 



"data": "{\"path\":null,\"als\":null}

 

Что по факту равно если вообще не передавать параметр.



Но если мы делаем метод POST и передаем в теле этот же параметр вот так:

{

    "SomeData":  {

        "path": "Name",

        "als": "name"

    }

}

 

То работает, чего я не понимаю? 

Нравится

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

Я не помню, что бы в get запросе можно было передавать тело запроса анонимно,  для такого метод post предназначен, а get данные через параметры в url всегда передаются.

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

`?someBody={key:"value"}`? 

Dima Avdoshin,

тело запроса это же просто данные, какая разница что передавать данные если их конечно не много через гет или через пост? особенно если ты хочешь только читать данные

Dima Avdoshin,

вопрос в тому как передать в гет запросе данные так что бы это потому преобразовалось в объект, потому как с List<Guid>  передается и все норм, я вот думаю в чем разница между Guid и моими типами? скрин приложу как передаю

ответ: 

{

    "data": "{\"path\":null,\"als\":null}[\"c31b1382-d7c1-4318-a241-16a64c825720\"]sasdasdasd"

}

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

к сожалению я не смог сделать так как ты, вероятно может получится с помощью класса обертки (код ниже), где в knowType указываются все возвращаемые типы, можешь назвать его как указано ниже

 

[DataContract]
[KnownType(typeof(OpenIdStatus))]
[KnownType(typeof(string))]
public class ReturnValue
{
    [DataMember]
    public object Value { get; set; }
}

также для меня работало следующее

/ping/12?someObj='{"path":"dsadsadas","als":"dsadsadasdsadasdasdsa"}'

тоже самое и с обжектом работает

[OperationContract]
        [WebInvoke(Method = "GET", 
            RequestFormat = WebMessageFormat.Json, 
            BodyStyle = WebMessageBodyStyle.Wrapped,
            ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "/ping/{s}?someObj={SomeData}")]
            [return: MessageParameter(Name = "data")]
        public dynamic  Pong(string s, dynamic SomeData) {
            return JsonConvert.DeserializeObject(SomeData);
        }

 

параметр ввиде объекта определенного типа не принимает , не смог нагуглить почему, пишет , что 

>Операция &quot;Pong&quot; в контракте &quot;WebService1C&quot; содержит переменную запроса с именем

        &quot;SomeData&quot; и типом &quot;Terrasoft.Configuration.SomeType&quot;, но тип

        &quot;Terrasoft.Configuration.SomeType&quot; не является преобразуемым посредством

        &quot;QueryStringConverter&quot;. Переменные для переменных запроса UriTemplate должны иметь типы, которые могут

        преобразовываться при помощи &quot;QueryStringConverter&quot;.

Вероятно тут дело в самой сути GET POST запросов. Если вариант предложенный Дмитрием не сработает, то тут останется только использовать POST запрос.

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

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

Ищу разработчика Creatio для создания интеграции с сторонним сервисом https://api.textback.io

ТЗ пришлю 

Нравится

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

Максим, добрый вечер!

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

Напишите  на s@baso-it.ru свои контакты для обсуждения нюансов.

Еще актуально

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

Доброго времени суток, коллеги.

Возможно ли из TerrasoftCRM 3.x дергать внешний Rest Api?

Нравится

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

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

Благодарю.

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

Добрый день.

Необходимо написать процесс, который передаёт по REST https://ТЕСТОВЫЙСАЙТ?secret=MasterYoba&IncidentID=" IncidentID "&time=" + milliseconds;

Где IncidentID это номер или id обращения. 

https://i.imgur.com/5IjS2yz.png

И получить ответ ОК. Никак не могу найти как можно с элемента читать данные передать в веб-сервис параметры. 

Нравится

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

Добрый день.

 

А зачем Вам вычитывать Id, если Вы его передаете параметром в БП?

 

Например, если Вы хотите, чтобы Ваш процесс срабатывал по сигналу изменения обращения, то Id записи Вам также вычитывать не нужно, так как оно передается в сигнал.

 

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

Добрый день.

 

А зачем Вам вычитывать Id, если Вы его передаете параметром в БП?

 

Например, если Вы хотите, чтобы Ваш процесс срабатывал по сигналу изменения обращения, то Id записи Вам также вычитывать не нужно, так как оно передается в сигнал.

 

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

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

В академии описано как другие системы могут в bpm'online ложить данные, изменять и удалять. А как можно что бы bpm'online делала это в другою систему по api?

Суть в том что нужно сделать интеграцию двустороннюю что бы другая система ложила и модифицировала донные в bpm'online, и сама bpm'online так же ложила по событию данные в другую систему и модифицировала их по api

Нравится

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

Добрый день!

А что за система на другой стороне? Для многих случаев бывают уже готовые решения на маркет-плейсе.

Ну так и разработайте web-сервис который будет принимать данные от сторонней системы и отдавать данные в неё. А в рамках БП отправляйте данные в свою систему.

Добрый день!

А что за система на другой стороне? Для многих случаев бывают уже готовые решения на маркет-плейсе.

Тёскин Дмитрий Валерьевич,

Там система для билинга, в маркете нет такого

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

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

я совсем забыл про графический способ подключения к api из bpm'online. Спасибо

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

Добрый день.
Решил разобраться с DataService(https://academy.terrasoft.ua/documents/technic-sdk/7-8-0/veb-sluzhba-dat...), пробую сделать выборку с бд, например передать номер телефона, и получить ФИО контакта, или наоборот передать ФИО/ID и получить все его номера.
Не получилось.

На SDK все как-то очень не ясно и запутано, и нет примера нормального json запроса.
Есть ли у кого нормальные(простые) примеры json body?
Может кто смог бы написать запрос по тексту выше?
Использую обыкновенные REST клиенты(из хрома и фаерфокса).
Буду очень благодарен.

Нравится

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

Неужели никто не знает как работать с DataService(

Здравствуйте.
Попробуйте смоделировать ситуацию и посмотреть запрос, например, при помощи fiddler. Пример прикрепил.

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

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

На википедии написано:
Bpm'online has been developed using Microsoft .Net architecture in combination with AJAX and HTML. Combined with RESTful APIs, it provides developers with a well-constructed SaaS architecture.

Есть ли где-нибудь задокументированный REST API? Всё, что я смог с большим трудом найти, это вот эта страница:
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/RequestAuth...

Нравится

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

Здравствуйте!
Система поддерживает интеграцию через Odata.
Детальнее можно прочитать тут: http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/Integratio…
Это в той же ветке, что и ваша ссылка. Вот ссылка на корень ветки, посвященной интеграциям: http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/Integratio…

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

Не поверите :) Сейчас как раз в процессе перевода на новый движок. Планируем за 1,5-2 мес обновиться. Так что релиз 7.8 будет с новой Академией.

Кстати, если есть еще пожелания по Академии - тут их тоже можно писать.

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

Актальная документация доступна по ссылке https://academy.terrasoft.ru/documents/technic-sdk/7-12/integraciya-s-s…

Из этой документации абсолютно непонятно каким образом делать добавление заказа? какой использовать SchemaRoot? Какие поля передавать? Хотелось бы получить ответы на эти вопросы.

Это не «документация по добавлению заказа», а информация для разработчиков по разработке интеграции с другими системами. Названия таблиц и их полей можно увидеть в разделе «Конфигурация», открыв нужную схему. Заказы хранятся в таблице «Order».

Как делать вставку записи в таблицу, описано тут на примере контактов.

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

Добрый день уважаемые коллеги!

Приглашаю Вас посетить вторую часть тренинга по технологии Windows Communication Foundation, который состоится в субботу 13 августа.

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

Вспомним принципы SOA архитектуры. Напомним, из каких частей состоит типовой WCF сервис. Каких типов бывают контракты. Чем отличается контракт данных от контракта сообщения. Что такое конечная точка. Какие бывают привязки и за что они отвечают помимо выбора протокола передачи сообщений. Что такое поведение сервиса и чем оно отличается от поведения конечной точки. Что такое жизненный цикл экземпляра сервиса и как им управлять.

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

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

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

Поговорим о новых фичах появившихся с выходом WCF 4.0. Рассмотрим возможности Routing-a. Как его использовать, что бы пользователь думал, что он работает с одним сервисом, который содержит 20 методов, а не с 4мя сервисам по 5 методов (как на самом деле). Как routing может помочь с реализацией отказоустойчивой системы. Какие требования предоставляются к сервису для расширяемости.

Второй перерыв на кофе будет тоже не лишним.

После кофе вы уже будете убеждены, что WCF сервисы позволяют строить большие, отказоустойчивые, расширяемые распределенные системы. Но при этом подходов к построению WCF сервисов как минимум два – SOAP и REST.

Мы постоянно общались в рамках SOAP подхода. В заключительной части встречи, я хочу поговорить о втором подходе – REST. Мы узнаем, чем эти два подхода отличаются. Обсудим достоинства и недостатки каждого из них. Посмотрим как реализовать REST сервис. Покажу, каким образом оба подхода могут уживаться в одном сервисе. Также рассмотрим технологию WCF Data Services (ранее ADO.NET Data Services), которая основана на REST подходе, позволяющую легко реализовать протокол OData.


Резюме

  • Если вы пропустили первую часть тренинга, ничего страшного мы почти все повторим :)
  • Вторая часть будет просто переполнена примерами кода и практическими заданиями, так что если есть ноутбук (c VisualStudio 2010 и NET 4.0) лучше взять с собой, т.к. по опыту прошлого тренинга машин на всех может не хватить.
  • Будет два перерыва для чая, кофе, печенюшек и общения :)

Основные темы тренинга: Основы WCF (бегло по первой части); Авторизация; Custom behaviors; Routing, Protocol Bridging; SOAP vs REST; WCF Data Services (OData)

Нравится

Поделиться

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

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

"Симоненко Влад" написал:Только для программистов? Интересно, но боюсь, что человеку, довольно поверхностно знакомому с программированием, данный материал будет не понятен.

Для понимания материала необходимы базовые знания ООП и языка С#. Также будет крайне полезно уметь работать в Visual Studio.

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

"Венжик Игорь" написал:
#2 Венжик Игорь 4 августа 2011 – 14:15
Симоненко Влад пишет:
Только для программистов? Интересно, но боюсь, что человеку, довольно поверхностно знакомому с программированием, данный материал будет не понятен.
Для понимания материала необходимы базовые знания ООП и языка С#. Также будет крайне полезно уметь работать в Visual Studio.

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


Как деликатно положительно ответил на вопрос :)

Список полезных ссылок для освоения технологии:

Основные положения системы обмена сообщениями WCF

Источник http://msdn.microsoft.com/ru-ru/magazine/cc163447.aspx#S6

Introducing Windows Communication Foundation in .NET Framework 4

Источник http://msdn.microsoft.com/en-us/library/ee958158.aspx

Подробные сведения о возможностях WCF

Источник http://msdn.microsoft.com/ru-ru/library/ms733103.aspx

Announcement and discovery in WCF 4

Источник http://www.freddes.se/2010/05/16/announcement-and-discovery-in-wcf-4/

RESTful Web services: The basics

Источник https://www.ibm.com/developerworks/webservices/library/ws-restful/

What's New in Windows Communication Foundation

Источник http://msdn.microsoft.com/en-us/library/dd456789.aspx

WCF Feature Details

Источник http://msdn.microsoft.com/en-us/library/ms733103.aspx

Oбщие сведения о службах WCF Data Services

Источник http://msdn.microsoft.com/ru-ru/library/cc668794.aspx

Перехватчики (службы WCF Data Services)

Источник http://msdn.microsoft.com/ru-ru/library/dd744842.aspx

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