Всем привет. 

Пытаюсь выполнить простой запрос на добавление контакта через Odata 4.

Если в header проставить флаг ForceUseSession = true, то запрос возвращается с 500 ошибкой

 

{"error":{"code":"","message":"An error has occurred.","innererror":{"message":"Object reference not set to an instance of an object.","type":"System.NullReferenceException","stacktrace":"   at Terrasoft.Web.OData.Filters.ODataAuthorizationFilterHelper.GetCanPortalUsersUseOdata(UserConnection userConnection)\r\n   at Terrasoft.Web.OData.Filters.ODataAuthorizationFilterHelper.GetCanUserUseODataService(UserConnection userConnection)\r\n   at Terrasoft.Web.OData.Filters.ODataAuthorizationFilterHelper.GetIsRequestAuthorized(Func`1 getUserConnection, Type controllerType, IDictionary`2 routeValues, Boolean isGetMethod)\r\n   at Terrasoft.WebApp.Filters.ODataAuthorizeFilter.OnAuthorization(HttpActionContext actionContext)\r\n   at System.Web.Http.Filters.AuthorizationFilterAttribute.OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()"}}}

Если флаг убрать, то все сохраняется.



Пробовал на разных версиях (7.16.0, 7.16.4, 7.18.5, 8.0.10), на некоторых работает и с флагом, на других нет. Например в 7.16.0 работает, а 7.16.4 нет. Подозреваю, что существует какая-то настройка или что-то в этом роде.

Все запросы от Supervisor делаю.

Может кто-то поможет мне, как избавиться от ошибки? 

Нравится

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

Добрый день!

Данная проблема наблюдалась в старых версиях особенно при использовании Odata4 с хедером ForceUseSession: true вместе с Feature-EnableOAuth20Integration = true. Эта ошибка была исправлена в релизных версиях. Именно по этой причине мы рекомендуем использовать последнюю версию продукта.

Kyrylo Atamanenko,

Попробовал Feature-EnableOAuth20Integration поставить и true и false, ничего не поменялось(

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

Есть способ удалить контакт через OData использую api:

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

Т.к. у контакта есть связь с другими сущностями, то контакт не удаляется. При удалении контакта, открывается форма, в которй предлагается удалить запись используя - Do not delete connected records, запись удаляется. Возможно ли использовать этот функционал в api, может добавить какой параметр в запрос надо?

Нравится

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

Изображение не дошло, использую Postman:

DELETE - {{creatio_base_url}}/0/odata/Contact/3a074f61-7e3f-e8dd-87e8-0f65722d0875

Ошибка:

{

    "error": {

        "code": "",

        "message": "An error has occurred."

    }

}

Добрый день, Владимир.

 

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

 

Обратите внимание, что данные настройки будут распространяться не только при удалении записи через OData, но и при удалении записи через интерфейс пользователя в Creatio CRM.

 

Детальнее об этих настройках можно найти в этой статье на Академии:

 

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

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

Нравится

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

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

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

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

 

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

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

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

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

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

В рамках интеграции C#-приложения (.Net 5.0) с Creatio (7.15.4) пытаюсь настроить создание сущности "Обращение" ("Case") с помощью протокола OData 4 и через передачу параметров. Сущность создается ,но часть из переданных параметров игнорируется, хотя  GUID указан верный.

Пример POST запроса из Postman и ответа от сервиса (значение для CgrCommunicationTypeId установлено некорректное)

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

 

Возможно кто-то сталкивался с подобной проблемой и знает куда копать, буду благодарен за любую помощь. Поиск не помог :(

Нравится

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

Здравствуйте, попробуйте на уровне интерфейса или БД изменить/установить значение колонки.

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

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

Приветствую. Как в запросе Odata вывести тип поля. Делаю расширение поля через $expand и требуется в секции $select вывести тип этого значения. Такое возможно?

Нравится

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

Роман, в данной статье ( https://academy.terrasoft.ru/docs/developer/integrations_and_api/data_s… ) , в разделе "Заголовки запроса" есть информация которая будет вам полезна.

Роман, в данной статье ( https://academy.terrasoft.ru/docs/developer/integrations_and_api/data_s… ) , в разделе "Заголовки запроса" есть информация которая будет вам полезна.

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

Добрый день. При обращении к API по url /0/ServiceModel/EntityDataService.svc/$metadata или другим url. Выдает ошибку Internal Server Error. Unable to find property 'ITdsToday' on type 'Terrasoft.Configuration.Case'. Please make sure that the property name is correct.

Может кто подсказать в чем проблема и куда копать?

Нравится

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

Добрый день.



Уточните следующею информацию:

1) Тело запроса

2) Скрин настроек колонки ITdsToday в объекте Case.

3) Какие другие url возвращают такую ошибку?



 

Mykhailo Storozhuk,

1)В тело пустое кидаем.

2)В БД есть столбец, но в конфигураторе у пакета Case в объекте Case нет такого св-ва.

3)Например /0/ServiceModel/EntityDataService.svc/CaseCollection или /0/ServiceModel/EntityDataService.svc/ContactCollection 

Необходимо выполнить полную компиляцию приложения (на время выполнения действия рекомендуем приостановить работу с приложением).



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

Mykhailo Storozhuk,

Запустили компиляцию, выдает Внутренняя ошибка компилятора (код ошибки: 1) В чем может быть причина?

Уточните версию приложения. 

Mykhailo Storozhuk,

Service Creatio Enterprise 7.12.2

Dmitriy Doronin,



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

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

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

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

ТЗ пришлю 

Нравится

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

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

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

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

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

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

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



Есть объект и для него sql запрос. Доступ к коллекции объекта осуществляется через EntityDataService.svc. 

Одно из полей множественное, для такого поля в sql запросе сделана реализация через 

FOR XML PATH ('Goal'), TYPE

Но при запросе коллекции скобки xml тэгов заменяются их кодовыми значениями. 

<d:AccountLoginQualifiedGoal>&lt;Goal id="9857A30F-3F69-4D07-ADC8-02A61D686C82"&gt;&lt;Name&gt;ЦЕЛЬ№1&lt;/Name&gt;&lt;/Goal&gt;&lt;Goal id="187B496F-B7C5-449A-BDE6-7D07D28296DB"&gt;&lt;Name&gt;ЦЕЛЬ№2&lt;/Name&gt;&lt;/Goal&gt;</d:AccountLoginQualifiedGoal>

Можно ли как-то этого избежать и выводить просто как скобки? Чтобы было вот так.

 <d:AccountLoginQualifiedGoal><Goal id="9857A30F-3F69-4D07-ADC8-02A61D686C82"></Goal><Name>Цель№1</Name></Goal><Goal id="5985A03D-0162-4F02-AA64-BDFCFAC93B49"><Name>Ничего из этого</Name></Goal><Goal id="71EBF4E1-B344-490D-94D9-C67EC77206A9"><Name>Встречи</Name></Goal><Goal id="F6CA356F-635D-4C96-B1E6-D0409172F26E"><Name>Цель№2</Name></Goal></d:AccountLoginQualifiedGoal>

 

Нравится

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

Добрый день. 

Правильно ли я понимаю, что Вы получаете ответ от сервиса EntityDataService.svc в виде : 

 

&lt;d:AccountLoginQualifiedGoal&gt;&amp;lt;Goal id="9857A30F-3F69-4D07-ADC8-02A61D686C82"&amp;gt;&amp;lt;Name&amp;gt;ЦЕЛЬ№1&amp;lt;/Name&amp;gt;&amp;lt;/Goal&amp;gt;&amp;lt;Goal id="187B496F-B7C5-449A-BDE6-7D07D28296DB"&amp;gt;&amp;lt;Name&amp;gt;ЦЕЛЬ№2&amp;lt;/Name&amp;gt;&amp;lt;/Goal&amp;gt;&lt;/d:AccountLoginQualifiedGoal&gt;

 

Mykhailo Storozhuk,

Да, все верно.

Данное поведения полностью корректное. Данную сериализацию делает базовая функциональность .net framework, именно System.Data.Services.DataService. Это нужно для того, что бы не нарушить основной xml.



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



 

Mykhailo Storozhuk, 

Хорошо, спасибо!

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

Всем привет

https://{server}/0/odata/$metadata

через Postman такой запрос возвращает metadata всех таблиц, а интересует metadata определённой таблицы, скажем Contact. 

Возможно ли как-то получить такие данные?

Спасибо.

Нравится

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

Добрый день!

К сожелению, нет такого запроса, который позволит получить метаданные для конкретной таблицы. Вы можете работать с метаданными, которые вернулись по запросу: https://{server}/0/odata/$metadata 

Дима Вовченко,

Спасибо, жаль что такой возможности нету.

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

Добрый день!



При создании обращений через OData все поля формата data заполняются временем вида 01.01.0001 3:00, как это можно обойти?Изображение удалено.

Нравится

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

Чтобы установить именно пустую дату, можно сделать процесс, который при установке минимальной даты выполняет напрямую Update в базе данных (https://community.terrasoft.ua/questions/pustaya-data-data-null)

Установите в поле объекта в конфигурации значение по умолчанию равное текущей дате. Если после этого будет такая же дата вероятно вы ее посылает в своем запросе в odata посылаете дату как пустую или неопределенную. При запросе в odata самостоятельно посылайте текущее значение даты времени.

Можно еще написать процесс который будет исправлять даты при создании или после создания обращения.

Чтобы установить именно пустую дату, можно сделать процесс, который при установке минимальной даты выполняет напрямую Update в базе данных (https://community.terrasoft.ua/questions/pustaya-data-data-null)

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