12,041 views(since 2013/10/08)

CAML Query (Client Object Model) にてデータを抽出する方法(Sharepoint Online(Office365), Silverlight, C#)

SharePoint OnlineでClient Object Model(C#+Silverlight)でデータを抽出する方法を書きます。

Silverlightサンプルプログラムの画面

PageSub_Test.xaml.cs.xaml

<navigation:Page x:Class="SilverlightProjectMain.Views.Common.PageSub_Test" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="PageSub_Test Page">
    <Grid x:Name="LayoutRoot">
        <Button x:Name="Test001" Content="Test001" HorizontalAlignment="Left" Margin="128,90,0,0" VerticalAlignment="Top" Width="75" Click="Test001_Click"/>

    </Grid>
</navigation:Page>

PageSub_Test.xaml.cs

注意 View タグがないとエラーもでずに条件をいれても無効になり全データ抽出されます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

using SP = Microsoft.SharePoint.Client;
using System.Collections.ObjectModel;
using System.Windows.Browser;

namespace SilverlightProjectMain.Views.Common
{
    public partial class PageSub_Test : Page
    {
        public PageSub_Test()
        {
            InitializeComponent();
        }

        // ユーザーがこのページに移動したときに実行されます。
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void Test001_Click(object sender, RoutedEventArgs e)
        {
            using (var clientContext = new SP.ClientContext(SP.ApplicationContext.Current.Url))
            {
                var list = clientContext.Web.Lists.GetByTitle("List_Quotation");

                //load不要
                //clientContext.Load(list);

                var camlQuery = new SP.CamlQuery();

                //ID=1を抽出する場合
                camlQuery.ViewXml = @"
                                <View>
                                    <Query>
                                        <Where>
                                            <Eq>
                                                <FieldRef Name='ID' />
                                                <Value Type='Integer'>1</Value>
                                            </Eq>
                                        </Where>
                                    </Query>
                                    <RowLimit>10</RowLimit>
                                </View>
                                ";

                SP.ListItemCollection listItems = list.GetItems(camlQuery);
                clientContext.Load(listItems);

                clientContext.ExecuteQueryAsync(
                    new SP.ClientRequestSucceededEventHandler(delegate(object o, SP.ClientRequestSucceededEventArgs successargs)
                    {
                        try
                        {
                            foreach (var li in listItems)
                            {
                                int nID = li.Id;
                                //string strTitle = li["Title"].ToString();
                                string strTitle = li["CustomerName"].ToString();
                            }
                        }
                        catch (Exception ex)
                        {
                            Dispatcher.BeginInvoke(new Action(delegate() { MessageBox.Show(ex.Message, "Error Dialog", MessageBoxButton.OK); }), null);
                        }
                    }),
                    new SP.ClientRequestFailedEventHandler(delegate(object o, SP.ClientRequestFailedEventArgs failedArgs)
                    {
                        Dispatcher.BeginInvoke(new Action(delegate() { MessageBox.Show(failedArgs.ErrorDetails + "   " + failedArgs.Message, "Error Dialog", MessageBoxButton.OK); }), null);
                    })
                );
            }
        }
    }
}

CAML予約語

条件

項目 意味
Eq =
Gt >
Lt <
Geq >=
Leq <=
Neq <>
Contains Like
IsNull Null
IsNotNull Not Nulll
BeginsWith 前方一致
DateRangesOverlap

条件の連結

項目 意味
And And
Or Or
In In

ソート・グループ

項目 意味
OrderBy  ソート
GroupBy 集計

リスト結合(join)
参考:http://msdn.microsoft.com/ja-jp/library/hh290942.aspx

条件 項目
Joins リストを結合する
Join

フィールドを選択する(ない場合は全項目抽出されます。)

<View>
    <ViewFields>
            <FieldRef Name='ID'/>
            <FieldRef Name='Title'/>
    </ViewFields>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='Title' />
                <Value Type='Text'>111</Value>
            </Eq>
        </Where>
    </Query>
</View>

最大行行数を指定する(ない場合は全行抽出されます。)

最大行数=10

<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='Title' />
                <Value Type='Text'>111</Value>
            </Eq>
        </Where>
    </Query>
    <RowLimit>10</RowLimit>
</View>

ID=1で検索する。

<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='ID' />
                <Value Type='Integer'>1</Value>
            </Eq>
        </Where>
    </Query>
</View>

Title=”111″で検索する。

<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='Title' />
                <Value Type='Text'>111</Value>
            </Eq>
        </Where>
    </Query>
</View>

Title Like “*11*”で検索

<View>
    <Query>
        <Where>
            <Contains>
                <FieldRef Name='Title' />
                <Value Type='Text'>11</Value>
            </Contains>
        </Where>
    </Query>
</View>

Filed Under: Office365 App

About the Author

野呂清二(ご連絡はこちらまで (http://www.exceedone.co.jp/inquiry/)

Leave a Reply




If you want a picture to show with your comment, go get a Gravatar.