Начиная с версии 5.3, в BPMonline появилась возможность интеграции с другими приложениями через протокол OData (www.odata.org). Это дает возможность стороннему приложению, написанному на любом языке программирования, посылать HTTP-запросы к BPMonline и получать ответы в форматах XML, Atom или JSON .
Подготовка
Для работы с приложением через протокол OData необходимо обращаться к веб-сервису, который обеспечивает эту возможность. Веб-сервис доступен по адресу:
Рекомендуется объявить в коде соответствующую константу, например:
Также, поскольку по умолчанию ответ формируется в формате Atom, для обработки ответа используются следующие константы:
private static readonly XNamespace dsmd = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
private static readonly XNamespace atom = "http://www.w3.org/2005/Atom";
Авторизация
Запросы к BPMonline должны быть авторизованы. BPMonline поддерживает basic аутентификацию. Самый простой способ авторизации при этом – передача учетных данных в заголовке запроса.
Например:
request.Credentials = new NetworkCredential("UserName", "UserPassword");
Каждый запрос к сервису должен содержать эту информацию.
Обратите внимание: имя пользователя и пароль передаются в открытом виде.
Указанный способ авторизации рекомендуется только в случае использования SSL шифрования (https).
Получение списка записей
Для получения набора записей используется HTTP метод GET. Записи возвращаются постранично, по 40 записей на страницу. Если предполагается, что запрос вернет больше 40 записей, необходимо обеспечить получение следующей страницы по достижении конца текущей.
Например:
while (!string.IsNullOrEmpty(requestUri)) {
var request = HttpWebRequest.Create(requestUri) as HttpWebRequest;
request.Method = "GET";
request.Credentials = new NetworkCredential("UserName", "UserPassword");
using (var responce = request.GetResponse()) {
XDocument xmlDoc = XDocument.Load(responce.GetResponseStream());
var entries = from entry in xmlDoc.Descendants(atom + "entry")
select new {
Id = new Guid(entry.Element(atom + "content").Element(dsmd + "properties")
.Element(ds + "Id").Value),
Name = entry.Element(atom + "content").Element(dsmd + "properties")
.Element(ds + "Name").Value
};
requestUri = (from link in xmlDoc.Descendants(atom + "link")
where link.FirstAttribute.Value == "next"
select link.FirstAttribute.NextAttribute.Value).FirstOrDefault();
foreach (var contact in entries) {
//выполнение операций с контактом
}
}
}
В противном случае можно опустить получение ссылки на следующую порцию данных.
Если же необходимо одним запросом получить более чем 40 записей, требуемое количество записей можно указать при помощи параметра $top.
Например:
Создание записи
Для создания записи используется HTTP метод POST. Необходимо сформировать тело запроса согласно формату XML, Atom или JSON таким образом, чтобы он содержал все необходимые поля записи.
Например:
new XElement(ds + "Name", "John Smith"),
new XElement(ds + "Dear", "Johny"));
var entry = new XElement(atom + "entry",
new XElement(atom + "content",
new XAttribute("type", "application/xml"),
content));
var request =
(HttpWebRequest)HttpWebRequest.Create(serverUri + "ContactCollection/");
request.Credentials = new NetworkCredential("UserName", "UserPassword");
request.Method = "POST";
request.Accept = "application/atom+xml";
request.ContentType = "application/atom+xml;type=entry";
using (var writer = XmlWriter.Create(request.GetRequestStream())) {
entry.WriteTo(writer);
}
using (WebResponse response = request.GetResponse()) {
if (((HttpWebResponse)response).StatusCode == HttpStatusCode.Created) {
// response.Headers["Location"]; ссылка на адрес созданной записи
}
}
Изменение записи
Для изменения записи используется HTTP метод PUT. В запросе указываются новые значения полей, которые нужно изменить.
Например:
var content = new XElement(dsmd + "properties",
new XElement(ds + "Name", "Smith")
);
var entry = new XElement(atom + "entry",
new XElement(atom + "content",
new XAttribute("type", "application/xml"),
content)
);
var request = (HttpWebRequest)HttpWebRequest.Create(serverUri
+ "ContactCollection(guid'" + contactId + "')");
request.Credentials = new NetworkCredential("UserName", "UserPassword");
request.Method = "PUT";
request.Accept = "application/atom+xml";
request.ContentType = "application/atom+xml;type=entry";
using (var writer = XmlWriter.Create(request.GetRequestStream())) {
entry.WriteTo(writer);
}
using (WebResponse response = request.GetResponse()) {
}
Удаление записи
Для удаления записи используется HTTP метод DELETE.
Например:
var request = (HttpWebRequest)HttpWebRequest.Create(serverUri
+ "ContactCollection(guid'" + contactId + "')");
request.Credentials = new NetworkCredential("UserName", "UserPassword");
request.Method = "DELETE";
using (WebResponse response = request.GetResponse()) {
}
Нравится
Здравствуйте! Передо мной стоит задача передавать заявки с сайта в Bpmonline. При этом сайт находится на стороннем хосте, а Bpmonline - на корпоративном, связь с ним осуществляется через VPN. Как осуществить эту связь, ведь от стороннего хоста мы не можем потребовать включения VPN?