Добрый день!

При создании обращений через 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)

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

Добрый день,

 

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

curl --location --request GET 'https://ht-lab.terrasoft.ru/0/odata/Contact(ebd2424b-6aad-422e-9bb4-b93f11d5f0db)' \
--header 'ForceUseSession: true' \

--header 'BPMCSRF: -----' \

--header 'Content-Type: application/json; charset=UTF-8'

В ответе ошибка:

{ "error": { "code": "", "message": "An error has occurred." } }

Запрос на получение списка всех контактов возвращает аналогичную ошибку.

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

Нравится

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

Владимир, попробуйте опубликовать объект «Контакт» в конфигурации. Если этого будет недостаточно, нужно будет смотреть в логах сайта подробности ошибки.

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

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

Вадим, при добавлении/изменении объектов нужно публиковать для каждого именно его схему, чтобы отработало обновление структуры таблицы в БД, создались новые поля. Для других типов компилируемых схем (БП, действия, в 5.Х-интерфейсе были и страницы) это уже не обязательно, достаточно, чтобы опубликовалась любая.

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

При обращении к обьекту UsrBonus(https://0937113-pharm-zakaz.terrasoft.ru/0/odata/UsrBonus?$top=10) получаем ошибку 

{"error":{"code":"","message":"An error has occurred."}}

Подскажите, в чем может быть причина ошибки?

Нравится

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

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

Может, после доработок не опубликовали схему объекта UsrBonus?

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

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

Добрый день!

Планирую интеграцию одного приложения с Creatio CRM через внешний API на OData4.
Читаю документацию, и вижу, что любую сущность можно получить через отдельный запрос. Но изначально система не знает какие сущности могут быть в системе, и чтобы получить их список нужно выполнить SQL-запрос (по инстркуции):
 

для MySQL
SELECT * FROM INFORMATION_SCHEMA.TABLES
для Oracle
SELECT * FROM ALL_TABLES
для PostgreSQL
SELECT table_name FROM information_schema.tables

 

У меня есть только данные для авторизации юзера через OData4, и этот запрос мне никак не выполнить.

Есть ли какой-то способ через внешний API получить список всех таблиц?

Нравится

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

Павел, можно ещё

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

Так будет результат в  JSON.

 

Либо воспользоваться информацией из таблицы SysSchema, которая тоже доступна по OData. За объекты отвечает EntitySchemaManager, получить список можно с таким фильтром:

https://{server}/0/odata/SysSchema?$filter=ManagerName%20eq%20%27EntitySchemaManager%27

А вариант с выбором из базы не очень подходит, поскольку зависит от платформы, плюс не все таблицы в базе связаны с объектами конфигурации и могут быть доступны по OData. И наоборот, часть объектов сделаны не на основе table, а по view.

Нашел сам

Запрос на 

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

возвращает внутри <Schema Namespace="Terrasoft.Configuration.OData" xmlns="http://docs.oasis-open.org/odata/ns/edm"> все сущности

Павел, можно ещё

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

Так будет результат в  JSON.

 

Либо воспользоваться информацией из таблицы SysSchema, которая тоже доступна по OData. За объекты отвечает EntitySchemaManager, получить список можно с таким фильтром:

https://{server}/0/odata/SysSchema?$filter=ManagerName%20eq%20%27EntitySchemaManager%27

А вариант с выбором из базы не очень подходит, поскольку зависит от платформы, плюс не все таблицы в базе связаны с объектами конфигурации и могут быть доступны по OData. И наоборот, часть объектов сделаны не на основе table, а по view.

Зверев Александр, Спасибо! А метадату конкретной сущности как получить? 
Требуется узнать какие поля у модели.

В https://{server}/0/odata/$metadata всё есть.

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

Добрый день! Пытался обновить версию OData по инструкции:

https://academy.terrasoft.ru/documents/technic-sdk/7-16/integraciya-s-creatio-po-protokolu-odata-4?_ga=2.183260710.1232967641.1598249864-1095365786.1598249864

 

Добавил в Web.Config, который находится в корневой папке в блок <appSettings>

строку:

<add key="Feature-UseODataV4" value="true" />

Сохранил файл конфигурации.

Следующий запрос через Postman для проверки возвращает статус 404: 

http://myapp/0/odata/Employee?$filter=FullJobTitle eq 'Developer' and Account/Name ne 'Our company'

 

В то же время запрос для версии OData 3 возвращает статус 200:

http://myapp/0/ServiceModel/EntityDataService.svc/EmployeeCollection?$f… eq 'Developer' and Account/Name ne 'Our company'

 

Полная компиляция, очистка редис и перезапуск приложения в IIS не помогло.

Версия продукта 7.15.0.634

Нравится

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

Никита, нужно добавить не во внешний, а во внутренний Web.Config, который в папке Terrasoft.WebApp.

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

Доброго дня, имеется 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.

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

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

 

Недавно вышло обновление к Creatio, где расширили функционал oData, а точнее добавили действие upsert, я хотел бы узнать, как правильно генерировать данный запрос?

Я работаю через postman.

 

Заранее спасибо!

Нравится

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

Михаил, для того, чтобы сделать upsert, нужно выполнить patch-запрос с указанием id в списке полей. Раньше если записи не было, возвращало ошибку, сейчас производится вставка. А если есть, то и раньше, и сейчас — изменение. Готовых именно таких примеров нет, о patch есть в справочнике по API.

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

Добрый день!

Необходимо получить список обращений с фильтрацией по колонке Status. Но поскольку это поле не заполнено, беру колонку StatusId в которой указаны справочные ID статусов обращения.

Отправляю запрос в следующем виде:

https://mysite/0/odata/Case?$filter=StatusId eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

получаю ответ:

{
    "error": {
        "code": "",
        "message": "The query specified in the URI is not valid. Unrecognized 'Edm.String' literal 'guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'' at '12' in 'StatusId eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38''."
    }
}

 

Какие комбинации я только не пробовал:

https://mysite/0/odata/Case?$filter=StatusId/Id eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

https://mysite/0/odata/Case?$filter=StatusId eq guid'7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

https://mysite/0/odata/Case?$filter=StatusId eq '7e9f1204-f46b-1410-fb9a-0050ba5d6c38'

и т.д. - результат один и тот же - ошибка 400

 

При этом если я делаю запрос по колонке с данными типа string - запрос отрабатывает корректно и возвращает ответ 200, например так:

https://mysite/0/odata/Case?$filter=Number eq 'SR00000262'

 

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

Нравится

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

Должно работать так:

https://mysite/0/odata/Case?$filter=Status/Id eq 7e9f1204-f46b-1410-fb9a-0050ba5d6c38

 

Должно работать так:

https://mysite/0/odata/Case?$filter=Status/Id eq 7e9f1204-f46b-1410-fb9a-0050ba5d6c38

 

Спасибо, теперь ответ приходит корректный.

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

Добрый день!

Отправляю к сервису OData PATCH-запрос и он падает с 404 ошибкой. При этом GET запрос отрабатывает и возвращает необходимые данные. Может кто-нибудь подсказать, что делать в данной ситуации?

Нравится

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

Без примеров запросов и ответов на них сложно сказать. Возможно, PATCH идёт к другому адресу или составлен неправильно.

 

Описание формата запросов, в том числе и PATCH, для OData 3 и OData 4 есть в академии.

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

Добрый день.

 

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

{
"Message":"There was an error processing the request.",
"StackTrace":"",
"ExceptionType":""
}

 

Подскажите, кто-нибудь сталкивался с подобным?

Нравится

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

401 — это Unauthorized:

для доступа к запрашиваемому ресурсу требуется аутентификация. В заголовке ответ должен содержать поле WWW-Authenticate с перечнем условий аутентификации. Иными словами, для доступа к запрашиваемому ресурсу клиент должен представиться, послав запрос, включив при этом в заголовок сообщения поле Authorization с требуемыми для аутентификации данными. Если запрос уже включает данные для авторизации, ответ 401 означает, что в авторизации с ними отказано.

Значит, перед работой с OData не обратились к AuthService.svc, либо обратились, но в дальнейших запросах не передали все полученные куки, либо отвалилось по давности.

Также см. более подробную статью, как правильно производить аутентификацию. Возможно, забыли о заголовке ForceUseSession: true.

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