'

Использование CAML в Sharepoint. Camlex.NET - построение CAML запросов с помощью lambda-выражений

Понравилась презентация – покажи это...





Слайд 0

Использование CAML в Sharepoint. Camlex.NET - построение CAML запросов с помощью lambda-выражений Алексей Садомов http://sadomovalex.blogspot.com/ Владимир Тимашков http://vtimashkov.wordpress.com/


Слайд 1

Обзор способов выборки данных из списков и библиотек документов в Sharepoint Выборка с помощью цикла в object model


Слайд 2

Преимущества: простой и понятный old-school-ный C# синтаксис compile-time проверка не требует знаний CAML от разработчика вполне применим на листах с небольшим числом записей Недостатки: на списках с большим числом записей производительность кода очень низкая, т.к. каждая запись вытягивается из списка (т.е. из content database) отдельным SQL запросом


Слайд 3

Выборка из SharePoint Content DB напрямую Преимущества: Максимальная скорость работы Полная свобода действий ? Недостатки: Схема content DB нигде не описана Microsoft не гарантирует неизменность структуры БД По сути, это хак системы


Слайд 4

Выборка с помощью 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)


Слайд 5

Выборка с помощью SPQuery


Слайд 6

Преимущества: высокая производительность на больших списках Недостатки: необходимость знать синтаксис CAML-а любая синтаксическая ошибка при форматировании XML вызывает исключение кода менее читабельный – размер примера вырос в 2 раза, читать его становится существенно тяжелее по сравнению с первым подходом при изменении фильтра надо перестроить дерево XML узлов – к примеру, узел каждой логической операции принимает толька 2 операнда, и в случае, если надо добавить еще одно условие в OR, то придется разбивать соответствующий подузел на 2 части, что еще больше увеличивает общую глубину дерева. не поддерживает code-first approach – потеря compile-time проверок, intellisense, и т.п.


Слайд 7

Использование Caml.NET http://camldotnet.codeplex.com


Слайд 8

Преимущества: меньшая вероятность сделать синтаксическую ошибку высокая производительность – CAML.NET никак не влияет на производительность, это просто тонкая обертка поверх стандартного CAML синтаксиса, т.е. CAML.NET просто помогает подготавливать XML compile-time проверка Недостатки: т.к. Caml.NET – это лишь обертка над стандартным CAML-ом, этот подход наследуют многие исходные проблемы CAML синтаксиса


Слайд 9

Использование Camlex.NET http://camlex.codeplex.com Преимущества: не требует знания CAML. Позволяет разработчику сконцентрироваться над непосредственной бизнес задачей, т.е. над тем Что сделать, а не над тем, Как это сделать минимальный размер кода фильтры можно перенести из 1-го подхода с помощью copy/paste производительность на уровне чистого CAML запроса отсутствие XML синтаксиса как такового. Используется естественный и интуитивно понятный синтаксис. Любые изменения фильтров – естественны для C# разработчиков, и не потребует перестройки XML дерева разработчик остается к контексте C# - intellisense, compile-time проверки, code-first approach, и т.д. и т.п. возможность указывать неконстантные выражения (переменные, вызовы методов, и т.п.) полностью кастомизируемый результат


Слайд 10

Рекомендации по созданию 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


Слайд 11

Архитектура Camlex.NET Интерфейс IQuery


Слайд 12

Синтаксис lambda-выражений Native синтаксис String-based синтаксис Трансляция из lambda-выражения в CAML


Слайд 13

Поддерживаемые операции http://camlex.codeplex.com/documentation


Слайд 14

Динамические фильтры


Слайд 15

Пример практического применения Построение динамических CAML запросов на основе параметров из query string: http://www.gotdotnet.ru/blogs/sadomovalex/8155/ http://example.com/_layouts/Custom/Search.aspx?Title=Meeting&Description=Sharepoint


Слайд 16

Другие фичи, добавленные в версии 2.0 поиск по field id поиск по lookup value и lookup id


Слайд 17

официальный сайт проекта 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 Ссылки


×

HTML:





Ссылка: