data retrieving in sharepoint. camlex.net - tool for building caml queries using lambda expressions
DESCRIPTION
TRANSCRIPT
![Page 1: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/1.jpg)
Использование CAML в Sharepoint.Camlex.NET - построение CAML запросов с
помощью lambda-выражений
Алексей Садомов http://sadomovalex.blogspot.com/Владимир Тимашковhttp://vtimashkov.wordpress.com/
![Page 2: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/2.jpg)
Обзор способов выборки данных из списков и библиотек документов в Sharepoint
Выборка с помощью цикла в object model
![Page 3: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/3.jpg)
Преимущества:• простой и понятный old-school-ный C# синтаксис• compile-time проверка• не требует знаний CAML от разработчика• вполне применим на листах с небольшим числом записей
Недостатки:• на списках с большим числом записей производительность кодаочень низкая, т.к. каждая запись вытягивается из списка(т.е. из content database) отдельным SQL запросом
![Page 4: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/4.jpg)
Выборка из SharePoint Content DB напрямую
Преимущества:
• Максимальная скорость работы• Полная свобода действий
Недостатки:
• Схема content DB нигде не описана• Microsoft не гарантирует неизменность структуры БД• По сути, это хак системы
![Page 5: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/5.jpg)
Выборка с помощью CAML:
• SPQuery – позволяет делать выборку из одного списка на одном сайте (SPWeb)
• SPSiteDataQuery – для выборки данных из нескольких списков, находящихся на разных сайтах в пределах одной сайт коллекции (SPSite)
• PortalSiteMapProvider.GetCachedListItemsByQuery и GetCachedSiteDataQuery – реализованы на основе SPQuery и SPSiteDataQuery. Позволяет увеличить производительность за счет кеширования
• в свойство (либо параметр) Query записывают SQL-like запросы, отформатированные в XML - фильтры и сортировка/группировка исполняются внутри SQL движка, а не в C# коде (см. Query Schema http://msdn.microsoft.com/en-us/library/ms467521.aspx)
![Page 6: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/6.jpg)
Выборка с помощью SPQuery
![Page 7: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/7.jpg)
Преимущества:• высокая производительность на больших списках
Недостатки:• необходимость знать синтаксис CAML-а• любая синтаксическая ошибка при форматировании XML вызывает исключение• кода менее читабельный – размер примера вырос в 2 раза, читать его становится существенно тяжелее по сравнению с первым подходом• при изменении фильтра надо перестроить дерево XML узлов – к примеру, узел каждой логической операции принимает толька 2 операнда, и в случае, если надо добавить еще одно условие в OR, то придется разбивать соответствующий подузел на 2 части, что еще больше увеличивает общую глубину дерева.• не поддерживает code-first approach – потеря compile-time проверок, intellisense, и т.п.
![Page 8: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/8.jpg)
Использование Caml.NET http://camldotnet.codeplex.com
![Page 9: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/9.jpg)
Преимущества:• меньшая вероятность сделать синтаксическую ошибку• высокая производительность – CAML.NET никак не влияет на производительность, это просто тонкая обертка поверх стандартного CAML синтаксиса, т.е. CAML.NET просто помогает подготавливать XML• compile-time проверка
Недостатки:• т.к. Caml.NET – это лишь обертка над стандартным CAML-ом, этот подход наследуют многие исходные проблемы CAML синтаксиса
![Page 10: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/10.jpg)
Использование Camlex.NET http://camlex.codeplex.com
Преимущества:• не требует знания CAML. Позволяет разработчику сконцентрироваться над непосредственной бизнес задачей, т.е. над тем Что сделать, а не над тем, Как это сделать• минимальный размер кода• фильтры можно перенести из 1-го подхода с помощью copy/paste• производительность на уровне чистого CAML запроса• отсутствие XML синтаксиса как такового. Используется естественный и интуитивно понятный синтаксис. Любые изменения фильтров – естественны для C# разработчиков, и не потребует перестройки XML дерева• разработчик остается к контексте C# - intellisense, compile-time проверки, code-first approach, и т.д. и т.п.• возможность указывать неконстантные выражения (переменные, вызовы методов, и т.п.)• полностью кастомизируемый результат
![Page 11: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/11.jpg)
Рекомендации по созданию LINQ / Expression трансляторов:
• статья “Building a LINQ Provider” -http://msdn.microsoft.com/en-us/vcsharp/ee672195.aspx
• LINQExtender - http://linqextender.codeplex.com/• LINQ IQuerable Toolkit - http://iqtoolkit.codeplex.com/• MetaLinq - LINQ to Expressions - http://metalinq.codeplex.com/• re-linq - http://relinq.codeplex.com/
• используйте CodePlex (TFS, SVN, Mercurial), а не BitBucket• используйте Mercurial, а не SVN
![Page 12: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/12.jpg)
Архитектура Camlex.NET
Интерфейс IQuery
![Page 13: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/13.jpg)
Синтаксис lambda-выражений
Native синтаксис
String-based синтаксис
Трансляция из lambda-выражения в CAML
![Page 14: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/14.jpg)
Поддерживаемые операции
http://camlex.codeplex.com/documentation
![Page 15: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/15.jpg)
Динамические фильтры
![Page 16: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/16.jpg)
Пример практического применения
Построение динамических CAML запросов на основе параметров из query string: http://www.gotdotnet.ru/blogs/sadomovalex/8155/
http://example.com/_layouts/Custom/Search.aspx?Title=Meeting&Description=Sharepoint
![Page 17: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/17.jpg)
Другие фичи, добавленные в версии 2.0
• поиск по field id
• поиск по lookup value и lookup id
![Page 18: Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions](https://reader034.vdocuments.mx/reader034/viewer/2022052306/547e1576b4af9f877c8b4805/html5/thumbnails/18.jpg)
• официальный сайт проекта Camlex.NET http://camlex.codeplex.com/• блоги авторов:
• http://sadomovalex.blogspot.com/• http://vtimashkov.wordpress.com/
• статья на habr-е http://habrahabr.ru/blogs/sharepoint/82787/• статья на codeproject http://www.codeproject.com/KB/sharepoint/Camlex_NET.aspx• статья на codeproject http://www.codeproject.com/KB/sharepoint/Camlex_NET_2_0.aspx• статья на gotdotnet http://www.gotdotnet.ru/blogs/sadomovalex/8155/• Сaml.NET http://camldotnet.codeplex.com/• U2U Caml Builder http://www.u2u.be/Res/Tools/CamlQueryBuilder.aspx
Ссылки