Добрый день!

Отправляю к сервису 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.

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

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

Например, я хочу получить только клиентов своего дистрибьютора. Отправляю вот такой запрос:

http://crm.shymkentpivo.kz:82/0/ServiceModel/EntityDataService.svc/Acco… eq guid'e63ac989-9760-4453-b45f-943e906447e8'

Но в ответ мне приходит выборка из клиентов не только моего дистрибьютора.

Нравится

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

Добрый день!
В первом запросе у вас ошибка перед словом filter: должен использоваться знак $ вместо &

Также я делаю запрос

http://crm.shymkentpivo.kz:82/0/ServiceModel/EntityDataService.svc/Docu… eq guid'e63ac989-9760-4453-b45f-943e906447e8'

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

Тестирую запросы в Postman

Добрый день!
В первом запросе у вас ошибка перед словом filter: должен использоваться знак $ вместо &

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

Получаю записи о счетах по ссылке:

https://<address>/0/ServiceModel/EntityDataService.svc/InvoiceCollection

В ответ приходит xml содержащий ссылки на xml с различной информацией. Меня интересует информация о продуктах счета. Для этого перехожу по ссылке:

https://<address>/0/ServiceModel/EntityDataService.svc/InvoiceCollection(guid'00000000-0000-0000-0000-000000000000')/InvoiceProductCollectionByInvoice

Но в ответ получаю xml с ошибкой: Method 'SelectMany' not supported

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

Так же интересует как получить информацию о кол-ве продуктов в счете.

Нравится

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

Добрый день!
Про фильтрацию:

https://<адрес>/0/ServiceModel/EntityDataService.svc/InvoiceProductCollection?$filter=Invoice/Id eq guid'7e78ff39-ded1-416d-995a-71cef69387e8'

 

Добрый день!
Про фильтрацию:

https://<адрес>/0/ServiceModel/EntityDataService.svc/InvoiceProductCollection?$filter=Invoice/Id eq guid'7e78ff39-ded1-416d-995a-71cef69387e8'

 

Сидоров Александр В.,

Большое спасибо, вроде бы работает!)

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

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

У нас 1с через Odata передает данные о заказе, включая поле Дата (Date)
На сервере часовой пояс киевский, у супервизора тоже киевский, в bpm в системной настройке киевский.

1-ка забирает дату и нормально себе записывает, но когда передает обратно заказ при изменении, дата записывается в бпм и пользователь видит дату + 3 часа сверху.

Знаю, что время в bpm хранится в UTC и когда из 1с приходит дата она записывается в это поле и пользователь видет + 3 часа.

Например создал заказ в бпм. Дата 9 утра. (если sql запрос сделать в базу) там 6 утра. Все ок, пользователь видит 9. Ушло в 1с, там заказ провели и возвращают в бпм. Уходит из 1с тоже 9 утра. Пришел в бпм, смотрим запросом в базу, там стало 9 утра, а пользователь видит 12 часов уже, т.е + 3 часа.

Как правильно передать запрос. Пробовали так:
{
    "AccountId": "590eb789-2b6d-4257-838f-917003ffce43",
    "CHOurCompanyId": "3d5d64dd-450f-4d70-a722-ee95caa2a5b3",
    "StatusId": "40de86ee-274d-4098-9b92-9ebdcf83d4fc",
    "CHVATTop": "false",
    "Date": "2019-06-04T12:05:12+TZ",
    "Number": "УТХ00013754",
    "Amount": "391",
    "OpId1C": "41d319dd-86a4-11e9-8102-e36315b16de3"

выдает ошибку - Cannot convert a primitive value to the expected type 'Edm.DateTime'. See the inner exception for more details.

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

Нравится

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

«+TZ» — это не прямо так нужно писать, а указать нужный пояс. Например,«2018-01-31T08:24:49+03:00». Подробнее по работе с датой см. в этой теме.

Ок, сделали так зашло правильно, а когда мы на зимнее время перейдем, время будет правильно по прежнему?

Википедия гласит:

Следует помнить, что время по UTC не переводится ни зимой, ни летом. Поэтому для тех мест, где есть переход на летнее время, меняется смещение относительно UTC.

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

т.е в запрос при переходе на зимнее надо менять с +03:00 на +02:00?
если да, то как можно настроить передачу черед одата, чтобы время автоматически всегда правильно отображалось?

Можно на стороне 1С перед передачей даты вычислять текущее значение смещения.

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

При создании лида по OData пришит ответ 412 "Не совместимы тип". Доступ на обьект дан, при запросы на получения данных но ID лида ответ приходит

 

Нравится

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

Александр Тыра,

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

Добрый день!
Убедитесь, что ожидается запрос в Json. Т.е. в заголовках есть: Content-Type:application/json;odata=verbose

Сидоров Александр В., отправляю и принимаю json, ответ такой же - 415

Александр Тыра,

Попробуйте именно 

Content-Type:application/json;odata=verbose

Сидоров Александр В., Прошло, формат приляно, но теперь ругается на ключ в таблице "Города". При этом Id верный, скопировал с самой базы

Александр Тыра,

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

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

Доброго дня,

столкнулся с проблемой, прошу вашей помощи.

при попытке обновлении guid("UsrRegistrationStatusId") с помощью odata используя json формат полезной нагрузки получаю ошибку 

"message": "Cannot convert a primitive value to the expected type 'Edm.Guid'. See the inner exception for more details."
"message": "Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)."

 привожу пример

http метод put,

передаваемый json  

{
"UsrRegistrationStatusId":"a9d44061-de29-4578-9df6-d2f226573a06",
"UsrTitle":"myvalue",
"UsrFirstName":"myvalue",
"UsrLastName":"myvalue",
"UsrPreferredEmail":"myvalue@mm.mm",
"UsrDateOfBirth":"2019-04-18T11:14:26.697Z",
"UsrOccupation":"myvalue",
"UsrJobTitle":"myvalue",
"UsrCompanyPersonal":"myvalue",
"UsrComment":"myvalue",
"UsrModifiedOn":"2019-04-18T11:14:26.697Z",
"UsrPassportNumber":"myvalue",
"UsrContactNumber":"myvalue",
"UsrDateOfExpiry":"2019-04-18T11:14:26.697Z",
"UsrNationality":"myvalue",
"UsrGuestTypeId":"myvalue",
"UsrMainGuestId":"myvalue",
"UsrIsAccompanyingPerson":"myvalue",
"UsrFlightsModifiedOn":"2019-04-18T11:14:26.697Z"
}

Возможно ли сформировать поля в json  с определенным типом например Edm.Guid ? Было бы круто если покажите пример с описанием типа данных.

Спасибо за внимание!

 

 

Нравится

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

Привидите полный код формирования запроса с установкой всех служебных заголовков и обратите внимание на примеры для c# 

Представьте Id  Guid в вашем Json как

guid'9d44061-de29-4578-9df6-d2f226573a06'

Спасибо за ответ!

но не помогло  ошибка таже,

urn запроса 0/ServiceModel/EntityDataService.svc/UsrGuestCollection(guid'3b42f755-1f62-4358-878c-47f460ab9e57')
json

{
"UsrRegistrationStatusId":"guid'a9d44061-de29-4578-9df6-d2f226573a06'"
}
полный ответ 

{
  "error": {
    "code": "4",
    "message": {
      "lang": "",
      "value": "An error occurred while processing this request."
    },
    "innererror": {
      "message": "An error occurred while processing this request.",
      "type": "System.Data.Services.DataServiceException",
      "stacktrace": "   at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)\r\n   at System.Data.Services.Serializers.Deserializer.HandlePutRequest()\r\n   at System.Data.Services.DataService`1.HandlePutOperation(RequestDescription description, IDataService dataService)\r\n   at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)\r\n   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)\r\n   at System.Data.Services.DataService`1.HandleRequest()",
      "internalexception": {
        "message": "Cannot convert a primitive value to the expected type 'Edm.Guid'. See the inner exception for more details.",
        "type": "Microsoft.Data.OData.ODataException",
        "stacktrace": "   at Microsoft.Data.OData.Json.ODataJsonReaderUtils.ConvertValue(Object value, IEdmPrimitiveTypeReference primitiveTypeReference, ODataMessageReaderSettings messageReaderSettings, ODataVersion version, Boolean validateNullValue)\r\n   at Microsoft.Data.OData.Json.ODataJsonPropertyAndValueDeserializer.ReadPrimitiveValueImplementation(IEdmPrimitiveTypeReference expectedValueTypeReference, Boolean validateNullValue)\r\n   at Microsoft.Data.OData.Json.ODataJsonPropertyAndValueDeserializer.ReadNonEntityValueImplementation(IEdmTypeReference expectedTypeReference, DuplicatePropertyNamesChecker duplicatePropertyNamesChecker, CollectionWithoutExpectedTypeValidator collectionValidator, Boolean validateNullValue)\r\n   at Microsoft.Data.OData.Json.ODataJsonEntryAndFeedDeserializer.ReadEntryProperty(IODataJsonReaderEntryState entryState, IEdmProperty edmProperty)\r\n   at Microsoft.Data.OData.Json.ODataJsonEntryAndFeedDeserializer.ReadEntryContent(IODataJsonReaderEntryState entryState, IEdmNavigationProperty& navigationProperty)\r\n   at Microsoft.Data.OData.Json.ODataJsonReader.ReadAtEntryStartImplementation()\r\n   at Microsoft.Data.OData.ODataReaderCore.ReadImplementation()\r\n   at Microsoft.Data.OData.ODataReaderCore.InterceptException[T](Func`1 action)\r\n   at System.Data.Services.Serializers.EntityDeserializer.ReadEntry(ODataReader odataReader, SegmentInfo topLevelSegmentInfo)\r\n   at System.Data.Services.Serializers.EntityDeserializer.Read(SegmentInfo segmentInfo)\r\n   at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)",
        "internalexception": {
          "message": "Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).",
          "type": "System.FormatException",
          "stacktrace": "   at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException)\r\n   at System.Guid.TryParseGuidWithDashes(String guidString, GuidResult& result)\r\n   at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)\r\n   at System.Guid..ctor(String g)\r\n   at Microsoft.Data.OData.Json.ODataJsonReaderUtils.ConvertStringValue(String stringValue, Type targetType)\r\n   at Microsoft.Data.OData.Json.ODataJsonReaderUtils.ConvertValue(Object value, IEdmPrimitiveTypeReference primitiveTypeReference, ODataMessageReaderSettings messageReaderSettings, ODataVersion version, Boolean validateNullValue)"
        }
      }
    }
  }
}

Так же обратите внимание, на формирование строка запроса, в примере изменения имени контакта с идентификатором 00000000-0000-0000-0000-000000000000 из коллекции контактов ContactCollection.

// Строка запроса:
// PUT <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection(guid'00000000-0000-0000-0000-000000000000')
// или
// MERGE <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection(guid'00000000-0000-0000-0000-000000000000')

Григорий Чех,

Сейчас выполняется запрос вида 

 PUT <Адрес приложения BPMonline>0/ServiceModel/EntityDataService.svc/UsrGuestCollection(guid'3b42f755-1f62-4358-878c-47f460ab9e57')

А если без двойных кавычек

Json

{
"UsrRegistrationStatusId":guid'a9d44061-de29-4578-9df6-d2f226573a06'
}

Григорий Чех,

Без двойных кавычек сработает ошибка парсинга json 

{
"UsrRegistrationStatusId":guid'a9d44061-de29-4578-9df6-d2f226573a06'
}

 "message": "Invalid JSON. A token was not recognized in the JSON content."

 

В принципе должно быть

{
"UsrRegistrationStatusId":"a9d44061-de29-4578-9df6-d2f226573a06"
}

А если попробовать поменять простое текстовое поле например Name (если оно есть в вашем объекте) запрос корректно отработает?

Григорий Чех,

Да если менять обычное текстовое поле всё проходит успешно.

Были проблемы с типами данных - числами и датой, та же ошибка с преобразованием типов, на дату решилось преобразованием строки к виду "2019-04-18T11:14:26.697Z" , с числом не получается воспроизвести.

{
"UsrRegistrationStatusId":"a9d44061-de29-4578-9df6-d2f226573a06"
}

На такой формат выводит ошибку приведенную во  2 коментарии 

Привидите полный код формирования запроса с установкой всех служебных заголовков и обратите внимание на примеры для c# 

Прошу прощёния, данном формате запрос работает корректно.
{
"UsrRegistrationStatusId":"a9d44061-de29-4578-9df6-d2f226573a06"
}
Извините что ввёл в заблуждение.
Проявилось не сразу.. запросы выполнял в rest api клиенте после перезапуска клиента данный формат успешно обновил запись.

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

Есть и более сложный способ, там не просто голый Guid надо, а с упоминанием названия коллекции, как тут с полом:

{
    Name: 'John',
    BirthDate: new Date(123321123321),
    Gender: {__metadata: { uri: 'GenderCollection(guid\'FC2483F8-65B6-DF11-831A-001D60E938C6\')' }}
}

И в таком случае справочное поле пишется без Id в конце.

Больше примеров в этом обсуждении.

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

Я не могу найти где можно увидеть список файлов к Обращению.
Само обращение отображается по запросу 
***bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseCollection(guid'ae67f3b8-c319-4a59-9d97-f8585f6b3d33')
Но внутри него я не могу найти список прикрепленный файлов.

Вопрос.

Где искать ? 

Нравится

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

Для каждой детали используется свой адрес в OData. Файлы обращения, соответственно, будут: ***bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection/. Там можно посмотреть Id файлов и связи с обращениями. А непосредственно скачивание производить в FileService.

Я правильно понял чтоб мне найти файл который принадлежит к обращению мне нужно считать все файлы которые отдает CaseFileCollection и пройти все skiptoken ? После того как считал найти в них ид моего обращения ? И лишь потом узнать что за файл.  

Нет ли другого метода ? Т.е. сделать какой-то запрос чтоб по ид обращения он выдал мне список файлов которые есть в данном обращении ? 

Конечно, все качать не надо. Можно наложить фильтр по полю связи с обращением. См. примеры тут.

не хватило разума мне понять.
view-source:https://*****.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=Name eq 'WhatsApp Image 2018-01-16 at 14.15.07 (1).jpeg'
По такому запросу ответ отдает верный.

view-source:https://*****.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=CaseId eq guid'829a0b1a-650b-4844-b664-59053f9434ad'
По этому запросу отдает Элемент коллекции с именем CaseId не найден

Что он от меня хочет ? 

CaseFileCollection?$filter=Case/Id eq guid'829a0b1a-650b-4844-b664-59053f9434ad'

 

Спасибо!
Никогда б не догадался. Ниже привожу рабочий пример.
https://*.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=Case/Id eq guid'1f779f3d-60b4-4a2c-a4b4-43e2cf89d8f0'

ссылку выше про  FileService. Я почитал. Но результата опять нет. 
 

http://адрес_сайта/0/rest/FileService/GetFile/e9eafee9-c4e4-4793-ad0a-003bd2c6a9b4/935b6ecb-3509-4c8a-bc7e-03ab0661da24

Тут первый GUID — ID схемы ContactFile (видно в URL, если её открыть в дизайнере), второй — ID записи в таблице.

Я думал что по этому запросу https://*.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=Case/Id eq guid'1f779f3d-60b4-4a2c-a4b4-43e2cf89d8f0'
я узнаю ид файла. Но нет. Ид тут другой. И ID схемы CaseFileCollection Тоже у меня нет.
Вопрос. 
Где я должен получить эти ИД ? 

По ссылке написано всё верно. Первый Id — для схемы CaseFile посмотрите в дизайнере. Второй — Id нужной записи в этой таблице, которую Вы получите по результату CaseFileCollection.

Да, все верно. Я не туда смотрел. Спасибо.

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

Добрый день Уважаемые!

Есть необходимость через веб приложение посредством протокола OData создавать (обновлять) объекты. Проблема в следующем:

После успешной аутентификации через (Supervisor) http://servername/ServiceModel/AuthService.svc/Login и получения необходимых куки отправляю на

http://servername/0/ServiceModel/EntityDataService.svc/AccountCollection

POST запросом  json объект. В приложении использую Apache-HttpClient/4.5.6.

Ответ сервера

<code>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title>403 - Запрещено: Доступ запрещен.</title>
<style type="text/css">
</style>
</head>
<body>
<div id="header"><h1>Ошибка сервера</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>403 - запрещено. Доступ запрещен.</h2>
  <h3>Предоставленные учетные данные не дают права на просмотр этого каталога или страницы.</h3>
 </fieldset></div>
</div>
</body>
</html>

</code>

При этом, если отправлять PUT  запрос на обновление существующего объекта - все работает. GET запросы тоже работают корректно.

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

Заранее благодарен.

 

Нравится

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

Данил, проверь что в запрос добавления данных добавляется параметр BPMCSRF из запроса авторизации

Также должен быть настроен доступ к объекту для внешних сервисов

Wireshark подтвердил наличие всех необходимых куки. Настроил доступ к объекту для внешних сервисов и проверил доступ к операциям OData. Ничего не помогает.

Создал нового пользователя. Под новым пользователем смог получить  (get) данные только после внесения в группу SystemAdministartors. Post запросы - та же ошибка.

Такое может быть, если что-то неправильно в заголовках POST-запроса.

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

 Вручную устанавливаю только:

Content-Type = "application/json"

Accept = "application/json;odata=verbose"

Остальные устанавливаются автоматически при аутентификации. Пробовал двумя способами 1) Apache-HttpClient/4.5.6  и  2) RESTClient браузер Firefox - результат тот же.

Например, не передались обе куки, обычная авторизационная и BPMCSRF.

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

curl запросы

1) Аутентификация внешних запросов к bpm'online, запись куку в файл

curl -i -X POST -H "Content-Type: application/json" -d "{\"UserName\":\"Supervisor\", \"UserPassword\":\"Secret\"}" -c "D:\cookie.txt" "http://myserver.com/ServiceModel/AuthService.svc/Login"

Успешно.

2) Проверка аутентификации и правильности куки - запрос на изменение колонки Name объекста Account. Используем файл куки созданный предыдущим запросом

curl -i -X PUT -H "Content-Type: application/json;odata=verbose" -H "Accept: application/json;odata=verbose" -d "{\"Name\":\"Our company_test\"}" -b "D:\cookie.txt" -c "D:\cookie.txt" "http://myserver.com/0/ServiceModel/EntityDataService.svc/AccountCollection(guid'E308B781-3C5B-4ECB-89EF-5C1ED4DA488E')"

Успешно.

3) Запрос на создание объекта BankAccount

curl -i -X POST -H "Content-Type: application/json" -H "Accept: application/json;odata=verbose" -b "D:\cookie.txt" -c "D:\cookie.txt" -d "{\"Id\":\"8080EDFF-9858-5D90-E053-2413A8C0E8DE\", \"CreatedOn\":\"Jan 29, 2019 9:50:25 AM\", \"CreatedById\":\"410006E1-CA4E-4502-A9EC-E54D922D2C00\", \"BankAccountNumber\":\"123456\"}" "http://myserver.com/0/ServiceModel/EntityDataService.svc/BankAccountCollection"

Ответ - ошибка 403 из вопроса.

Куки из файла

BPMLOADER    acth1svm4chyo1kde1tyhabi

.ASPXAUTH    F87665E30ADF2706A530B217A9EEBD49F7970A16EE377079185607C2675CDEE780E8CEF53C210C88579B063BA610E934AA43B9BC9995684C9BE83B3DCF65DEF3F8396A000BAE95E4EAB56B10C83BAEC684CDCA449499B5B98109C4281A07D3AC55DC9CE553850D8C5F0145C2B5E93661FB1DB3CDFDD5390C7B52955F365F0C86FBAE51F5AE6800B74F59DEB8984F38EFB1FB60EE9571CE7BAC926E838E8D3BDA6EB756270AAF1DD747094A62A68EA6B0E300216C474299FBF7BDD2C5AC86CCBC020BE29D480523ECDEE2F7E15A3E46FA7AD588401C8D37CB25E409975C755B63F5FD49989A5EFBBA3DA95590F325876DB911845D2A81DBE30B98A36CC4BEC373DC1C746C7D8EE7AE62658F60FD013C66A5F67023E0FCE30F15296A1686F9A74D01133441519B3EA7A5A3FBD62BBFC757665AE769CF0260E5E20EB963DD3BD3D9EBB47206A9B9B1B44E8D53048EA12B402290512509EC00733232B9DFEBB7DD2D2643E78A

BPMCSRF    u2jumlmWDoKSYOpQwfgJjO

UserName    83|117|112|101|114|118|105|115|111|114

BPMSESSIONID    4zcngupbd5iwesppbeux5mrr

Это два разных объекта, Account и BankAccount. Возможно, Вы разрешили всё по одному, а пытаетесь добавлять в другой.

Нет, пример с BankAccount привел из-за соображений компактности. Все доступы к объектам для внешних сервисов настроены. Пробовал Account, Contract, BankAccount  и Activity из примера академии(https://academy.terrasoft.ru/documents/technic-sdk/7-13/vypolnenie-zapr…) Результат тот же.

BPMCSRF нужно передавать не только в куках, а и отдельным заголовком. См. статью по отправке запросов из фиддлера.

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

 Спасибо БОЛЬШОЕ! После добавления BPMCSF в хэдэр - все получилось.

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

Шаги воспроизведения:
Сайт клиента:
Версия: 7.12 Service Ent
 
Коллеги, требуется помощь.
По штатному функционалу https://academy.terrasoft.ru/documents/technic-sdk/7-13/rabota-s-obekta….
При добавлении пользователя в коллекцию SysAdminUnitCollection при сохранении вылетает ошибка, хотя при создании, например Контактов - всё ОК:

<?xml version="1.0" encoding="utf-8" standalone="yes"?><error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code>4</code><message xml:lang="">Forbidden</message><innererror><message>Forbidden</message><type>System.Data.Services.DataServiceException</type><stacktrace>   at System.Data.Services.DataServiceConfiguration.CheckResourceRights(ResourceSetWrapper container, EntitySetRights requiredRights)&#xD;
   at System.Data.Services.Serializers.Deserializer.HandlePostRequest()&#xD;
   at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)&#xD;
   at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)&#xD;
   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)&#xD;
   at System.Data.Services.DataService`1.HandleRequest()</stacktrace></innererror></error>

Авторизуюсь в сервисе под Supervisor.
Доступ к операциям и Доступ к объекту для внешних сервисов добавлен для SysAdminUnit на чтение, добавление, удаление, изменение.

Заранее благодарен за помощь.

Нравится

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

В коде веб-сервиса жёстко зашиты права только для чтения, если схема начинается на «Sys» или «VwSys» (с небольшим списком исключений).

Значит, добавление по OData для этой таблицы применять нельзя.

Спасибо за информацию!

Ну и дела!

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