Вопрос

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

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

У меня такой же вопрос

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

Добрый день!

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

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

Добрый день!

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

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

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

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

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

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

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

Реализовал несколько методов, которые используют API BPM. Все отлично работает от имени пользователя Supervisor, но от любого другого пользователя, с аналогичными правами, сервер возвращает error: "Удаленный сервер возвратил ошибку: (401) Несанкционированный."

Помогите понять в чем косяк...

У меня такой же вопрос

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

У пользователя не хватает прав на работу через OData. Где добавить права, см. тут.

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

добавил... не помогло.

Значит, добавили не всюду, где надо. Там несколько пунктов.

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

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

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

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

такая же ошибка с доступом и к разделу "Обращения" - можно предположить, что дело совсем не в кастомном справочнике...

Значит, второй пользователь не совсем администратор, каких-то прав у него нет.

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

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

ничего не помогло...

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

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

В при обращении к другим объектам все работает успешно от пользователей из группы сис. админов.

...к сожалению так и не смог выявить в чем именно проблема.

Перераздайте права на ваш кастомный справочник

например через это приложение

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

Заработало! Дело не в правах.

Пересоздал справочник: на странице редактирования любого раздела (я в контактах делал) создал поле с типом справочник и сохранил схему.

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

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

Доброго дня,

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

при попытке обновлении 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 в конце.

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

Войдите или зарегистрируйтесь, чтобы комментировать
Идея

Всем доброго времени суток.

Было бы замечательным реализовать определение откуда "пришло" действие из СРМ или же осуществили добавление/изменение/удаление через API.
Например некий маркер IsFromAPI = true/false
Это касается интеграции по протоколу OData.

Обсуждение
1 комментарий

А зачем плодить сущности?

Можно добавить в объект обычное логическое поле IsFromAPI и при записи в объект по OData писать туда true.

Можно завести отдельного пользователя только для интеграций и работать по OData под ним. Тогда всё будет видно в полях «создал» и «изменил».

Войдите или зарегистрируйтесь, чтобы комментировать
Идея

Было бы неплохо реализовать функционал удаления сущностей из СРМ и всех связанных с ней  записями через API. Данный функционал был бы актуален в связи с нововведениями GDPR 2018 - https://www.eugdpr.org/key-changes.html
Например из системы которая интегрирована с СРМ удаляется пользователь в срм уходит запрос на удаление Контакта и всех связанных с ним записей 

Обсуждение
4 комментария

Добрый день, Алексей!

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

А не достаточно ли удалить его персональные данные? Или просто обезличить его, не удаляя активности, продажи и прочее, что влияет не только на Privacy, но и на KPI сотрудников, например?

Добавлю, что обычно в случае интеграции предпочтительнее ставить признак "Удален"/"Не актуален", с сохранением данных (естественно кроме персональных в связи с GDPR) + связанных объектов (задачи, заказы и т.д.)

Добрый день. На Marketplace есть партнерское решение по обезличиванию персональных данных, этого достаточно для выполнения обязательство по GDPR. Посмотрите этот пакет: https://marketplace.bpmonline.com/app/gdpr-compliance-toolkit

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

Здравствуйте, если возможность просто воспользоваться api bpm-online из приложения asp.net core?

У меня такой же вопрос

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

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

Такая возможность есть. Вы можете ознакомиться с описанием тут: https://academy.terrasoft.ru/documents/technic-sdk/7-12/integraciya-s-s…

Также, можно выбрать один из следующих вариантов интеграции: https://academy.terrasoft.ru/documents/technic-sdk/7-12/vybor-sposoba-i…

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

Здравствуйте. Как можно загрузить файл через API (odata) и прикрепить его к определенному контакту/лиду/заданию/звонку и тп? Пробовал через модели odata, но выдавало ошибку, что такая модель еще не доступна. Скорее всего, я что-то не так делал. Может кто-то сталкивался с таким вопросом. Буду рад любой помощи. Спасибо.

У меня такой же вопрос

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

как по мне очень похоже на вот это: https://community.terrasoft.ru/questions/realizacia-peredaci-pdf-dokume… 

Там конечно про pdf, но описанные действия вроде подходят для всех типов файлов. 

Спасибо. Сейчас делаю так:

1. POST запрос с привязкой к контакту и задаю название файла.

2. PUT запрос передаю файл.

Но на 2 этапе возникает проблема. Когда я передаю файл через POSTMAN и позже его скачиваю из CRM. Файл не открывается должным образом. Открыв файл через notepad++ и забрав такие заголовки

----------------------------606529554623297003963904
Content-Disposition: form-data; name=""; filename="bcr_scren.png"
Content-Type: image/png

картинка (в данном случае) открывается нормально.

При этом я создал PHP скрипт у себя на сервере для загрузки файлов и передаю точно такие-же параметры и заголовки как и в CRM. Файл загружается без проблем.

Скрин из POSTMANa:

Заголовок запроса такой: Content-Type: multipart/form-data.

Вы используете обычный EntityDataService. Но, судя по ссылке, есть отдельный FileApiService именно для работы с файлами. Примеры работы с ним можно увидеть в самой системе на детали файлов, а уходящие из браузера запросы на сервер посмотреть в Fiddler.

См. примеры тут.

Посмотрите, как работает с файлами через этот сервис интерфейс системы. Готовых примеров решения такой задачи на PHP нет, поскольку bpm'online использует JS на клиенте и С#  на сервере. Следовательно, найти примеры на этих языках шансов намного больше.

Запустил Fiddler, добавил файл на деталь, POST-запросы к сервисам записались нормально. Сначала собственно добавление:

/0/rest/FileApiService/Upload?fileapi15301911041375&totalFileLength=13036&fileId=935b6ecb-3509-4c8a-bc7e-03ab0661da24&mimeType=&columnName=Data&fileName=myfilename.rar&parentColumnName=Contact&parentColumnValue=c4ed336c-3e9b-40fe-8b82-5632476472b4&entitySchemaName=ContactFile

В качестве содержимого запроса — сам файл.

Потом запрос на выборку :

/0/DataService/json/SyncReply/SelectQuery

С содержимым:

{"rootSchemaName":"ContactFile","operationType":0,"filters":{"items":{"primaryColumnFilter":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":1,"functionType":1,"macrosType":34},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":0,"value":"935b6ecb-3509-4c8a-bc7e-03ab0661da24"}}}},"logicalOperation":0,"isEnabled":true,"filterType":6},"columns":{"items":{"Id":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Id"}},"Name":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Name"}},"Type":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Type"}},"Version":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Version"}},"CreatedBy":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"CreatedBy"}},"Notes":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Notes"}},"EntryPointsCount":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":3,"aggregationType":1,"columnPath":"[EntryPoint:EntityId].Id","subFilters":{"items":{"c11b1561-6443-42de-8768-f6db6d774678":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"IsActive"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":true}}}},"logicalOperation":0,"isEnabled":true,"filterType":6}}}}},"isDistinct":false,"rowCount":-1,"rowsOffset":-1,"isPageable":false,"allColumns":false,"useLocalization":true,"useRecordDeactivation":false,"serverESQCacheParameters":{"cacheLevel":0,"cacheGroup":"","cacheItemName":""},"isHierarchical":false}

 

 

 

 

 

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

Так и делаю, шлю POST на URL

https://bookimed.bpmonline.com/0/rest/FileApiService/Upload?fileapi15301911041375&totalFileLength=".filesize($localfile)."&fileId=" . $fileId . "&mimeType=&columnName=Data&fileName=test.png&parentColumnName=Order&parentColumnValue=f106146d-817a-4359-a7a8-a2386c14c7bb&entitySchemaName=OrderFile

А в ответ получаю The server encountered an error processing the request. The exception message is 'Невозможно определить размер файла'

Хотя я передаю totalFileLength в строке запроса - эту ошибку тоже вспоминали тут https://community.terrasoft.ru/questions/fileapiservice-zagruzka-dokume… и но не объяснили как побороть

Видимо, размер реально оказывается не тот или не в том формате. Сравните в Fiddler Ваш и автоматический запросы.

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

 Разобрался! Нужно в хэдере еще указывать

'Content-Range: bytes 0-'.(filesize(realpath($localfile))-1).'/'.filesize(realpath($localfile)),

АПИ уже работает и отвечает ОК

Спасибо за важное уточнение.

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

Собственно, нужно получить некие данные с внешнего API, и потом нарисовать их на странице раздела. Прошу подсказки, в какую сторону смотреть и двигаться. В Академии есть пример с добавлением строки-приветствия. Однако, совсем не понятен принцип работы кода с примера. Документация по Terrasoft Javascript API так же не понятна. Прошу подсказки, куда смотреть и в какую сторону двигаться.

У меня такой же вопрос

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

Если сервер API предоставляет специализированные заголовки CORS то в Вашем распоряжении вся мощь JavaScript в клиентской схеме, делайте запросы (н/п используя инструментарий используемой библиотеки Ext.JS AJAX), обрабатывайте ответы - устанавливайте атрибуты для заполнения полей и т.д.

Если сервер API не предоставляет специализированные заголовки CORS то в данном случае Вам придется писать код C# (Здесь я сильно не подскажу что да как, веб-сервис что-то там такое есть)
После чего можете например по websocket протоколу пробросить события с данными в клиентские карточки (как это сделать обсуждалось вот здесь)

"Севостьянов Илья Сергеевич" написал:Если сервер API не предоставляет специализированные заголовки CORS то в данном случае Вам придется писать код C#

Из js вызываете сервис. В сервисе обычные post/get запросы с помощь System.Web. Получаете ответ от сервера, делаете return, в js-коллбеке проходит ответ в json-строке. Сериализуете, обрабатываете далее как угодно

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

Пытаюсь получить связанную структуру по url

0/ServiceModel/EntityDataService.svc/UsrKinoAndSetyCollection(guid'57be85d8-913f-483e-a349-8bb40b212257')/UsrProductDetailCollectionByUsrKinoteatr

в ответ приходит

{
  "error": {
    "code": "4",
    "message": {
      "lang": "",
      "value": "Not Implemented"
    },
    "innererror": {
      "message": "Not Implemented",
      "type": "System.Data.Services.DataServiceException",
      "stacktrace": "   at System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable)\r\n   at System.Data.Services.DataService`1.SerializeResponseBody(RequestDescription description, IDataService dataService, IODataResponseMessage responseMessage)\r\n   at System.Data.Services.DataService`1.HandleRequest()",
      "internalexception": {
        "message": "Method 'SelectMany' not supported",
        "type": "System.NotSupportedException",
        "stacktrace": "   at Terrasoft.Core.Entities.EntityQueryProvider.VisitMethodCall(MethodCallExpression node)\r\n   at Terrasoft.Core.Entities.EntityQueryProvider.Build(Expression expression)\r\n   at Terrasoft.Core.Entities.EntityQueryProvider.LoadEntityCollection(Expression expression)\r\n   at Terrasoft.Core.Entities.EntityQueryProvider.ExecuteEnumerable(Type elementType, Expression expression)\r\n   at Terrasoft.Core.Entities.EntityQuery`1.GetEnumerator()\r\n   at System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable)"
      }
    }
  }
}

В чем ошибка?

У меня такой же вопрос

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

Здравствуйте, Сергей.

Уточните пожалуйста версию системы.

"Мария Ватулина" написал:

Здравствуйте, Сергей.

Уточните пожалуйста версию системы.


версия 7.10.0.1742

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

Есть сущность кинотеатры и сущность продукты. Кинотеатр может быть связан(пользоваться) с несколькими продуктами. Так же продукт может быть использоваться в нескольких кинотеатрах. Я пытаюсь получить продукты которыми пользуется определенный кинотеатр.

Добрый день, Сергей.

Приведем пример запроса по аналогии (на примере таблиц Активности, Контакты и Участники Активностей).

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

ActivityCollection?$select=Title,StartDate,DueDate&$filter=(ActivityParticipantCollectionByActivity/any(x:%20x/Participant/Id%20eq%20(guid%2724cf58c3-3926-4bff-9353-b8ef887f7b17%27)))
)

дело в том, что ссылка, по которой я пытался сделать запрос, была получена из поля __deferred.uri. вопрос в том, почему ссылка, возвращаемая самим же апи, не работает?

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

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

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

На википедии написано:
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».

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

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