Добрый день.
Необходимо получить выборку из справочника City, где не заполнено поле RegionId
Делаю Get запрос:

Url сайта>/0/ServiceModel/EntityDataService.svc/CityCollection?$filter=Region/Id eq guid'00000000-0000-0000-0000-000000000000'

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

version="1.0" encoding="utf-8"?> xml:base="http:///0/ServiceModel/EntityDataService.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">>http:// сайта>/0/ServiceModel/EntityDataService.svc/CityCollection></span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span><span style="color: #000000; font-weight: bold;">></span></span>CityCollection<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">>>2016-10-31T13:34:09Z> rel="self" title="CityCollection" href="CityCollection" />> />>>

Если подставить в фильтр Id существующего региона, то фильтр отрабатывает корректно.

Как реализовать данный кейс?

Нравится

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

Добрый день!

Реализую возможность добавить информацию о звонке в BPM через OData.

Что я делаю: POST запрос с Content-Type: application/json;odata=verbose;type=entry на https://phonetcomua.bpmonline.com/0/ServiceModel/EntityDataService.svc/CallCollection

JSON имеет такой вид:

{
    "CalledId": "+380990056970",
    "CallerId": "+380990056960",
    "Duration": 400,
    "TalkTime": 299,
    "Direction": {
          "__metadata":{"uri":"??????"}
    },
    "Contact": {
        "__metadata":{"uri":"ContactCollection(guid'97d39836-b242-462a-b375-9daa32e553e4')"}
    }
   
}

Непонятно как указать URI с guid для Direction и Result свойств.

Я знаю возможные значения guid для enum-a CallDirection, но я не знаю как правильно ссылаться на этот объект при добавлении звонка.

Нравится

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

Вопрос снят. Почему то не догадался попробовать CallDirectionCollection.

Почему добавленные через OData звонки не отображаются в разделе Звонки.
Во вкладке История у конктакта краткая информация о звонке отображается.
Если перейти по https://phonetcomua.bpmonline.com/0/Nui/ViewModule.aspx#CardModuleV2/Ca… информация о звонке доступна

"Developer2" написал:Если перейти по https://phonetcomua.bpmonline.com/0/Nui/ViewModule.aspx#CardModuleV2/Cal... информация о звонке доступна

мы как участники сообщества Доступ в базы данных чужих пользователей не имеем. (на доступ мы и ненапрашиваемся :smile: ) Данный доступ есть у вас и я думаю у технической поддержки компании Террасофт. Если у вас есть проблемы, то лучше описывать их более подробно и прикладывать скриншоты.

"Developer2" написал:Почему добавленные через OData звонки не отображаются в разделе Звонки.
Во вкладке История у конктакта краткая информация о звонке отображается.

Сравните записи в базе напрямую, полученную через одата и обычную, разницу и увидите... может типа какого не хватает заполненного
Если ондеманд, поищите тут был sql executer для выполнения запросов

"Александр Кудряшов" написал:Если ондеманд, поищите тут был sql executer для выполнения запросов

Александр подскажи пожалуйста где тут поискать?

"Власов Михаил Викторович" написал:

Александр подскажи пожалуйста где тут поискать?


"sqlexecuterpage" вот тут

"Александр Кудряшов" написал:
Developer2 пишет:

Почему добавленные через OData звонки не отображаются в разделе Звонки.

Во вкладке История у конктакта краткая информация о звонке отображается.

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

Если ондеманд, поищите тут был sql executer для выполнения запросов

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

Разобрался. Все прикреплялось. Я просто на странице не ту вкладку смотрел. Нужно было на Список переключить.

У меня еще один вопрос. На странице https://academy.terrasoft.ua/documents/customer-center/7-8-0/zapis-i-pr… сказано, что можно прослушивать звонки.
Так вот, я пока через интерфейс пробовал добавить ссылку с записью на разговор, она добавляется, но кнопка прослушать не появляется. Возможно какая-то настройка отключена, поскольку в примечании говорится

Возможность прослушать аудиозапись звонка будет доступна при выполнении персональных настроек.

Можете подсказать будет ли работать через ссылку на аудиозапись или это фича только для Oktell и Webitell?

"Developer2" написал:Можете подсказать будет ли работать через ссылку на аудиозапись или это фича только для Oktell и Webitell

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

"Александр Кудряшов" написал:
Developer2 пишет:

Можете подсказать будет ли работать через ссылку на аудиозапись или это фича только для Oktell и Webitell

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

В принципе при наличии ссылки все что нужно это заставить браузер по клику проиграть запись...

При интеграции с Мегапланом именно так и делали. Вставляли ссылку и затем через chrome extension изменяли страницу.

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

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

Подскажите как узнать количество записей попавших под http запрос вида:

https://xxxxxx.bpmonline.com/0/ServiceModel/EntityDataService.svc/ListingCollection?$filter=length(Owner/Name) gt 0
записи у которых заполнено поле ответственный.

Добавление /$count приводит к результату, если нет $filter, т.е. объем всей коллекции.

Максим.

Нравится

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

Добрый день. Скачал триал версию BPMonline. Хочу немного разобраться в структуре.

Например у меня задача изменить объект (какой либо справочник) из внешнего приложения. Отсюда(http://academy.terrasoft.ua/documents/docs/technic/SDK/7.4.0/WorkWithBpm...) я понял что это возможно, через HTTP.

Но непонятен URL к которому нужно отправить запрос. А конкретно, что такое "имя прилоджения"? Где его брать? Нужно ли гдето регистрировать? Может есть более подробная документация по этой теме или примеры?

http[s]://имя_сервера>/имя_приложения_bpm'online>/0/ServiceModel/EntityDataService.svc

Нравится

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

Это всего лишь адрес вашего сайта, вроде https://mycompany.bpmonline.com/0/Nui/ViewModule.aspx#SectionModuleV2/CampaignSectionV2

Имя приложения - это alias application'a вашего сайта в IIS. Обычно application именуют 0, 1, 2... и т.д.

Спасибо. С этим вроде разобрался, через URL в браузере возвращается XML.

Но проблемы с авторизацией теперь, если AJAX запрос делать

var request=newRequest();
var url="https://test.bpmonline.com/0/ServiceModel/EntityDataService.svc";
var param = JSON.stringify({
"UserName":"Иванов Иван",
"UserPassword":"ХХХХХХХХ"
});
request.onreadystatechange=function()
{
if (request.readyState==4) {
if (request.status==200) {
var answer=request.responseText;
alert(answer)
}
else alert('Ошибка '+request.status+" Попробуйте еще раз!");
}
}
request.open("POST", url, true);
request.setRequestHeader("Content-Type", "application/json");
//request.setRequestHeader("Authorization", "Basic " + Base64.encode("Иванов Иван" + ":" + "ХХХХХХХХ"));
request.send(param);

Ответ: 401Unauthorized

Как правильно через AJAX авторизацию запроса сделать? Пробовал и так, и как в коммнте в коде, и прям в URL подставлял логин и пароль.

Михаил, достал для Вас следующие примеры:

Запросы на добавление данных
Для того, чтобы добавить запись, нужно послать серверу POST запрос, указав значения колонок в теле запроса. В качестве ответа придет представление созданной Entity. Ниже создается контакт, ему проставляются значения полей Id, Name, BirthDate, Gender. Данные в обе стороны передаются в формате JSON.
Пример запроса на добавление с использованием API Sencha Touch

var serviceUrl = "http://tscoredev5:88/BPMonline540Solution/0/ServiceModel/EntityDataService.svc/";
Ext.Ajax.request({
    url: serviceUrl + 'ContactCollection',
    headers: {
        'Content-Type': 'application/json',    
        'Accept': 'application/json',
        'Authorization': 'Basic ' + Ext.util.base64.encode('S.Karlo:S.Karlo')
    },
    jsonData: {
        Id: 'C624E607-C6B2-4A3D-9E6D-06E17FAA35C9',
        Name: 'John Best',
        BirthDate: new Date(123321123321),
        Gender: {__metadata: { uri: serviceUrl + 'GenderCollection(guid\'FC2483F8-65B6-DF11-831A-001D60E938C6\')' }}
    },
    method: 'POST'
});

Запросы на обновление данных
Для обновления данных нужно послать HTTP запрос с кастомным OData-специфическим типом операции MERGE. если послать запрос с типом операции PUT, то все колонки Entity, не указанные в запросе будут заполнены своими значениями по-умолчанию.
Пример запроса на обновление с использованием API Sencha Touch

var serviceUrl = "http://tscoredev5:88/BPMonline540Solution/0/ServiceModel/EntityDataService.svc/";
Ext.Ajax.request({
    url: serviceUrl + 'ContactCollection(guid\'5B62E943-155F-42CE-A41A-EFA650BAA0A0\')',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Basic ' + Ext.util.base64.encode('S.Karlo:S.Karlo')
    },
    jsonData: {
        Name: 'John',
        BirthDate: new Date(123321123321),
        Gender: {__metadata: { uri: 'GenderCollection(guid\'FC2483F8-65B6-DF11-831A-001D60E938C6\')' }}
    },
    method: 'MERGE'
});

Запросы на удаление данных
Тут все просто:
Пример запроса на удаление с использованием API Sencha Touch

var serviceUrl = "http://tscoredev5:88/BPMonline540Solution/0/ServiceModel/EntityDataService.svc/";
Ext.Ajax.request({
    url: this.serviceUrl + 'ContactCollection(guid\'C624E607-C6B2-4A3D-9E6D-06E17FAA35C9\')',
    headers: {
        'Authorization': 'Basic ' + Ext.util.base64.encode('S.Karlo:S.Karlo')
    },
    method: 'DELETE'
});

Спасибо заа примеры. Но проблема на данный момент с авторизацией.

Перепробовал уже все что на форуме нашел

1) Тут (http://www.community.terrasoft.ru/forum/topic/10573) описана проблема один в один, но я так понял, не решилась. Имя пользователя, на всякий случай, поменял на латиницу. Права на Операцию - "Доступ к Odata" есть, а вот на доступ к Объекту я не понял, как имнно установить. Но проблема скорее всего не в них.

2) Тут (http://www.community.terrasoft.ru/forum/topic/9613) описан достутп через PHP, а заодно попробовал обратится к серверу авторизации (..ServiceModel/AuthService.svc/Login). Ответ:{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

В чем проблема, не представляю. Может еще какоето разрешение в админке требуется? Или дополнительные параметры авторизации, типа "WorkspaceName", "TimeZoneOffset", "Language"

Насчет прав доступа на объекты:
Вам нужно войти в Дизайнер системы –> Управление конфигурацией –> Конфигурация. В строке поиска ввести заголовок объекта и нажать ‘Enter’. Найти в результатах нужный объект и посмотреть его Название.
Перейти на вкладку «Администрирование: Доступ к объектам», применить фильтр по заголовку и найти нужный объект. Внизу, на вкладке «Доступ к объекту для внешних ресурсов» добавить доступ для сотрудника, под которым вы авторизируетесь.

Если нужно получить коллекцию, например Контактов, то даём права на Contact, а для обращения к коллекции добавляем слово «Collection» = «ContactCollection».

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

Добрый день, кто то может подсказать как залить фото контакта через OData, используя xml или json? Знаю что вопрос поднимался https://community.terrasoft.ru/forum/topic/10486, тему изучил, но так и не смог понять как реализовать подобное не на C#.
Отправляю POST запрос в SysImageCollection, передаю Name = имя_файла и Data = стрим_файла, в ответ получаю ошибку

При обработке этого запроса произошла ошибка.При обработке этого запроса произошла ошибка.System.Data.Services.DataServiceException at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)
 at System.Data.Services.Serializers.Deserializer.HandlePostRequest()
 at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)
 at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)
 at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)
 at System.Data.Services.DataService`1.HandleRequest()Invalid character in the given encoding. Line 6, position 15.System.Xml.XmlException at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
 at System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount)
at System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount)
at System.Xml.XmlTextReaderImpl.ReadData()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at Microsoft.Data.OData.Atom.BufferingXmlReader.ReadInternal(Boolean ignoreInStreamErrors)
at Microsoft.Data.OData.Atom.BufferingXmlReader.ReadNextAndCheckForInStreamError()
at Microsoft.Data.OData.Atom.BufferingXmlReader.ReadInternal(Boolean ignoreInStreamErrors)
at Microsoft.Data.OData.Atom.BufferingXmlReader.Read()
at System.Xml.XmlReader.SkipSubtree()
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.FindTypeName()
at Microsoft.Data.OData.Atom.ODataAtomReader.ReadEntryStart()
at Microsoft.Data.OData.Atom.ODataAtomReader.ReadAtStartImplementation()
at Microsoft.Data.OData.ODataReaderCore.ReadImplementation()
at Microsoft.Data.OData.ODataReaderCore.InterceptException[T](Func`1 action)
at System.Data.Services.Serializers.EntityDeserializer.ReadEntry(ODataReader odataReader, SegmentInfo topLevelSegmentInfo)
at System.Data.Services.Serializers.EntityDeserializer.Read(SegmentInfo segmentInfo)
at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)

Возможно какие то проблемы со стримом, но что именно там не так не могу понять, содержит следующие данные http://goo.gl/5jRcr6.
Поэтому буду признателен если у кого то есть пример реализации при помощи отправки json или xml данных

Нравится

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

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

POST http://mybpmonline:8082/7/ServiceModel/EntityDataService.svc/SysImageCo… HTTP/1.1
Connection: keep-alive
Content-Length: 91
MaxDataServiceVersion: 3.0
Content-Type: application/json;odata=verbose
ForceUseSession: true
Accept: application/json;odata=verbose
DataServiceVersion: 1.0
Accept-Encoding: gzip, deflate
Accept-Language: en-US
X-Requested-With: com.bpmonline.mobile70

{"Name":"640a7878-0637-4d09-b9de-5834fd559998","Id":"640a7878-0637-4d09-b9de-5834fd559998"}

PUT http://mybpmonline:8082/7/ServiceModel/EntityDataService.svc/SysImageCo… HTTP/1.1
Content-Type: multipart/form-data;boundary=+++++
MaxDataServiceVersion: 3.0
ForceUseSession: true
Accept: application/octet-stream,application/json;odata=verbose
Connection: close
Content-Length: 7199
Accept-Encoding: gzip

[ЗДЕСЬ В ТЕЛЕ ЗАПРОСА СОДЕРЖАТСЯ БИНАРНЫЕ ДАННЫЕ]

Спасибо большое, помогло

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

Добрый день!
Возникла проблема с добавлением через OData объектов, а конкретно при создании объекта присвоения им значений в поля которые ссылаются на другие объекты. Текстовые поля заполняются без проблем, а поля с внешними ключами выдают ошибку. На прошлом вебинаре "Разработка BPMOnline 7.5" задавал аналогичный вопрос, обещали выслать пример, но уже три недели прошло, участникам вебинара ничего не выслали. Кто сталкивался с подобной задачей скиньте пример добавления какого нибудь объекта с полем которое ссылается на другой объект, заранее спасибо

Нравится

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

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

Я передаю xml запрос, но в нем не хватает описания для внешних ключей, поэтому и прошу пример

При обработке этого запроса произошла ошибка.При обработке этого запроса произошла ошибка.System.Data.Services.DataServiceException at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)
at System.Data.Services.Serializers.Deserializer.HandlePostRequest()
at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)
at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)
at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)
at System.Data.Services.DataService`1.HandleRequest()В элементе {http://schemas.microsoft.com/ado/2007/08/dataservices/metadata}:properties обнаружено свойство "LeadType" типа "Terrasoft.Configuration.Lead", объявленное как свойство навигации. Свойства навигации в ATOM должны быть представлены элементами {http://www.w3.org/2005/Atom}:link.Microsoft.Data.OData.ODataException at Microsoft.Data.OData.Atom.ODataAtomPropertyAndValueDeserializer.ReadPropertiesImplementation(IEdmStructuredType structuredType, List`1 properties, DuplicatePropertyNamesChecker duplicatePropertyNamesChecker, Boolean epmPresent)
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.ReadAtomContentElement(IODataAtomReaderEntryState entryState)
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.ReadAtomElementInEntry(IODataAtomReaderEntryState entryState)
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.ReadEntryContent(IODataAtomReaderEntryState entryState)
at Microsoft.Data.OData.Atom.ODataAtomReader.ReadAtEntryStartImplementation()
at Microsoft.Data.OData.ODataReaderCore.ReadImplementation()
at Microsoft.Data.OData.ODataReaderCore.InterceptException[T](Func`1 action)
at System.Data.Services.Serializers.EntityDeserializer.ReadEntry(ODataReader odataReader, SegmentInfo topLevelSegmentInfo)
at System.Data.Services.Serializers.EntityDeserializer.Read(SegmentInfo segmentInfo)
at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)

Т.е. внешние ключи (поля содержащие guid других объектов) должны описываться через тег link, как его описать для нового объекта?
Для уже созданных он описывается с guid, но при создании guid'a еще нет

<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/LeadType" type="application/atom+xml;type=entry" title="LeadType" href="LeadCollection(guid'40d83682-7ee5-4f1f-a387-12bb43373b5b')/LeadType" />

Олег, подобный вариант подойдет?

//...
            var content = new XElement(dsmd + "properties",
                          new XElement(ds + "Name", "Тестов Тест Тестович"),
                          new XElement(ds + "Dear", "Тест Тестович"),
                          new XElement(ds + "TypeId", Guid.Parse("806732ee-f36b-1410-a883-16d83cab0980")), // Тип
                          );
            var entry = new XElement(atom + "entry",
                        new XElement(atom + "content",
                        new XAttribute("type", "application/xml"), content));
//...

Дмитрий, к сожалению нет, используя Ваш вариант генерируется xml следующего вида

<entry xmlns="http://www.w3.org/2005/Atom">
  <content type="application/xml">
    <properties xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
      <Name xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Тестов Тест Тестович</Name>
      <Dear xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Тест Тестович</Dear>
      <TypeId xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">806732ee-f36b-1410-a883-16d83cab0980</TypeId>
    </properties>
  </content>
</entry>

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

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

Олег, этот вопрос уже поднимался:
http://www.community.terrasoft.ru/forum/topic/10486

Спасибо, вопрос по добавлению объектов со справочными полями все еще актуален

Олег, для того, чтобы сервер стал возвращать ответ в виде JSON, необходимо добавить http заголовок (Accept: application/json;odata=verbose).
Список рекомендуемых http заголовков:
MaxDataServiceVersion: 3.0
Content-Type: application/json;odata=verbose
DataServiceVersion: 1.0
Accept: application/json;odata=verbose

Далее, пример POST запроса с указанием справочной колонки. Создается запись, которая ссылается на контакта с (Id = 62f1494a-1205-45a4-b211-7ab974df6e7e). Обращаем внимание, что это будет работать только в том случае, если запись справочника уже создана. OData позволяет добавлять запись с указанием справочного значения, которого еще нет. Но такой запрос намного сложнее и ситуации, когда он необходим, довольно ограничены:

{"Id":"de303d33-e3c2-4dbd-905a-f46d220140c8","Name":"Test","Contact":{"__metadata":{"uri":"ContactCollection(guid'62f1494a-1205-45a4-b211-7ab974df6e7e')"}}}

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

Добрый день! Решил освоить интеграцию с bpmonline 7.4 через oData. Взял пример который был на вебинаре по разработке на 7.4 и он не работает.

А конкретнее не работают методы PUT и DELETE. То есть я могу удачно авторизироваться и создать запись. Но вот при попытке удалить или изменить получаю ошибку 405 (Недопустимый метод). Я так полагаю проблема где-то в настройках iis или config файле сайта. Подскажите пожалуйста что нужно настроить.

Нравится

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

Здравствуйте, Вячеслав!
Приведите, пожалуйста, пример кода, который не работает.
Необходимые компоненты сервера можно посмотреть в руководстве по установке, например тут:
http://www.training.terrasoft.ru/sites/default/files/BPMonline_Setup_Gu…

Код полностью взят из примера, который демонстрировался в вебинаре по 7,4.

static void UpdateRecord(string guid)
{
 // Создание экземпляра запроса для изменения контакта с заданным идентификатором.
 var request = HttpWebRequest.Create(serverUri + "ContactCollection(guid'" + guid + "')") as HttpWebRequest;
 request.CookieContainer = bpmCookieContainer;
 // Для изменения записи используется метод PUT.
 request.Method = "PUT";
 request.Accept = "application/atom+xml";
 request.ContentType = "application/atom+xml;type=entry";
 
 // Создание сообщения xml, содержащего данные об изменяемом объекте.
 var content = new XElement(dsmd + "properties", new XElement(ds + "Name", "New"));
 var entry = new XElement(atom + "entry", new XElement(atom + "content", new XAttribute("type", "application/xml"), content));
 
 // Запись сообщения xml в поток запроса.
 using (var writer = XmlWriter.Create(request.GetRequestStream()))
   {
       entry.WriteTo(writer);                
   }
 // Получение ответа от сервиса о результате выполнения операции.
 using (WebResponse response = request.GetResponse())
   {
        Console.WriteLine("Данные контакта с идентификатором " + guid + " успешно обновлены.");
    }
}

Метода PUT не существет. Надо использовать либо GET либо POST

Попробуйте подкорректировать конфигурационный файл (предварительно сохраните копию):
..\Terrasoft.WebApp\Web.config

Необходимо добавить 2 строчки в соответствующие блоки (system.webServer самый нижний):

<remove name="WebDAVModule" />
<remove name="WebDAV" />
  <system.webServer>
    <httpErrors errorMode="Detailed" />
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <remove name="WebDAVModule" />
      <!--...-->
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <!--...-->
    </handlers>
    <!--...-->
  </system.webServer>

"Толмачев Дмитрий Юрьевич" написал:

Необходимо добавить 2 строчки в соответствующие блоки (system.webServer самый нижний):

<remove name="WebDAVModule" />

<remove name="WebDAV" />

Огромное спасибо! Сразу заработало!

"Олейников Владимир Владимирович" написал:

Метода PUT не существет. Надо использовать либо GET либо POST

http://academy.terrasoft.ru/documents/?product=SDK&ver=7.4.1
https://ru.wikipedia.org/wiki/HTTP#.D0.9C.D0.B5.D1.82.D0.BE.D0.B4.D1.8B

Есть ещё вопрос:

Как очистить справочное поле через метод PUT ?
Пробовал передавать Guid.Empty.ToString() выдает ошибку 500. null и пустая строка вызывают ошибку 400.

Поставить новый id - без проблем. А вот очистить не получается.

А через Convert.ToString() ?

Попробуйте так:

    XElement brandElement = new XElement(ds + "SmrBrandId");
    brandElement.SetAttributeValue(dsmd + "null", true);
    var content = new XElement(dsmd + "properties",
            brandElement
    );

Но работает не со всеми полями. По моему зависит от обязательности заполнения и установки значений по умолчанию.

И снова я безмерно благодарен! Всё получилось. Справочное поле стало пустым.

Но появилась другая проблема.
Дело в том, что я пишу интеграцию с сервисом работающем на framework 2.0
Я взял всё тот-же проект из примера выставил в нем framework 2.0
xml сообщение я формирую через XmlDocument тут всё хорошо. Но в этом месте:

using (WebResponse response = request.GetResponse())

Скрипт как-бы зависает. То есть после него совсем ничего не происходит. Никаких ошибок, но и дальше скрипт не выполняется. Просто мертвая точка. И данные в bpm не заносятся.
При чем работает только с framework 4.0. Даже с framework 3.5 не работает.

Если, ничего не меняя в коде, выставить framework 4.0 то всё проходит успешно.

Подскажите, пожалуйста чего не хватает?

Здравствуйте, Вячеслав!
Судя по описанию тут та же проблема:
http://stackoverflow.com/questions/11319891/httpwebrequest-only-running…

Попробуйте посмотреть Fiddler'ом, есть ли разница в запросах.

Fiddler показал что запрос не отправляется в принципе. На авторизацию запрос проходит и удачно, а вот на изменение нет.

Погуглив более тщательно проблема была обнаружена. Дело всё в том что перед выполнение запроса нужно закрывать поток RequestStream. И вот framework 4.0 делает это самостоятельно перед выполнением функции GetResponse, а все фреймворки ниже не умеют этого. Поэтому перед

using (WebResponse response = request.GetResponse())
{
   /*---------*/
}

надо писать: request.GetRequestStream().Close()

И запрос должен выглядеть так:

request.GetRequestStream().Close();
using (WebResponse response = request.GetResponse())
{
   /*---------*/
}

И вот так всё работает.

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

В нашу компанию была куплена BPMonline CRM. Поставили задачу записывать все заявки с сайта в лиды, но после изучения всей документации я запутался что и как. Ткните пожалуйста в правильную сторону. Разработка ведется на PHP.

Нравится

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

"Толмачев Дмитрий Юрьевич" написал:

http://www.community.terrasoft.ru/forum/topic/9613

http://www.community.terrasoft.ru/forum/topic/10573

+ SDK (но там для C#)


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

Как осуществляется связь разобрался, но так и не понял как использоватьвсе доступное sdk и api для добавления лидов

Здравствуйте, Владимир!
Собственно, та часть API bpm'online, которая отвечает за работу с данными, то есть чтение, изменение, добавление и удаление записей в таблицу реализует протокол OData, и представляется веб-сервисом, доступным "снаружи" - EntityDataService.svc. Обращаться к нему можно с помощью авторизованных http-запросов.
OData - стандартизированный протокол, и в bpm'online работа с ним практически не отличается от стандарта, поэтому документацию Вы также можете получить и из других источников, например:
http://wiki.sensenet.com/index.php?title=OData_REST_API
http://blogs.msdn.com/b/brian_swan/archive/2010/03/18/using-the-odata-s…
https://odataphp.codeplex.com/

Единственное, я не могу Вам точно сказать, будет ли прокси-класс для PHP будет корректно генерироваться. Но можете попробовать.
Примеры работы также есть, опять таки на нашем sdk, а также на community, и даже не зная ничего о c# можно примерно разобрать, какие запросы нужно отправить для получения необходимых результатов.

Но для регистрации лидов извне уже есть готовый функционал - Формы для внешних ресурсов. Настройки этих форм доступны из раздела "Лиды". В документации по разделу "Лиды" также есть описание, как работать с ними, более подробно описано в блоке "Синхронизация и импорт из других систем".
Наиболее часто встречающиеся проблемы при настройке формы для внешнего ресурса описаны здесь:
http://www.community.terrasoft.ru/blogs/10378

"Андрей Каспаревич" написал:

Но для регистрации лидов извне уже есть готовый функционал - Формы для внешних ресурсов. Настройки этих форм доступны из раздела "Лиды". В документации по разделу "Лиды" также есть описание, как работать с ними, более подробно описано в блоке "Синхронизация и импорт из других систем".

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

http://www.community.terrasoft.ru/blogs/10378

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки

При попытке сачать код для внешней формы получаю ошибку
ошибка при попытке скачивания кода формы для сайта

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

"Андрей Каспаревич" написал:

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

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


помогло. спасибо. скачать смог. данные отправляются, но в лиды ничего не записывается. предполагаю что данные не записываются, т.к. в CRM есть обязательные поля "Тип потребности" и "Зрелось потребности". При настройке формы таких не было. Влияет ли это?

Здравствуйте, Владимир!
Действительно, это влияет на возможность добавления записей. Обязательность этих полей установлена на уровне объекта, поэтому при создании экземпляра класса объекта, то есть записи, возникнет ошибка.
Необходимо установить значения по умолчанию для этих полей с помощью настроек веб-формы:

"Андрей Каспаревич" написал:

Здравствуйте, Владимир!

Действительно, это влияет на возможность добавления записей. Обязательность этих полей установлена на уровне объекта, поэтому при создании экземпляра класса объекта, то есть записи, возникнет ошибка.

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

Добрый день!

Возникла такая же проблема.

У одного из клиентов для сущностей: Лид, Контакт, Аккаунт имеются обязательные поля.

Соответственно при попытке добавить сущность получаем ошибку: такое то поле является обязательным.

Вопрос: как через OData получить список обязательных полей для сущностей Lead, Contact, Account ?

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

Обратите внимание на статью Queryable OData Metadata

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

При записи бинарных данных POST запросом выдается ошибка

Cannot convert a primitive value to the expected type 'Edm.Stream'. See the inner exception for more details.

Текст xml в запросе:

version="1.0" encoding="UTF-8"?>
xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
                type="application/xml">
                               >
                                               >111>

                                                m:type="Edm.Stream">/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYE
BAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQIC
AgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAz/wAARCAABAAIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9
/KKKKAP/2Q==>
                                               >image/jpeg>
                               >
                >
>

Нравится

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

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

Здравствуйте, Александр.

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

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

Здравствуйте!
Пытаюсь создать сотрудника через Odata из 1С.

Получаю вот такую ошибку:

version="1.0" encoding="utf-8" standalone="yes"?> xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">>4> xml:lang="">Unsupported media type requested.>>>Unsupported media type requested.>>System.Data.Services.DataServiceException>>   at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)
   at System.Data.Services.Serializers.Deserializer.HandlePostRequest()
   at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)
   at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)
   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)
   at System.Data.Services.DataService`1.HandleRequest()>>>A supported MIME type could not be found that matches the content type of the response. None of the supported type(s) 'application/atom+xml;type=entry, application/atom+xml, application/json;odata=verbose' matches the content type 'application/octet-stream'.>>Microsoft.Data.OData.ODataContentTypeException>>   at Microsoft.Data.OData.MediaTypeUtils.GetFormatFromContentType(String contentTypeName, ODataPayloadKind[] supportedPayloadKinds, MediaTypeResolver mediaTypeResolver, MediaType& mediaType, Encoding& encoding, ODataPayloadKind& selectedPayloadKind)
   at Microsoft.Data.OData.MediaTypeUtils.GetFormatFromContentType(String contentTypeHeader, ODataPayloadKind[] supportedPayloadKinds, MediaTypeResolver mediaTypeResolver, MediaType& mediaType, Encoding& encoding, ODataPayloadKind& selectedPayloadKind, String& batchBoundary)
   at Microsoft.Data.OData.ODataMessageReader.ReadFromInput[T](Func`2 readFunc, ODataPayloadKind[] payloadKinds)
   at System.Data.Services.Serializers.EntityDeserializer.Read(SegmentInfo segmentInfo)
   at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)>>>>

О чем эта ошибка? В чем может быть проблема?

Получение данных GET запросом работает. А вот POST и PUT дают ошибку.

Сформированный в 1C xml:

version="1.0" encoding="UTF-8"?>
xmlns="http://www.w3.org/2005/Atom">
        type="application/xml">
                xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
                        xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Александр Пушкин>

                        xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Александр Сергеевич>
                >
        >
>

Код 1С если интересно:

        XMLТекст = Новый ЗаписьXML;
        XMLТекст.УстановитьСтроку("UTF-8");
       
        XMLТекст.ЗаписатьОбъявлениеXML();
       
        XMLТекст.ЗаписатьНачалоЭлемента("entry");
        XMLТекст.ЗаписатьАтрибут("xmlns", "http://www.w3.org/2005/Atom");
       
                XMLТекст.ЗаписатьНачалоЭлемента("content");
            XMLТекст.ЗаписатьАтрибут("type", "application/xml");
               
                        XMLТекст.ЗаписатьНачалоЭлемента("properties");
                        XMLТекст.ЗаписатьАтрибут("xmlns", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
                       
                                XMLТекст.ЗаписатьНачалоЭлемента("Name");
                                XMLТекст.ЗаписатьАтрибут("xmlns", "http://schemas.microsoft.com/ado/2007/08/dataservices");
                                XMLТекст.ЗаписатьТекст("Александр Пушкин");                           
                                XMLТекст.ЗаписатьКонецЭлемента();
                               
                                XMLТекст.ЗаписатьНачалоЭлемента("Dear");
                                XMLТекст.ЗаписатьАтрибут("xmlns", "http://schemas.microsoft.com/ado/2007/08/dataservices");
                                XMLТекст.ЗаписатьТекст("Александр Сергеевич");                             
                                XMLТекст.ЗаписатьКонецЭлемента();
                       
                        XMLТекст.ЗаписатьКонецЭлемента();
               
                XMLТекст.ЗаписатьКонецЭлемента();
               
        XMLТекст.ЗаписатьКонецЭлемента();
       
        СтрXML = XMLТекст.Закрыть();
       
        Соединение = Новый HTTPСоединение("demo.bpmonline.com",,"User","Password",,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));
       
        АдресРесурса = "/0/servicemodel/EntityDataService.svc/ContactCollection";                                            
       
        HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
        HTTPЗапрос.Заголовки.Вставить("Accept", "application/atom+xml");
        HTTPЗапрос.Заголовки.Вставить("ContentType", "application/atom+xml;type=entry");
       
        HTTPЗапрос.УстановитьТелоИзСтроки(СтрXML);
       
        HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); //POST

        Объект.ОписаниеОбъекта = HTTPОтвет.ПолучитьТелоКакСтроку();
       
        Соединение = Неопределено;

Нравится

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