Welcome to MSDN Blogs Sign in | Join | Help

[Info] 2008 年 Tech・Ed (私的視点)

こんにちは。

今年の TechEd では、WCF / WF 関連のセッションを担当します。今年は、これらを使用して実システム構築やビジネスに活用するという視点でご説明をしていきます。「すでに WCF / WF を知っている人」を対象とした内容ですので、あらかじめ WCF / WF を予習しておいてください。

とは言いつつも、Windows Server 2008 も正式リリースからまだまだ日は浅く、現場では、これから WCF / WF をはじめられる方、あるいは、今使い始めて悩まれている方も居られるでしょう。こうした方は、対話型スペシャルプログラム BOF (Birds of a feather) での WCF / WF 解説・紹介なども予定されています。 テクノロジーのノウハウを持つコミュニティあるいはエンジニアの方による "現場" の切り口での解説に加え、「WCF って何 ?」「みんな何に苦労してるの ?」 といった視点を順番にクリアしていきたい方には必見でしょう。

また WF を学ぶ方には、SharePoint ワークフロー、BizTalk なども含めてアーキテクチャ的な位置づけから理解しておく必要があるでしょう 。「SharePoint があるなら、WF なんて要らないんじゃないか」 と思われたりしていませんか ? こうした理解のための絶好のテクニカルセッションもあります。「T5-307 : BizTalk Server、WF、および SharePoint Server で実現する BPM ソリューション実装」 はこうした方にお薦めです。デモも含め、「それぞれが何をするものなのか」 がわかりやすく整理できるかもしれません。

私のセッションでは、以下のような内容を予定しています。

  • T2-302 WCF / WF を活用した実践的アプリケーションの開発

    情報システム構築、あるいはそうしたシステムの実装をされている方向けの内容です。方法の選択、アーキテクチャなどの面で、実システム構築の際に必要な検討や、よく迷う落とし穴、そしてそれらの考え方 (必要な知識) をテクノロジーの側面で順番にご紹介していきます。(WCF のスケーラビリティを示すサンプルとして、StockTrader という米国のサンプルアプリケーションがありますが、こうしたところで使用されている考え方なども一部含めています)

  • T2-401 WCF / WF を使用した拡張

    こちらは製品開発を実施される方向けです。WCF / WF は、できあがった製品 (Product) ではなく仕組みの基盤 (Foundation) です。さまざまな拡張が可能です。WCF から JNBridge を介して Java のインタフェースを呼ぶ WCF のバインディング製品や、WF であれば Visio のステンシルでワークフローをデザインして SharePoint に配置してしまう製品など、こうしたフレームワークを活用した優れた製品が数多くあります。そうした機能を作る上での基礎技術の理解やデモ・説明を実施します。 

私は、昨年までは主に SharePoint 系のセッションを担当していました。今年の SharePoint 系の "コアな" 開発者向けのセッションとしては、「T3-401 : 直伝! Visual Studio extensions for SharePoint による Office SharePoint Server 2007 開発手法 (小松 真也)」 はお薦めです。これは特に製品開発レベルの SharePoint 開発者にとっては目から鱗のセッションとなることでしょう。(これは間違いなく米国でも聞けない内容です。セッション番号 401 の 4 は 「難しいですよ」 という意味ですので、この説明の機会を逃さないようちゃんと予習をしておきましょう。) 

今年の SQL Server 2008 は Launch 間近ということもあり、さまざまな紹介系のセッションが予定されています。これまでの SQL Server 系の各種イベントを見逃した方や、サイト上で学習するのが面倒な方は、SQL Server 系のセッションをがんがん見てこの機会にざっと 2008 を理解するという回り方もあります。Hyper-V や仮想化関連もエンタープライズ分野でのニーズが非常に高くにぎわいを見せています。
分野により注目の視点は異なりますが、皆さんの視点で、皆さんなりの Tech・Ed を今年も是非堪能してください。

 

Posted by tsmatsuz | 1 Comments
Filed under:

[Info] 最新プラットフォームを活用したサーバ開発の自学シリーズ, すべて公開完了です !

こんにちは。

毎週に分けて (1 章ずつ) 公開をおこなってきた IT Pro 道場自主トレシリーズ「アプリケーションプラットフォーム編」は、11 章をもってすべて公開を完了しました。 

IT Pro 道場自主トレシリーズ 「アプリケーションプラットフォーム編」
http://www.microsoft.com/japan/technet/community/events/dojo/online/self/default.mspx
 

あっという間に 11 週間も経ってしまいました。 
名前は「IT Pro 道場」ですが、以前もご紹介しましたように IT Pro / Developer という双方の側面を織り交ぜて、要は「エンジニア」 として考察していくポイントを記載しています。(章によっては、むしろ開発者の方にフォーカスしている章もあります。)

無論、これがサーバアプリケーション開発テクノロジーのすべてというわけではありませんが、IT Pro エバンジェリスト との共同で、最新のプラットフォーム (Windows Server 2008、そして Visual Studio 2008) を使用したノウハウなども織り交ぜながら、インフラ、そしてアプリの双方を構成する上での 考察のポイント を IT Pro (TechNet)、Developer (MSDN) の分け隔てなく掲載しました。

第 1 章「はじめに」の Web キャストではシステム全体を構成する上での考え方など (システム構築経験を嫌というほどご実施された皆さんには共感いただけるであろう「現実」の経験則) にもふれていますので、実際のサーバ構築におけるポイントのおさらい以外にも、これからシステム構築の世界を学ぶ方向けの部分的な素材などとしてもご活用ください。(技術が進歩しても、「ちゃんと動くシステムを作る」 というのは、本当に難しいことです)

 

Posted by tsmatsuz | 1 Comments

[Info] IE 8 (Beta 1) の新機能は ? 変更点は ?

こんにちは。

日々ご使用されている Internet Explorer の次期バージョン、IE 8 を開発者の方向けにわかりやすく分類してまとめたホワイトペーパーを公開しました。

Internet Explorer 8 Beta 1 for Developers ホワイトペーパー
http://msdn.microsoft.com/ja-jp/vbasic/cc216837.aspx

IE については、システムに携わる皆さんにとってはさまざまな思いで知りたいことがあることでしょう。ある開発者の方にとっては、「WebSlice に興味津々」、「雑誌で読んだあの機能ってどんなもの?」 など、新機能に注目されている方も多いでしょう。また社内の情報システムを管理されている方、基幹システムの管理者の方などは、マイクロソフトが「互換性に配慮しています」と言いながらも、「いままで作ったものはちゃんと動くよね」、「変わった点があればそこだけ教えて!」 といった声が多いでしょう。
このホワイトペーパーでは、そうした点を考慮し、機能の膨大な資料の羅列ではなく、「変更点」と「新機能」に分類し、新しい IE 8 の外観をざっとご理解して、興味のある分野のみ深くご理解頂けるように構成されています。(「追加機能」に記載されている「バージョン管理とIE のモード」は、新機能でありながらも互換性と大きく絡んでいる事項ですので、「変更点」を知りたい方も是非ご参照ください。)

システム構築と近い位置でお仕事をされている開発者の皆さんのために、新しくなった IE 8 を短時間で理解、そして早期にお試しいただくことができるように構成されています。

 

Posted by tsmatsuz | 1 Comments

[ブログ紹介] “Zermatt” – クレーム (Claim) 対応アプリケーションのためのフレームワーク

こんにちは。

Windows CardSpace に代表されるクレームベースのアプリケーション開発で、カードの発行機能の作成部分、ASP.NET をはじめとした .NET Web アプリケーションからの使用部分など、部分的な箇所について、敷居の高い開発 (内部の動きを理解してコーディング) が必要になっていたと思います。(ダウンロードセンターの こちら のカードのサンプルをみて頂くと、いかに大変かイメージして頂けます。)
「Windows Cardspace を使うと、アイデンティティ管理のためのエコシステム (例:ID をサーバごとに重複して管理したり、ID を複数のセンターで管理したり、など) を構築できる非常のインパクトの高い仕組みです!」と Web キャストで解説していながらも、実際マネージカードの作成や利用をさまざまなアプリで真剣に作っていこうとすると、各所でこうした面倒な実装を克服していかなければなりません。

Microsoft では、こうした Pain を解消する WCF などを活用した新しい仕組みを作成中で、このほど、そのベータ版がリリースされました。
田辺ブログで解説付きでご紹介されていますので、開発者の方は、是非参考にしてみてください。

http://blogs.technet.com/stanabe/archive/2008/07/09/zermatt-framework-for-claim-aware-applications.aspx

「Windows CardSpace は、アイデンティティ管理のための優れたエコシステムです」 は、より身近なものとして実感していくことができるでしょう。

(私もまだこのベータリリースは動かしていません、、、今後動かしてみて、是非チュートリアルなどご紹介していければと思います。)

 

Posted by tsmatsuz | 1 Comments
Filed under:

[Info] Visual Studio 2008 のポイントはいかに ?

こんにちは。

以前もこんなしらじらしいことを書いたかもしれませんが、"Microsoft では、皆さんからのフィードバックに基づいて、日々、必要な情報は何か、いかに皆さんに情報をお届けすべきかを検討し、改善をおこなっております !"
マイクロソフト嫌いな方には下手なお愛想に聞こえるかもしれませんが、まさに、日々、実施しております。

Visual Studio 2008 が登場して以降も、皆さんからのフィードバックをもとに、適切な情報をお届けできているか、できていないなら何が原因か、を検討し続けています。この中でわかってきていることとして、"LINQ"、"WF" 等のテクノロジー用語に対して、使い方はわかっても、「それを使う場面が想像できない」(使い方はわかるけど、"LINQ" って何を解決するものなの?今までじゃ何が悪いの?)といった声が多くあります。ご存じの方は実感して頂けるかもしれませんが、Visual Studio 2008 では、「便利さ」だけとは違った「アーキテクチャ進化」、「モデルの進化」などの進化をたどっていて、SP1 以降でも、この傾向は続きます。こうした状況にあって、それぞれのテクノロジーの本来の意味がちゃんとお届けできていないというのは、私達としても何とかしなければいけません。エバンジェリスト 大野小高 による「さあ、できることから」開発者セミナーをはじめさまざまな試みを実施してきましたが、セミナーでは "広く一般の方へ声を届けることがむずかしい" ことも事実です。

そこで、デベロッパーエバンジェリストのチームでは、日本独自に、「Visual Studio 2008 ソリューションサンプル」を作成することにしました。

Visual Studio 2008 ソリューションサンプル
http://www.microsoft.com/japan/msdn/events/online/study/vssolution/

このサンプル、完成度の極端に高い現実離れしたサンプルにならないよう、「できるだけ難しくならないように」コードを実装しています。例えば、ASP.NET AJAX では、本来なら AJAX Control Toolkit などもバリバリに使ってアニメーションやら、ポップアップダイアログやらと作りまくって皆さんにその「すごさ」を理解してもらいたいのも山々でしたが、できるだけ「理解可能な範囲で」構築をおこなっています。WPF で登場する XAML のコードも同じです。極端に美しい、でも難しいUX よりも、「ちょっと工夫した」感じの XAML を目指して構築しています。(無論、Expression でも編集可能です)

説明も、極力短くしました。(本心を書くと、もっといろいろと伝えたいことだらけです。が、まずは「手になじむ」サンプルを主旨としています。)

今後は、各テクノロジーごとに、このレベルまで組み上げていくための技術解説やサンプルコードを充実させていく予定です。
ポイント解説付きの、「手が届く」サンプルをまずはお試しください。

 

Posted by tsmatsuz | 1 Comments
Filed under:

[Info] Visual Studio 2008 (WCF 含む) における Web アプリケーションのロードバランスへの対応

こんにちは。

以前、ブログでも記載した、WCF なども含めた負荷分散 (ロードバランス) への対応について、実際の設定や考え方を Web Cast としてまとめました。 

IT Pro 道場自主トレシリーズ : アプリケーションプラットフォーム編 「第6章 アプリケーションの負荷分散への対応」 
http://www.microsoft.com/japan/technet/community/events/dojo/online/self/6.mspx

なお、この内容は、2007年11月より全国で実施した IT Pro 道場 「アプリケーションプラットフォーム編」 をコンテンツ化したものですので、このセミナーを受けられた方にとっては同一の内容となります。

 

Posted by tsmatsuz | 1 Comments
Filed under:

【VSeWSS で作る製品パッケージ(番外編)】 新機能 WSP View の活用(例 : Master Page feature の追加)

環境:
Microsoft Office SharePoint Server (MOSS) 2007
SharePoint Designer 2007
Visual Studio 2005
Visual Studio 2005 Extensions for Windows SharePoint Services 3.0 (VSeWSS) Version 1.1

VSeWSS で作る製品パッケージ

  1. VSeWSS 進化のポイント
  2. CAML によるサイト/フィーチャーカスタマイズの基本
  3. Provisioning Handler の活用
  4. 新機能 WSP View の活用(例 : Workflow feature の追加)
  5. 新機能 WSP View の活用(例 : Master Page feature の追加)

こんにちは。

VSeWSS 1.1 を使用してカスタムマスターページ (.master) を組み込んで設定するというデモについて掲載のリクエストもいくつかいただきましたので記載させていただきます。(確かに、この方法は、実際の製品開発などではニーズの高いテクノロジーです、、、)
以前終了したシリーズを思い出したようにまた続けてすみませんが、上記シリーズ(VSeWSS で作る製品パッケージ)の続きとして記載します。(なお、作成したサンプルプロジェクトは本ブログで download できるように添付しておきました)

まず、考え方そのものは、前回の第 4 回「新機能 WSP View の活用(例 : Workflow feature の追加)」の考え方を多くのフィーチャーで応用していくことができますので、今後のために基本的考え方を以下におさらいしておきましょう。

VSeWSS を使ったカスタムフィーチャーの組み込み手順 (考え方のおさらい)

  1. フィーチャーを定義した Element マニフェストの xml (ワークフローのときは workflow.xml でした) を作成
  2. すると、VSeWSS の WSP View が認識してくれますので、フィーチャーの定義 (feature.xml) を記載
  3. 追加で配布する付属のファイル (例えば、イメージファイル、ページ、フォーム、など) は、「テンプレート」(Template) として追加
  4. Provisioning ハンドラを使った準備処理の作成

それでは早速、同じ要領で、カスタムマスターページ (Custom Master Page) をソリューションパッケージの中にフィーチャーとして組み込んでみましょう。 

まず、当然のことですが、フィーチャーとして組む込む .master ファイルを SharePoint Designer などで作っておいてください。また補足ですが、作成したマスター (.master) の中からどのようなスタイルファイル (.css) やイメージファイル (.jpg 等) を参照しているかといった点もちゃんと把握をしておくようにしましょう。

では、上記の手順 1 に該当する、Element マニフェストの作成です。まずは、以下のような xml ファイルを作成してください。

<?xml version="1.0" encoding="utf-8" ?>
<!-- _lcid="1033" _version="12.0.4407" _dal="1" -->
<!-- _LocalBinding -->
<Elements Id="7E989867-D053-4069-85EE-277C9755F294" xmlns="http://schemas.microsoft.com/sharepoint/">
 <Module Name="OSGPageLayouts" Url="_catalogs/masterpage" Path="MasterPages" RootWebOnly="TRUE">
  <File Url="MyDemoMaster.master" Type="GhostableInLibrary" Path="">
   <Property Name="ContentType" Value="My Demo Master Page" />
   <Property Name="PublishingPreviewImage" Value="~SiteCollection/_catalogs/masterpage/$Resources:core,Culture;/Preview Images/MyDemoMaster.png, ~SiteCollection/_catalogs/masterpage/$Resources:core,Culture;/Preview Images/MyDemoMaster.png" />
   <Property Name="MasterPageDescription" Value="このマスターページは、デモとして組み込まれました" />
  </File>
 </Module>
 <Module Name="PublishingLayoutsPreviewImages" Url="_catalogs/masterpage" IncludeFolders="??-??" Path="" RootWebOnly="TRUE">
  <File Url="MyDemoMaster.png" Name="Preview Images/MyDemoMaster.png" Type="GhostableInLibrary" Path="">
  </File>
 </Module>
</Elements>

面倒でしたら上記のコピー/ペーストで作成していただいてOKですが、意味を理解して作成しておくようにしましょう。
例えば、以下の項目は、みなさんが作成されたマスターファイルなどの名前にあわせて変更をおこなってください。

  • Elements の Id 
    Visual Studio などで GUID を生成してユニークな値を設定してください
  • MyDemoMaster.master
    ここは、みなさんが作成したマスター (.master) にあわせて適切な名前を設定しておいてください。
  • MyDemoMaster.png
    マスターを選択するときに表示されるプレビューのイメージファイルです。これも、みなさんが作成されたイメージファイルにあわせて適当な名前を設定しておきましょう

つぎに、上記の手順 2 に進みましょう。
上記の XML を第 4 回のとき同様、VSeWSS のサイト定義のプロジェクト (無論、Solution Generator で抽出したプロジェクトでも構いません) に含め、WSP View で表示の更新をおこなうと、OSGPageLayouts という名前のフィーチャーが自動で組み込まれて、feature.xml が作成されます。まずは、WSP View で OSGPageLayouts の名前 (さらに、サブフォルダの名前も) を適当な名前に変更してください (feature.xml の中のパスの記述も自動的に変更されます)。

つぎに、上記の作成された feature.xml を以下の通り変更しましょう。(ここで、Feature の Id は、前回同様、元の値から変更しないように注意してください)

<?xml version="1.0" encoding="utf-8"?>
<Feature  Id="bec7f3a3-e53e-4c6e-b3d6-83604b8092bb"
          Title="My Demo MasterPage"
          Description="このフィーチャーは、カスタムマスターページフィーチャーのためのデモ用です"
          Version="1.0.0.0"
          Scope="Site"
          Hidden="False"
          DefaultResourceFile="core"
          xmlns="http://schemas.microsoft.com/sharepoint/">
 <ElementManifests>
  <ElementManifest Location="<先ほどの XML マニフェストの入ったフォルダ名>\<XML マニフェストのファイル名 (.xml)>"/>
 </ElementManifests>
</Feature>

(上記で italic の箇所は、フォルダ構成や xml のファイル名にあわせて設定しておきましょう)

では、上記の手順 3 に進みます。
まず、上記の XML (feature.xml でなく、最初に作成した Element マニフェストの XML です) の記述にあわせて、フォルダに .master ファイルと .png ファイル (プレビューイメージ) を配置します。第 4 回 (ワークフロー編) で記載したときと同じ手順で、ソリューションエクスプローラのプロジェクトを右クリックして、[追加] - [新しい項目] で [テンプレート] (Template) を選択し、上記で宣言した .master ファイルとイメージファイル (.png) を配置します。(下図のようになります)

イメージファイルについては、上記のマニフェスト (.xml) で、IncludeFolders="??-??" と記載していましたので、下図のようにロケールのサブフォルダ (ja-JP) を作成して入れている点に注意してください。

ここでは、スタイル (.css) やイメージファイルなどを使用していない想定ですが、もしマスター (.master) から、カスタムのスタイルシートやイメージファイルなどを使用している場合には (というか、製品開発などの場合、ほとんどそうなりますね)、それらのファイルも上記のテンプレート (Template) の手法を使って、

%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1041\STYLES

%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1041\IMAGES

などの SharePoint から参照できるフォルダに配置しておくと良いでしょう。(その他のファイルも同様です)

以上で、カスタムマスターページのフィーチャーがインストールされるようになりました。

しかし、フィーチャーがインストールされただけでは納得されない方も多いでしょう。
第 4 回 (ワークフローのとき) と同様、サイトが作成された際に、そのサイトでこのインストールされたマスター (.master) フィーチャーを既定のマスターとして設定するように、Provision の処理を記述していきます。(ここからは、上記の手順 4 になります)

コードの概念としては、上記のマスターページのフィーチャーをサイトコレクションで Activation し、このアクティブ化された
カスタムマスターページを既定のマスターとして設定すれば良いのですが、画面から実施して頂くとわかりますが、カスタムマスターページを使用するには、その前に [発行インフラストラクチャー] と呼ばれるフィーチャーもアクティブ化しておく必要があります。
ですので、プロビジョニングハンドラー (SiteProvisioning.cs) では、以下の通りのコードで設定をおこなう必要があります。

public void OnActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web;
    if (properties.Feature.Parent is SPWeb)
        web = (SPWeb)properties.Feature.Parent;
    else
        web = ((SPSite)properties.Feature.Parent).RootWeb;

    SetMasterPage(web);
}

private void SetMasterPage(SPWeb web)
{
    web.AllowUnsafeUpdates = true;

    // 発行インフラストラクチャーフィーチャーの Activate
    web.Site.Features.Add(new Guid("f6924d36-2fa8-4f0b-b16d-06b7250180fa"), true);

    // インストールしたカスタムマスターページの Activate
    web.Site.Features.Add(new Guid("bec7f3a3-e53e-4c6e-b3d6-83604b8092bb"), true);

    // このサイトにカスタムマスターページを設定
    web.MasterUrl = web.Site.ServerRelativeUrl + "/_catalogs/masterpage/MyDemoMaster.master";
    web.Update();
}

これですべて完成です。 

例により、SiteProvisioning.cs のデバッグは、w3wp.exe へのプロセスアタッチで実施できます。

(このサンプルソースは、本ブログに添付しておきます)

 

【VS08 で実現する SharePoint UX (3)】 Silverlight 2 を使った Web Part

環境 :
Microsoft Office SharePoint Server (MOSS) 2007 SP1
Visual Studio 2008
Visual Studio 2008 用 Microsoft Silverlight Tools Beta 2
(※以下は、Beta 1 でも動きます)
Visual Studio Extensions for Windows Share Service 3.0 (VSeWSS) Version 1.2

VS 08 で実現する SharePoint UX 

  1. はじめに (VSeWSS 1.2 リリースの真価)
  2. ASP.NET AJAX を使った Web Part
  3. Silverlight 2 を使った Web Part

こんにちは。

今回は、Silverlight 2 を Web パーツで使用する方法について簡単なサンプルを例に記載してみます。(ここでも、構築したサンプルプロジェクトを本ブログに添付しておきます。このサンプルでは、MOSS (または WSS) SP1 が必要となりますので注意をしてください。)

Silverlight 2 を使用した Web パーツのサンプルについては、このブログでも以前少しふれた Silverlight Blueprint (米国の Office Developer Conference でビルゲイツが発表したもの)、もしくは、ダウンロードセンターの 「PPTs and Demos for Introductory SharePoint Developer Modules」に、実際のコードサンプルやデモが含まれています。
ここでは、基本的な考え方のみを記載しますので、その後、これらに含まれているサンプルをいろいろみて頂くと、その他の応用例なども見て理解を深めていくことができるでしょう。

まず、簡単に予備知識を記載します。

環境構築と準備

Silverlight 2 は、ベータ版を使っていろいろ楽しんでおられる方にとってはもうご存じかもしれませんが、Visual Studio 2008 上で提供されるプロジェクトテンプレートなども存在しており Visual Studiio 2008 と組み合わせて簡単にコントロールを構築することなどができるようになっています。従来 (Silverlight 1) は JavaScript などがベースとなっていて、ビジネス系のアプリというと AJAX との併用というシナリオが思いつくのですが、Silverlight 2 では、XAML により WPF アプリケーションにも匹敵する処理と表現が可能となっています (厳密には、いろいろと相違がありますのでご注意を)。まだベータ版ではありますが、最近は Beta 2 がダウンロードできるようになっており、ここでもこの最新の Beta 2 を使用してみたいと思います。
ここでは Silverlight 2 そのものについては詳述しませんが、MSDN の記事はもちろん、エバンジェリストの 川西 や、高橋大野 のブログなどをウォッチしていると最新の情報やおもしろいサンプル、ポイントなど、最新の情報をいろいろと紹介してくれていますので、是非参考にしてみてください。

さて、Silverlight を Web パーツ上で実装する際には、下記の System.Web.UI.SilverlightControls.Silverlight クラスを Web パーツ上に配置するという簡単な概念で実装できます。
このクラスですが、実は、ASP.NET AJAX の IScriptControl インタフェースを実装 (Implement) して作成されています。つまり、このコントロールを使用して Silverlight を使用する際には、前回記述した ASP.NET AJAX も内部で使用されているということになります。ですので、一見関係ないように思われるかもしれませんが、今回ご紹介する Silverlight 2 を使用したサンプルを構築するには、前回の AJAX のときと同じように web.config を変更するなどの ASP.NET AJAX の設定が前提となります。

設定は前回と同じで構いませんが、1 つだけ、System.Web.UI.SilverlightControls.Silverlight というコントロールを内部で使用しますので、前回の設定に加えて、念のため、以下の SafeControl を web.config に追加しておきましょう。(もしかしたら、要らないかも、、、ちょっと試してませんが、、、)

<SafeControl Assembly="System.Web.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI.SilverlightControls" TypeName="*" Safe="True" />

マスターページ (.master) への ScriptManager の設定も、前回同様、忘れずに実施しておきましょう。(前回記載し忘れましたが、これを Web パーツの中からコードで追加することもできます。が、複数の Web パーツを張り付けた際にコンフリクトしないように工夫が必要です。)

また、Silverlight のコントロールは、object としてブラウザ上にダウンロードされます。IIS の SharePoint が稼働している Web サイトの設定で、MIME の種類として以下を追加しておきます。

拡張子 : .xap
MIME の種類 : application/x-silverlight-2-b1

また、サーバ側の Silverlight SDK の中の System.Web.Silverlight.dll (%ProgramFiles%\Microsoft SDKs\Silverlight\v2.0\Libraries\Server) を SharePoint の Web サーバの仮想フォルダの bin ディレクトリ (通常は、%wwwroot%\wss\VirtualDirectories\<ポート番号>\bin) に配置します。

これで準備が整いました。

Silverlight 2 コントロールの作成

(ぜんぜん関係ありませんが、今日は Web キャストの収録も控えているので、大急ぎで記載します、、、、誤字がありましたらすみません、、、) 

では開発を実施していきましょう。
まずは、Silverlight 2 のコントロールを (何でも構いませんので) 作成してみましょう。私ではいつもデザインセンスがないので、今回は エバンジェリストの大野 にお願いして、以下のような SL2App1 というアプリケーションを作成してもらいました。(今回の話とは関係ありませんが、大野が Expression Blend を使った 10 分足らずで XAML を作成してしまいました、、、センスのある人ならあっという間にできてしまうんですねぇ、、、)

http://tsmatsuz-w.members.winisp.net/blogs/download/20080609_SL2App1.zip

このプロジェクト (.zip) を展開し、リビルドをおこなって F5 などで実行してみてください。

つぎに、このビルドされた Silverlight 2 アプリケーション本体である SL2App1.xap を Web パーツ上から見えるように、%wwwroot%\wss\VirtualDirectories\80 に ClientBin のサブフォルダを作成し、SL2App1.xap をここに配置 (コピー) します。
なお、製品開発などでソリューションパッケージ (.wsp) からインストールをしてしまいたい場合などは、インストールしやすいように、例えば、SharePoint hive の ISAPI フォルダ (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\12\ISAPI) にこの .xap を配置して、_vti_bin/<モジュール名>.xap を参照しても構いません。(要は、この .xap がブラウザから読み込めれば OK です !)

Web パーツの作成 

では、VSeWSS 1.2 の出番です!

  1. "Silverlight 2 とも美しく Integrate された Visual Studio 2008" を使って、[Web Part] のプロジェクトを新規作成します。(ここは、日本語版が出たら、[Web パーツ] という名称になることでしょう、、、いまは英語版でご辛抱ください)

  2. つぎに、参照の追加で、ASP.NET AJAX のコアのアセンブリである System.Web.Extensions (System.Web.Extensions.dll) と、System.Web.Silverlight (System.Web.Silverlight.dll) を追加します。

  3. では、コードを記載します。
    まず、クラス内に、上記で述べた System.Web.UI.SilverlightControls.Silverlight のオブジェクトを定義します。

    [Guid(" . . . . . . .
    public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart
    {
        System.Web.UI.SilverlightControls.Silverlight silverlightControl = null;

        . . . . . . .

  4. デフォルトで実装されている CreateChildControls の override メソッドに以下の通り実装します。

    protected override void CreateChildControls()
    {
        silverlightControl = new System.Web.UI.SilverlightControls.Silverlight();
        silverlightControl.ID = "HelloMySL2Xaml";
        silverlightControl.Source = "/ClientBin/SL2App1.xap";
        silverlightControl.Width = new System.Web.UI.WebControls.Unit(800);
        silverlightControl.Height = new System.Web.UI.WebControls.Unit(600);
        // Beta 1 をお使いの方は、念のため、以下も設定しておきましょう
        //silverlightControl.Version = "2.0";

        this.Controls.Add(silverlightControl);
    }

  5. これだけで終わりです。
    あとは、例によってプロジェクトのプロパティの [デバッグ] タグでインストール (デバッグ) 先の SharePoint サイトコレクションの URL を記載し、WebPart1.webpart、WebPart1.xml を編集して、この Web パーツの名前やグループ名などを設定して配置をおこないます。 

配置した Web パーツを SharePoint 上から参照すると、以下のように、上記の Silverlight 2 コントロールが表示され、[Press Me] ボタンを押すと、ニョキッとバーが伸びるのが確認できるでしょう。

このように、Visual Studio 2008 のさまざまな仕組みを使って、SharePoint とは思えないようなユーザビリティ (<- というのは失礼な言い方ですが、、、) のさまざまなコントロールを配置して使用することができます。SharePoint がデフォルトで持っていないような独自のグラフコントロールの作成や、高度な描画アプリを SharePoint と組み合わせたい場合などには、良い選択肢でしょう。 
SharePoint が持っている Office 連携、電子フォーム、コンテンツ管理、ワークフローなどの機能をそのまま活用して、ユーザビリティを製品独自のもので隠ぺいしてしまいたいようなニーズとして活用することも可能です。

こうしたニーズを考えはじめると、実際の Web パーツ開発では、SharePoint リストのデータと連携する (例 : InfoPath の Web フォームで集計されたデータを上記のようにビジュアルに見せたい、とか) などのデータバインドの処理なども必要となってくるはずです。codeplex には SharePoint 上で Photo List を表示するといった Silverlight のサンプルもありますし、上記でご紹介した ダウンロードサンプル ではこうしたデータバインドのヒントとなるサンプルも含まれています。
このダウンロードサンプルでは、SharePoint リストのデータを SharePoint が提供している Web サービス (SOAP の Web サービス) を介してデータを取得し、コレクション (変数) に入れ、Silverlight の ListBox コントロールとこのコレクションの変数を XAML を使ってバインドするという簡単なサンプルになっています (接続先のサイトの情報などは、Silverlight オブジェクトへのパラメータとして渡しています)。こうした連携方法だけではなく、Data Service などを介したデータ連携など、「アプリケーションの部品」 として構築していく中で、さまざまなシナリオを想定したその他の応用も考えられます。(こうした部品も、VSeWSS 1.2 のリリースで、今後はますます増えてくることでしょう。)

【VS08 で実現する SharePoint UX (2)】 ASP.NET AJAX を使った Web Part

環境 :
Microsoft Office SharePoint Server (MOSS) 2007 SP1
Visual Studio 2008
Visual Studio Extensions for Windows Share Service 3.0 (VSeWSS) Version 1.2
AJAX Contorol Toolkit 3.0.20229 (.NET Framework 3.5 対応版)

VS 08 で実現する SharePoint UX 

  1. はじめに (VSeWSS 1.2 リリースの真価)
  2. ASP.NET AJAX を使った Web Part
  3. Silverlight 2 を使った Web Part

こんにちは。

では、VSeWSS 1.2 を使った Visual Studio 2008 によるユーザエクスペリエンスの最初として、ASP.NET AJAX を使用した開発について実際のサンプルをみながらご説明していきます。

今回は、エバンジェリスト 小高 のマネをして、価格.com のサービスに接続して処理をおこなってみます。
テキストボックスにキーワードを入れると、AutoComplete を使用して「価格.com」に接続して商品情報の候補一覧を表示し、選択をおこなうと「価格.com」に接続して商品の写真を表示するというサンプルを SharePoint の Web パーツとして構築してみましょう。(本ブログに、今回構築したプロジェクトを添付しておきます。)

このシナリオでは、ASP.NET AJAX の UpdatePanel、AJAX Control Toolkit (コミュニティが提供する AJAX の部品)、Json の Web サービスとの連携など一連のテクノロジーを使用していますので、 テクノロジーのベースを理解するには良いサンプルではないかと思います。

実装するコンポーネントの流れとしては、ブラウザ上の AutoComplete のコンポーネント (JavaScript, AJAX Contorol Toolkit の1 部品) から Json を使用して同一マシンの Web サービスに接続し、この Web サービスの中で「価格.com 」のサービスを呼び出して商品候補の一覧を取得して AutoComplete に表示し、そしてこの AutoComplete Extender によりテキストボックスの内容が変更されたら、UpdatePanel の非同期ポストバックによりイメージ (img) の更新をおこなうという流れになります。

ASP.NET AJAX というと、耳慣れない方は、Microsoft のテクノロジーに隠ぺいされた "複雑な" 世界を想像される方も居られるかもしれませんが、その構造は非常にきれい、かつオープンにできています。そして、この "構造" さえ理解しておけば、SharePoint に限らず、さまざまな場面で設定や応用をおこなうことができます。
このあたりは、かなり昔になりますが、@IT「ASP.NET AJAXを使いこなす」 に "中の仕組み" を中心に記載しましたので、もし ASP.NET AJAX というものそのものに不慣れな方は、この記事を先に参照していただくと良いかもしれません。(なお、基本的構造は Visua Studio 2008 に同胞された ASP.NET AJAX 3.5 でも同じですが、同記事は Visual Studio 2005 時代のものですので注意してください。)
例えば、こうした "構造" を理解しておくと、下記にご紹介する方法以外に、JavaScript のライブラリだけを使用して同様の処理が構築できることにも気づくことでしょう。あるいは、AutoComplete Extender のような既成のコンポーネントではなく、自作のまったく独自なコンポーネントも同じように組み込めることがわかるはずです。

.NET Framework 3.5 では、この ASP.NET AJAX が ASP.NET の中のコンポーネントとして含まれています。開発環境では、Visual Studio 2008 のインストールによって .NET Framework 3.5 も同時にインストールされますが、SharePoint の本番環境でこの新しい ASP.NET AJAX 3.5 を使用するには、.NET Framework 3.5 をのランタイムをインストールしてください。(3.0 以降の追加のアセンブリ、クラス、などが追加されます)

では、早速、上記のアプリを構築してみます。

環境準備

まず準備として、SharePoint のサーバ上で、この ASP.NET AJAX や AJAX Contorol Toolkit (コミュニティが作成した部品群です。ここ からダウンロードできます) が使用できるように設定をおこなっておきます。

  1. SharePoint のサイトの web.config を開き、以下の通り変更しておきましょう。(これを設定しなくても動きますが、サーバ上でデバッグができなくて不便です)

    <compilation batch="false" debug="true">

  2. ASP.NET AJAX では、上記の記事にも記載しているようにサーバ側の dll を呼び出して、結局のところ JavaScript などを生成しています。
    ASP.NET AJAX で使用する System.Web.Extensions.dll などは .NET Framework 3.5 のインストール (つまり、Visual Studio 2008 のインストール) と共にインストールされていますが、AjaxContorlToolkit.dll については別途ダウンロードしたモジュールですのでインストールされていません。したがって、AJAX Contorol Toolkit の zip ファイルを展開し、この中の AjaxContorlToolkit.dll を SharePoint の Web サーバの bin フォルダ (通常は、<www root dir>\wss\VirtualDirectories\<port 番号>\bin です) に配置しておきます。

  3. サーバ上の処理でこれら dll を使用して処理がおこなえるように、web.config を変更します。変更方法については、以前このブログでもご紹介しましたが、 http://sharepoint.microsoft.com/blogs/mike/Lists/Posts/Post.aspx?ID=3 にまとめてくれています。
    ただし、以下に注意しましょう (追加で設定が必要なものもありますので、意味を理解しながら設定しましょう)。
    • AjaxControlToolkit のアセンブリなど、使用するその他のアセンブリがある場合は、この設定も同様に実施します。
    • アセンブリの正式名に注意してください。例えば、ASP.NET AJAX 1.0 を使用している場合と、ASP.NET AJAX 3.5 を使用している場合では以下の通りアセンブリの正式名が異なります。(Ajax Control Toolkit についても同様です)
    • IIS 6 では <httpHandler>, <httpModules> を設定、IIS 7 (統合モード) では <handlers>, <modules> を設定します (つまり、IIS 7 統合モードでは、一部、タグが変更されています)。
      なお、Visual Studio 2008 で Web アプリケーションを作成していただくとわかりますが、<validation validateIntegratedModeConfiguration="false"/> としておくと、エラーが発生することなく両方 (IIS 6、IIS 7 統合モード) に対応して双方のタグを入れておくといったことも可能です。

      今回は、Ajax Control Toolkit を使用し、かつ私の環境では IIS6 を使用していますので、以下の追加をおこなうことになります。(IIS 7 の場合は、下のほうの設定内容が異なりますので注意してください)

      <configuration>
        <configSections>

          . . . . . . .

          <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
              <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
              <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
              </sectionGroup>
            </sectionGroup>
          </sectionGroup>

          . . . . . . .
        </configSections>

        . . . . . . .

        <SharePoint> . . .
          <SafeControls>

            . . . . . . .

            <SafeControl Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*" Safe="True" />
            <SafeControl Assembly="AjaxControlToolkit, Version=3.0.20229.20843, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" Namespace="AjaxControlToolkit" TypeName="*" Safe="True" />

            . . . . . . .
          </SafeControls> . . .
        </SharePoint>

        . . . . . . .

        <system.web> . . .
          <httpHandlers>

            . . . . . . .

            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />

            . . . . . . .

          </httpHandlers>

          . . . . . . .

          <httpModules>

            . . . . . . .

            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

            . . . . . . .

          </httpModules>

          . . . . . . .

          <compilation . . . >
            <assemblies>

              . . . . . . .

              <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
              <add assembly="AjaxControlToolkit, Version=3.0.20229.20843, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />

              . . . . . . .

            </assemblies> . . .
          </compilation>

          <pages . . . >

              . . . . . . .

            <!-- 今回、タグを使用することはないので、ここは要りませんが、、、(念のため)  -->
            <controls>
              <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
              <add tagPrefix="cc2" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit, Version=3.0.20229.20843, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
            </controls>
          </pages> . . .
        </system.web>

        . . . . . . .

        <system.web.extensions>
          <scripting>
            <webServices>
              <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
              <!--
              <authenticationService enabled="true" requireSSL = "true|false"/>
            -->
              <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and writeAccessProperties attributes. -->
              <!--
            <profileService enabled="true"
                            readAccessProperties="propertyname1,propertyname2"
                            writeAccessProperties="propertyname1,propertyname2" />
            -->
            </webServices>
            <!--
            <scriptResourceHandler enableCompression="true" enableCaching="true" />
            -->
          </scripting>
        </system.web.extensions>
      </configuration>

Web サービスの作成

それでは次に、AutoComplete Extender から呼び出されて 「価格.com」 からデータを取得する Json の Web サービスを作成します。 

  1. まず、既存の SharePoint の Web Service を AJAX 対応にすることはできませんのでおぼえておいてください (つまり、既存の SharePoint Web Service に ScriptService 属性を設定することはできず、必ず新規に Web サービスを構築することになります)。

    Visual Studio 2008 を開き、[Web] - [ASP.NET Web サービス アプリケーション] を新規作成します。(.asmx の名前、サービス名、などはわかりやすい名前にしておきましょう。)

  2. Web サービスを以下の通り実装してみましょう。

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class KakakuSearchService : System.Web.Services.WebService
    {
        [WebMethod]
        public string[] GetSelectableNames(string prefixText)
        {
            ArrayList items = new ArrayList();

            Encoding e = Encoding.GetEncoding("shift_jis");
            string str = HttpUtility.UrlEncode(prefixText, e);
            XmlDocument document = new XmlDocument();
            XmlReader reader = XmlReader.Create("http://api.kakaku.com/Ver1/ItemSearch.asp?Keyword=" + str + "&CategoryGroup=ALL&ResultSet=medium&SortOrder=popularityrank&PageNum=1");
            document.Load(reader);
            XmlNodeList nodeList = document.SelectNodes(@"/ProductInfo/Item");
            foreach (XmlNode node in nodeList)
            {
                ProductItem productItem = new ProductItem();
                foreach (XmlNode attrnode in node)
                {
                    switch (attrnode.Name)
                    {
                        case "ProductID":
                            productItem.ProductID = attrnode.InnerText;
                            break;
                        case "ProductName":
                            productItem.ProductName = attrnode.InnerText;
                            break;
                    }
                }

                items.Add(productItem.ProductID + ": " + productItem.ProductName);
            }

            return (String[])items.ToArray(typeof(String));
        }
    }

    class ProductItem
    {
        public string ProductID, ProductName;
    }

  3. プロジェクトに署名を添付し、ビルドします

  4. 上記でビルドして作成されたコードビハインドの dll を GAC に登録します (これで、サーバ上のどこからでも厳密名でこの dll を呼び出すことができます)

  5. .asmx ファイルのマークアップを表示し、以下の通り変更します
    (public key token は、GAC の中の dll のプロパティ表示などをおこなって確認し、変更しておいてください)

    【変更前】
    <%@ WebService Language="C#" CodeBehind="KakakuSearch.asmx.cs" Class="KakakuItem.KakakuSearchService" %>

    【変更後】
    <%@ WebService Language="C#" Class="KakakuItem.KakakuSearchService, KakakuItem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d14fbbbd34865fc7" %>

  6. この Web サービスを SharePoint に配置していきます。
    通常、SharePoint に Web サービスを配置する処理は面倒なのですが (※1 ご参考のため下記に記載しておきました)、今回のように Json / REST などによる通信の場合には SOAP の面倒な手続きは必要ありませんので、上記の .asmx を SharePoint の _vti_bin 仮想ディレクトリで参照できるように以下にコピーするのみです。

    %ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI

Web パーツの作成

  1. では、ASP.NET AJAX を使用した Web パーツを作成していきましょう。
    まず、SharePoint Designer などを使用し、この Web パーツを使用するマスターページ (.master) に以下のように ScriptManager を (form タグの中に) 設定しておきます。今回は、UpdatePanel も使用しますので、EnablePartialRendering を忘れずに true に設定しておきましょう。
    この設定によって、必要な JavaScript のライブラリが HTML 上に定義されるようになります。

    <asp:ScriptManager runat="server" ID="ScriptManager1" EnablePartialRendering="true" />

    製品開発などの場合は、カスタムマスターページと共にデプロイをおこない、このカスタムのマスターページ上にあらかじめ上記のタグを入れておくと良いでしょう。

  2. VSeWSS 1.2 で [SharePoint] - [Web パーツ] のプロジェクトを新規作成します。

  3. プロジェクトに System.Web.Extensions.dll と AjaxControlToolkit.dll への参照を追加します (AjaxControlToolkit.dll は GAC に入っていないので、ローカルのファイルから参照してください)

  4. では、Web パーツの中身を構築していきます。
    通常、ASP.NET AJAX では、デザイナーを使用してドラッグアンドドロップをおこなってサーバ側のコントロールを挿入し、プロパティ設定などをおこなうなどして、マークアップファイル(.aspx) を作成していきますます。しかし Web パーツを構築する場合は、このマークアップのページ内に挿入される部品になるため、こうしたテキストボックスの挿入や、ラベルの挿入などの処理をコードで記述する必要があります。

    このため、今回は、以下のようなコードを記述します (ASP.NET AJAX を使ったことがある方は、それほど難しいことをしていないのがおわかり頂けるでしょう、、、)

    public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart
    {
        Literal label1 = new Literal();
        TextBox textbox1 = new TextBox();
        Literal lCrLf = new Literal();
        UpdatePanel updPanel1 = new UpdatePanel();
        Image photoImage = new Image();
        AjaxControlToolkit.AutoCompleteExtender autoCompleteCtrl = new AjaxControlToolkit.AutoCompleteExtender();

        . . .

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            // SharePoint で UpdatePanel を使うときは、この関数 (下記) を "おまじないで" 呼び出しましょう !
            EnsurePanelFix();

            // ラベルを追加
            label1.Text = "商品 (キーワードを入力して選択します) : ";
            this.Controls.Add(label1);

            // テキストボックスを追加
            textbox1.ID = "SearchStringTextBox";
            textbox1.Width = 300;
            textbox1.AutoPostBack = true;
            textbox1.TextChanged += new EventHandler(autoCompleteTextbox_TextChanged);
            this.Controls.Add(textbox1);

            // 改行を追加
            lCrLf.Text = "<br />";
            this.Controls.Add(lCrLf);

            // UpdatePanel のトリガーを設定 (テキストボックスが更新されたら Update !)
            updPanel1.ChildrenAsTriggers = false;
            updPanel1.UpdateMode = UpdatePanelUpdateMode.Conditional;
            AsyncPostBackTrigger updTrigger1 = new AsyncPostBackTrigger();
            updTrigger1.ControlID = "SearchStringTextBox";
            updTrigger1.EventName = "TextChanged";
            updPanel1.Triggers.Add(updTrigger1);

            // UpdatePanel にイメージコントロールを追加
            updPanel1.ContentTemplateContainer.Controls.Add(photoImage);

            // UpdatePanel を Web パーツに追加
            this.Controls.Add(updPanel1);

            // さらに、上記のテキストボックスに AutoComplete Extender を設定
            autoCompleteCtrl.MinimumPrefixLength = 1;
            /*****
            (ドメインをまたがったデータソースへのアクセスはブラウザの設定によってエラーとなるため、相対パスで記載)
             *****/
            autoCompleteCtrl.ServicePath = "/_vti_bin/KakakuSearch.asmx";
            autoCompleteCtrl.ServiceMethod = "GetSelectableNames";
            autoCompleteCtrl.TargetControlID = "SearchStringTextBox";
            this.Controls.Add(autoCompleteCtrl);
        }

        // テキストボックスが変更されたときのイベント処理
        // (価格.com から写真の URL を取得して表示)
        void autoCompleteTextbox_TextChanged(object sender, EventArgs e)
        {
            photoImage.Visible = false;

            if (textbox1.Text.Length > 0)
            {
                string[] productInfo = textbox1.Text.Split(new Char[] { ':' });
                if (productInfo.Length > 0)
                {
                    Encoding enc = Encoding.GetEncoding("shift_jis");
                    string str = HttpUtility.UrlEncode(productInfo[0], enc);
                    XmlDocument document = new XmlDocument();
                    XmlReader reader = XmlReader.Create("http://api.kakaku.com/Ver1/ItemInfo.ashx?ProductID=" + str + "&ResultSet=medium");
                    document.Load(reader);
                    XmlNodeList nodeList = document.SelectNodes(@"/ProductInfo/Item/ImageUrl");
                    foreach (XmlNode node in nodeList)
                    {
                        photoImage.ImageUrl = node.InnerText.Trim();
                        photoImage.Visible = true;
                        break;
                    }
                }
            }
        }

        private void EnsurePanelFix()
        {
            if (this.Page.Form != null)
            {
                String fixupScript = @"
     _spBodyOnLoadFunctionNames.push(""_initFormActionAjax"");
     function _initFormActionAjax()
     {
       if (_spEscapedFormAction == document.forms[0].action)
       {
         document.forms[0]._initialAction =
         document.forms[0].action;
       }
     }
     var RestoreToOriginalFormActionCore =
       RestoreToOriginalFormAction;
     RestoreToOriginalFormAction = function()
     {
       if (_spOriginalFormAction != null)
       {
         RestoreToOriginalFormActionCore();
         document.forms[0]._initialAction =
         document.forms[0].action;
       }
     }"
    ;

                // ここのクラス名 (WebPart1) は、作成したクラスにあわせて変えておきましょう !
                ScriptManager.RegisterStartupScript(this,
                  typeof(WebPart1), "UpdatePanelFixup",
                  fixupScript, true);
            }
        }

    }

  5. あとはビルドと配置をおこなって終了です。

    この Web Part プロジェクトのプロパティ画面の [デバッグ] タブで、デバッグ先のサイトの URL を配置先 (デバッグ先) のURL に設定します。また、プロジェクトに含まれている .webpart や .xml を編集し、適当に属性 (Title, Description など) も指定しておきましょう。(むろん、そのままでも動きますが、、、)

    なお、配置した Web パーツは、setup.bat でアンインストールをおこなってもギャラリーにエントリは残ってしまいます(Web パーツそのものはアンインストールされますが)。その際には、SharePoint Designer で _catalogs/wp を展開して該当の Web パーツを削除しておいてください。(配置でエラー「特定の言語に固有の ...」が表示される際には、再度、プロジェクトを開きなおしてから配置します)

    VSeWSS を使用していますから、F5 で簡単にデバッグもおこなえます!

以上で完了しました。

テキストボックスに「マイクロソフト」などのキーワードを入力すると、価格.com のサービスに接続して、「マイクロソフト」のキーワードで人気のある上位 5 位までの商品が AutoComplete で表示されます。そしてこの AutoComplete の項目を選択すると、選択した項目の写真が表示されるようになります。
そしてこれらはすべて、ページをポストバックすることなく、ページの一部を部分更新するなどで表示されます。

 

今回の例はまだ非実用的な事例かもしれませんが (キーワードを入れて AutoComplete で選択?ちょっと変な動きですね、、、)、足りない部品については @IT「ASP.NET AJAXを使いこなす」 でご紹介しているような方法で、独自の ASP.NET AJAX の部品と連携させて応用するとより実用的な形で構築することができます。

製品レベル開発のような高度なユーザインタフェースが求められるケースでは、SharePoint が持つ「コンテンツ管理」、「ワークフロー」、「電子フォーム」などのメリットをそのまま活用し、必要な場面ではこうした形で利用者が意識せずに社内のビジネスの流れと外部の up to date な情報などを連携させてユーザビリティの優れたビジネス部品を製品の一部として提供していくなど (例: 経費申請処理において価格情報をアウトソース先の外部の情報と連携させる、など)、さまざまな形で応用していくことができるでしょう。

 

【関連情報】
MSDN : Walkthrough: Creating a Basic ASP.NET AJAX-enabled Web Part
http://msdn.microsoft.com/en-us/library/bb861877.aspx

出張のため、続きは 3 日後に掲載します 。。。

※1  【ご参考】 SOAP ベースの Web サービスを SharePoint に登録する場合

SOAP の Web サービスを SharePoint 上に配置する際は、ざっくり記述すると、以下の手順を取ります。

  1. .asmx ファイルをいったん _layouts フォルダなどへ配置する
  2. disco.exe コマンドにより、上記の .asmx を参照して .disco ファイル、.wsdl ファイルを生成する
  3. 作成された .disco, .wsdl の拡張子を .aspx に変更し、ファイル内にスタティックに記述されているアドレスなどの情報を 関数で取得するように変更する
  4. _vti_bin ディレクトリに .asmx と上記の .aspx (もともと .disco、.wsdl であったもの) を配置する
  5. spdisco.aspx ファイルにエントリを登録する

結構面倒ですね、、、
カスタムな Web サービスの配置方法の手順詳細については、http://msdn2.microsoft.com/en-us/library/ms464040.aspx に記載されていますのでご参照ください。

 

【VS08 で実現する SharePoint UX (1)】 はじめに (VSeWSS 1.2 リリースの真価)

VS 08 で実現する SharePoint UX 

  1. はじめに (VSeWSS 1.2 リリースの真価)
  2. ASP.NET AJAX を使った Web Part
  3. Silverlight 2 を使った Web Part

こんにちは。

以前このブログでも ご紹介 したVisual Studio Extensions for Windows Share Service 3.0 (VSeWSS) の Visual Studio 2008 対応版である Version 1.2 が、まだ英語版ではありますが、お約束通り 6 月にリリース致しました。(日本語版についてはもう少々お待ちください)

http://www.microsoft.com/downloads/details.aspx?FamilyID=7bf65b28-06e2-4e87-9bad-086e32185e68&displaylang=en

英語版ではありますが (メニューなどはすべて英語ですが)、 CAML など普通に日本語は使用できますので、すぐに試してみたい方はこのバージョンでお試しいただくことも可能です。ただし、プロジェクトテンプレートが英語のロケールのフォルダに配置していますので、例えば C# であれば、

%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\SharePoint\1033

のプロジェクトテンプレートを

~My Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C# に配置するなどして使用してください。

また、旧バージョン (VSeWSS 1.1) で作成した Web パーツやサイト定義などもきれいにアップグレードされるようになっています。

さて、この VSeWSS が製品開発者にとってどれほどインパクトの大きなものであるかは、こちら でもご紹介しました。今回、これが Visual Studio 2008 に対応したという一見すると小さなアップデートですが、実際にこのツールに頼って開発をされている方にとっては大変大きなインパクトであることがおわかり頂けると思います。
例えば、こちら でも記載したように、ワークフローをサーバ側のインストーラとも言えるソリューションパッケージ (.wsp) にきれいに (思いのままに) 組み込むことができるようになっていましたが、SharePoint のワークフロー作成は、ご存じの通り Visual Studio 2008 で各段にやりやすいものとなっています。ですので、今までは、Visual Studio 2005 と Visual Studio 2008 の両方をインストールして、ワークフロー作成は 2008 で実施し、作成したワークフローを 2005 の VSeWSS のプロジェクトに組み込むという面倒な作業をしいられていた方も居られるかもしれません。

しかし、インパクトはワークフローだけに留まりません。
Visual Studio 2008 では、標準で ASP.NET AJAX の開発ができるようになっています。また Silverlight 2 (まだベータ版ですが) を使用した、非常に柔軟なユーザエクスペリエンスも実装できます。LINQ もあります。これから先は、REST を意識したコンポーネント (エバンジェリスト小高も書いていた こちら など) も登場します。
これらを使用する場合、今までなら、Visual Studio 2008 で作成をしておいて、作成された dll や周辺のファイルを Visual Studio 2005 上の VSeWSS に組み込むという少し面倒な環境が必要であったわけですが、これらもすべて 1 つの環境で柔軟に構成でき、より現実的な開発のシナリオとなってきたわけです。

今回は、こうした点に注目し、高度な UX (ユーザエクスペリエンス) と Web パーツ (webparts) 実装にフォーカスして、この辺りの恩恵を実感して頂こうと思います。

 

Posted by tsmatsuz | 1 Comments
Filed under:

[Info] フォーラム「SharePoint - インストールと設定、管理」 開設

こんにちは。

SharePoint の開発者の方向けに、 課題やノウハウの共有を目的に 開設 され、運営されてきた SharePoint のフォーラムですが、「どう設定するの?」、「・・・が動かないのはコードの問題?設定の問題?」など、現実には、開発と設定(運用管理) の狭間で疑問を投稿される方も多かったかもしれません。また、「ファーム構成がうまくいかないんだけど、、、」、「Windows Server 2008 にインストールするには?」、「移行の一般的な手順を教えて」など、開発とは別の観点でのご質問や情報共有も非常にニーズが高かったと思います。(こうした投稿もいくつかございました)

こうした背景を受け、SharePoint 関連のフォーラムを以下の通り強化しました。

  • 従来からあった「SharePoint - 開発とプログラミング」に加え、「SharePoint - インストールと設定、管理」 のフォーラムを新たに開設しました

    MSDN フォーラム : SharePoint - インストールと設定、管理
    http://forums.microsoft.com/MSDN-JA/ShowForum.aspx?ForumID=2143&SiteID=7 

  • これら 2 つのフォーラム (開発者の方向け、IT Pro の方向け) を MSDN フォーラム、TechNet フォーラムの双方から閲覧・投稿できるようにしました。(それぞれ同じフォーラムにリンクされます)

 

以下、IT Pro エバンジェリスト 奥主が 掲載 している開設主旨を記載しておきます

◆ 本フォーラム開設の背景

WSS (Windows SharePoint Services) 3.0, MOSS (Microsoft Office SharePoint Server) 2007 についてはMSDNに今まで開発者の方向けのこれらを使用した開発を行うためのフォーラムを用意させていただいていました。インストールや環境設定、全体管理・SSP・サイト設定などの設定や運用管理に関する話題 を取り上げることができるように今回このフォーラムを新規開設します。米国のTechNet/MSDNフォーラムでは運用管理に関するトピックも多く投稿いただいている背景もあり、日本語でも今回開設を決定しました。

◆ 本フォーラムについて
- 本フォーラムは WSS3.0 と MOSS2007 のインストール・環境設定・全体管理など運用管理に関するトピックを取り扱うフォーラムです
。別のフォーラムの方が適している場合にはそちらをご案内する投稿をさせていただくこともあるかもしれません。

- 本フォーラムでは製品サポートのように「問題の解析」を提供するものではなく、「解決策の提示」を保証するものでもありません。利用者間でご経験を共有したり、私のようなエバンジェリストも参画、投稿をして最新情報をお伝えしたり、何かヒントをご提供したりするコミュニケーションの場としてご利用ください。製品に関してのフィードバックも歓迎です。

◆ TechNet & MSDN

本フォーラムはTechNetフォーラムとMSDNフォーラムの両方で表示されます。

◆ 最後に、、、

是非 積極的な活用をお願いいたします。米国においては MSDN/TechNetフォーラムで活発にフォーラム活動が行われており、製品に関する多くのコミュニケーションが技術者視点で使える場として成長を続けています。是非このフォーラムも日本語で利用できるそのような場として活用いただければと思います。

 

Posted by tsmatsuz | 1 Comments

[Info] MSDN オフラインセミナー : VSeWSS version 1.1 日本語版 をご紹介

こんにちは。

以前こちらのブログでも連載しましたが、VSeWSS (Visual Studio 2005 extensions for Windows SharePoint Services 3.0) version 1.1 日本語版について、その新機能をご紹介するセミナーが 2008/06/18 におこなわれます (東京)。

第 85 回 MSDN オフラインセミナー「SharePoint 開発のすすめ - 3 分で作る ソリューション パッケージ (WSP) 」
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032380054&Culture=ja-JP

カンファレンスやイベントなどでご存じの方も多いと思いますが、登壇者 (マイクロソフト 小松) はこのツールそのものの開発に関わってきたメンバーですので、これから使っていきたい方はもちろん、ソリューションパッケージ作成のポイントや本質を理解したい方、さらに踏み込んだ質問をしたい方などなど、ご参加される価値のあるイベントです。(セミナーではピンキリまですべてを短時間で説明とはいきませんが、聞きたいポイントがはっきりとしている方は、セミナーの後などでご質問されるというのも 1 つの方法です。)

テーマは、このブログでも取り上げた、ソリューションパッケージ です

 

Posted by tsmatsuz | 1 Comments

[Info] デクストップアプリとオンラインサービスの融合 - Office Live Workspace (日本語版) Beta 開始 !

こんにちは。

待っていた方も多いかもしれませんが、Microsoft Office Live Workspace 日本語ベータ版が開始されました。

http://workspace.officelive.com/

マイクロソフトでは、デスクトップの能力を使うべき箇所はデスクトップで、ネットワークサービスを使うべき個所ではインターネットを活用して融合するといった Software + Services (S + S) (← 検索にひっかけ辛い用語ですね . . .) というソリューションを展開していますが、Office Live Workspace は、そうしたコンセプトを強く意識しています。(今までのデスクトップ上の Office に変わるものではありません。融合されるサービスです。)

Microsoft Conference などのイベントで、エバンジェリスト 小高 が、VSTO を使って外部の RESTful サービスと連携させたり (Office にアドインされた商用サービスの事例)、Virtual Earth と連携させたり、といったデモをよく見せていますが、今後彼からも Office Live Workspace などを組み合わせたさまざまな方法の紹介なども発信されるかもしれません。ともあれ、こうした方面での方法や考え方の情報発信なども実施していきたいと思います。

 

Posted by tsmatsuz | 3 Comments

[Info] Hyper-V RC1 (日本語版) ダウンロード開始

こんにちは。

Hyper-V の RC1 のダウンロードが開始されました。

Hyper-V: Windows Server 2008 の主要機能
http://www.microsoft.com/japan/windowsserver2008/virtualization/default.mspx

先週土曜に実施した INETA Day 2008 のセッションでは、エバンジェリスト 奥主 が、この快適さを "開発者" の方に実感していただくためデモを準備していたようですが、夢は破れ (ご参加いただいた方はご存じかと思いますが、話すことが多すぎて時間切れ . . ) 、懇親会の裏でミニブースのごとくその快適さを披露 (実機体験) しておりました。

サーバ環境の効率運用 (実装フェーズ -> テストフェーズ -> 本番 などのライフサイクル全体を通したハードウェア資産の効率運用) という観点は勿論ですが、Visual Studio でばりばりとコードを打ち込む開発者の方にとっては、Virtual Server (Virtual PC) のあのストレスから