Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions

1,985 views
1,880 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,985
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Data retrieving in Sharepoint. Camlex.NET - tool for building CAML queries using lambda expressions

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

×