Каталог решений - Настройка Open Data Protocol (OData) и нюансы работы

Настройка Open Data Protocol (OData) и нюансы работы

Настройка Open Data Protocol (OData) и нюансы работы

В наличии

Настройка Open Data Protocol (OData): изменение и удаление данных.

Категория:

Описание

Описание

Расскажу о некоторых нюансах работы с протоколом Open Data Protocol (OData). —> Самое интересное в конце статьи.

Чтобы начать работать с OData в 1С, нужно:

1) Установить на сервер 1С веб-сервер, любой (Apache, IIS, Ngnix).

2) При установке программы 1С на сервере 1С нужно также установить модули расширения веб-сервера.

3) Опубликовать базу на веб сервере, в Конфигураторе — Администрирование — Публикация на веб сервере

4) Запустить обработку, прикрепил ниже (скачать), и включить объекты Метаданных базы, с какими можно работать через OData, в состав объектов Стандартного Интерфейса OData.

5) в Конфигураторе — создать Роль для настройки Прав Пользователей, если такой нет в базе.

6) Назначить Права Пользователей, в Конфигураторе — Администрирование — Пользователи

5) Далее, выполнять запросы к объектам базы 1С. Это можно делать в строке браузера, а можно из кода 1С (и любых других языков программирования, поддерживающих OData )

 

Если для работы с HTTP-сервисом программисту 1С нужно придумывать архитектуру REST API, т.е. какие запросы возможны, то при работе с OData эта REST API уже реализована на уровне Платформы 1С. 

 

Нюансы работы с OData

 

Как выполнять запросы на получение данных рассказано здесь.

Расскажу по обновление и удаление данных в 1С, с помощью OData.

Если сравнивать HTTP-сервис и OData, то код 1С написания HTTP запроса очень похож.

При изменении и удалении для OData нужно указывать заголовки:

ЗаголовокHTTP = Новый Соответствие(); 	
ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8");
ЗаголовокHTTP.Вставить("If-Match", ВерсияДанных);
ЗаголовокHTTP.Вставить("1C_OData-DataLoadMode", Истина);

где для заголовка "If-Match" указывается версия данных DataVersion объекта изменения или удаления.

А далее

HTTPЗапрос = Новый HTTPЗапрос(Адрес, ЗаголовокHTTP); 
ОтветHTTP = Соединение.Удалить(HTTPЗапрос);  // удаление данных, DELETE
// или
ОтветHTTP = Соединение.Изменить(HTTPЗапрос);    // обновление данных PATCH

Зачем нужно указывать залоговок "If-Match"?

Ответ: При чтении данных вы запрашиваете с сервера 1С нужные вам данные и версию данных, DataVersion.

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

Для этого и используют Версию данных, DataVersion. Если кто-то другой изменит данные, DataVersion изменится.

Поэтому, когда мы напишем запрос на изменение или удаление данных, при его выполнении, происходит сверка DataVersion которое вы передаёте в заголовке, с тем значением, которое в базе 1С.

Если версии совпадают, значит данные (между чтением данных из базы и их записью в базу 1С) никто не менял.

И можно записать изменения или удаление в базу.

Зачем нужно указывать залоговок "1C_OData-DataLoadMode"?

Ответ: Если необходимо эмулировать запись, выполняемую во время работы механизма обмена данными

(свойство ОбменДанными.Загрузка = Истина)

 

Когда вы работаете в программе 1С Предприятие в режиме: Тонкого, Толстого или Веб-клиента, программа накладывает Объектные блокировки:

Пессимистическая — когда вы начинаете изменять, например Документ или Справочник, вверху формы вы можете заметить появление звёздочки (Модифицированность = Истина)

Оптимистическая — при записи данных в базу, платформой происходит сверка DataVersion данных,  которые вы помещаете в базу с версией данных, которые уже есть в базе.

 

Обратите внимание

При работе с данными через OData никаких объектных блокировок не накладывается, поэтом вам нужно самим делать то, что Платформа для: Тонкого, Толстого или Веб-клиента — делает по-умолчанию, без вашего участия.

Т.е. следить за версией данных, DataVersion, которые вы изменяете или удаляете.

 

При удалении данных с помощью OData не поддерживается ссылочная целостность.

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

При удалении используемой Единицы измерения, в Справочнике Номенклатура появятся битые ссылки (что очень плохо).

 

 

 

 

 

 

 

 

 

 

 

Если вы назначили Пользователю права в Роли, где возможно удаление данных. При помощи OData данные удаляются физически из базы, т.е. не ставится Пометка Удаления = Истина у записи. Поэтому не создавайте Ролей с возможностью удаления данных из базы, а давайте возможность изменять данные. Например, чтобы Пользователь с помощью OData выставлял DeletionMark = true, что эквивалентно: ПометкаУдаления = Истина.

DeletionMark = true        // это английский синтаксис

ПометкаУдаления = Истина  //   это русский синтаксис

 

Тестировал обработку на платформах 1С:Предприятие 8.3 (8.3.12.1685), (8.3.20.1674).

has been added to your cart:
Оформление заказа