ODATA это открытый веб-протокол для запроса и обновления данных. Он позволяет оперировать данными, используя в качестве запросов HTTP-команды.
http://v8.1c.ru/o7/201312rest/
Есть поддержка JSON
http://v8.1c.ru/o7/201410json/index.htm
Хорошая статья по публикации находится здесь
Для того, что бы редактировать состав стандартного интерфейса можно воспользоваться обработкой
Или программно установить используя метод УстановитьСоставСтандартногоИнтерфейсаOData
Массив = Новый Массив();
Для Каждого Справочник Из Метаданные.Справочники Цикл
Массив.Добавить(Справочник);
КонецЦикла;
УстановитьСоставСтандартногоИнтерфейсаOData(Массив);
Затем в VS Добавить ссылку на службу используя URI
http://{АдресВебСервера}/{ИмяПубликации}/odata/standard.odata/$metadata
Получаем описание классов доступ и доступ к ODATA например так
var uriString = @"http://localhost/LinqBD/odata/standard.odata/";
var context = new ServiceReference1.EnterpriseV8(new Uri(uriString));
context.Format.UseJson();
var query = context.CreateQuery<ServiceReference1.Catalog_Тестовый>(@"Catalog_Тестовый")
если не использовать context.Format.UseJson() то данные будут присылаться в формате XML
Можно получить один элемент по ключу
var query = context.CreateQuery<ServiceReference1.Catalog_Тестовый>(@"Catalog_Тестовый(guid'aada18ad-5308-11e5-8e05-c86000c70663')");
Можно добавлять фильтры например
var query = context.CreateQuery<ServiceReference1.Catalog_Тестовый>(@"Catalog_Тестовый")
.AddQueryOption("$filter", "Число le 100");
Но проще использовать доступ к ODATA через Linq. Например
var result = (from Тестовый in context.Catalog_Тестовый
where Тестовый.Число < 500
select Тестовый).ToList();
var result = (from Тестовый in context.Catalog_Тестовый
where Тестовый.Ref_Key == new Guid("aada18ad-5308-11e5-8e05-c86000c70663")
select Тестовый).SingleOrDefault();
То есть можно работать с ODATA полностью на Linq
Подгрузка ссылочных реквизитов
https://msdn.microsoft.com/ru-ru/library/cc646508(v=vs.110).aspx
var ПустаяСсылка = new Guid("00000000 - 0000 - 0000 - 0000 - 000000000000");
string НоменклатураНаименование = "";
if (result.РеквизитСправочник_Key != ПустаяСсылка)
{
context.LoadProperty(result, "РеквизитСправочник");
НоменклатураНаименование = result.РеквизитСправочник.Description;
}
Для Неопределенных типов Можно создать функцию
object ПолучитьНеопределенныйТип(ServiceReference1.EnterpriseV8 context, string значение, string Тип)
{
switch (Тип)
{
case "StandardODATA.Undefined":
return null;
case "StandardODATA.Catalog_Номенклатура": return context.Catalog_Номенклатура.Where(Тестовый => Тестовый.Ref_Key == new Guid(значение)).SingleOrDefault();
case "Edm.Double": return Double.Parse(значение, System.Globalization.CultureInfo.InvariantCulture);
…..
}
return null;
}
Ииспользовать
dynamic ЛюбаяССылка = ПолучитьНеопределенныйТип(context, result.ЛюбаяСсылка, result.ЛюбаяСсылка_Type);
dynamic НеСсылочный = ПолучитьНеопределенныйТип(context, result.НеопределенныйНеССылочный, result.НеопределенныйНеССылочный_Type);
По сути некая замена COM.
Полезные ссылки для запросов ODATA
https://msdn.microsoft.com/ru-ru/library/vstudio/dd673933(v=vs.100).aspx
Обновление, добавление и удаление записей
https://msdn.microsoft.com/ru-ru/library/vstudio/dd756361(v=vs.100).aspx