SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual Studio 2010によるSharePoint 2010開発の基本

SharePoint 2010とSilverlightの連携

Visual Studio 2010によるSharePoint 2010開発の基本(6)

  • X ポスト
  • このエントリーをはてなブックマークに追加

[4]MainPage.xaml.csを修正する

 MainPage.xaml.csを開き、まずリスト2のように、Silverlightクライアントオブジェクトモデルのためのusingディレクティブを追加します。

リスト2 usingディレクティブの追加(MainPage.xaml.cs)
using Microsoft.SharePoint.Client;

 次にリスト3のように、すでに存在するMainPageクラスの上にAnnouncementItemクラスを追加します。

リスト3 AnnouncementItemクラスの追加(MainPage.xaml.cs)
public class AnnouncementItem
{
    public string Title { get; set; }
    public DateTime Modified { get; set; }
}

 このクラスでは、SharePointサイトの「お知らせ」リストのリストアイテムから取得したタイトルと更新日時を格納するための2つのプロパティを定義しています。

 次にリスト4のように、MainPageクラスを修正します。

リスト4 MainPageクラスの修正(MainPage.xaml.cs)
public partial class MainPage : UserControl
{
    // (1)「お知らせ」リストアイテムコレクション
    private ListItemCollection announcementListItems;

    public MainPage()
    {
        InitializeComponent();

        // (2)現在のクライアントコンテキストの取得
        ClientContext context = ClientContext.Current;

        // (3)[お知らせ]リストの取得
        List announcementList = context.Web.Lists.GetByTitle("お知らせ");
        context.Load(announcementList);

        // (4)「お知らせ」リストアイテムの検索
        CamlQuery query = new CamlQuery();
        query.ViewXml = "<View><Query><OrderBy><FieldRef Name='Modified' Ascending='FALSE'/></OrderBy></Query></View>";
        announcementListItems = announcementList.GetItems(query);
        context.Load(announcementListItems);

        // (5)クエリの非同期実行
        context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), null);
    }

    private void OnRequestSucceeded(object sender, ClientRequestSucceededEventArgs e)
    {
        // (6)メインUIスレッドに描画操作を依頼
        Dispatcher.BeginInvoke(BindData);
    }

    private void BindData()
    {
        // (7)AnnouncementItemオブジェクトのリスト作成
        List<AnnouncementItem> announcements = new List<AnnouncementItem>();
        foreach (ListItem item in announcementListItems)
        {
            announcements.Add(new AnnouncementItem()
            {
                Title = item["Title"].ToString(),
                Modified = Convert.ToDateTime(item["Modified"].ToString())
            });
        }

        // (8)DataGridコントロールにバインド
        dataGrid1.ItemsSource = announcements;
    }

}

 (1)にあるListItemCollectionクラスは、SharePointのリストアイテムを表すListItemクラスのオブジェクトコレクションを管理します。ここでは、「お知らせ」リストアイテムのコレクションを管理するために使用します。

 (2)にあるClientContextクラスのCurrent静的プロパティにより、クライアントオブジェクトモデル実行のための現在のコンテキストを取得します。

 (3)では、SharePointのWebサイトを表すWebクラスのListプロパティによって返されるListCollectionクラスのGetByTitleメソッドにより、特定のタイトル(ここでは「お知らせ」)を持つListクラスのオブジェクトを取得します。

 (4)では、「お知らせ」リストに対してクエリを実行します。SharePointでは、リストに対するクエリのためにCAML(Collaborative Application Markup Language)と呼ばれるXML形式のスキーマを使用します。CamlQueryクラスのオブジェクトを生成し、ViewXmlプロパティでCAMLクエリを設定します。ここでは更新日時の降順でOrderByするように設定しています。そして、ListオブジェクトのGetItemsメソッドのパラメーターとしてCamlQueryオブジェクトを渡すことにより、リストに対するクエリを実行します。

 なお、CAMLの詳細については、MSDNライブラリの「CAML (Collaborative Application Markup Language) の概要 」を参照してください。

 Silverlight用のクライアントオブジェクトモデルでは、クライアントコンテキストに対するすべてのクエリは非同期で実行されます。(5)では、(3)と(4)でClientContextオブジェクトのLoadメソッドで予約しておいたクエリをExecuteQueryAsyncメソッドにより非同期実行します。ExecuteQueryAsyncメソッドは、成功時と失敗時のコールバックメソッドのデリゲートをパラメーターとして渡す必要があります。

 成功時のコールバックメソッドとしてOnRequestSucceededメソッドを定義しています。このメソッドは、メインUIスレッドとは別のスレッドとして実行されるため、(6)ではメインUIスレッドに対して描画操作を依頼しています。

 (7)では、CAMLクエリによって取得した「お知らせ」リストアイテムコレクション(announcementListItemsオブジェクト)をもとに、表示用のAnnouncementItemオブジェクトのリスト作成し、(8)でDataGridコントロールにバインドします。

 以上で、サンプルは完成です。

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Visual Studio 2010によるSharePoint 2010開発の基本連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6094 2011/08/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング