Каталог решений - Linq to ODATA

Linq to ODATA

Linq to ODATA

В наличии

1С сейчас совершенствует REST интерфейс приложения, автоматически генерируемый платформой, и протокол обмена ODATA версии 3.
С недавнего времени появилась возможность обмениваться, используя JSON. На просторах интернета мало информации по использованию Linq для ODATA для 1С.
Поэтому решил поделиться опытом. Это продолжение статей https://infostart.ru/public/402433/

Категория:

Описание

ODATA это открытый веб-протокол для запроса и обновления данных. Он позволяет оперировать данными, используя в качестве запросов HTTP-команды.

 

http://v8.1c.ru/o7/201312rest/

Есть поддержка JSON

http://v8.1c.ru/o7/201410json/index.htm

 

Хорошая статья по публикации находится здесь

//sale.itcity.ru/public/305854/index.php?back&vote_id=245&rate=1&ID=305854%3Frate%3D1&bxajaxid=2da474348dcf168272d247336e249b99 

Для того, что бы редактировать состав  стандартного интерфейса можно воспользоваться обработкой

//sale.itcity.ru/public/297325/

Или программно установить используя метод УстановитьСоставСтандартногоИнтерфейса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

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