2008年3月

2008年3月10日 (月)

Search Server 2008 に関する情報をご紹介しておきます。

概要

以前おりば~ずさんが下記ブログに記事を書かれていますが、
「SharePoin Developer」http://sharepoint.orivers.jp/blogs/orivers/archive/2007/11/20/search-server-2008.aspx

Search Server 2008 はベースは SharePoint であり、
フェデレーション機能を利用することにより 企業内の DB 検索ができるようになったり、 MSN や Yahoo といった OpenSearchに対応した検索エンジンにクエリを送信し検索結果をSearch Server 2008 の検索結果と統合して表示できるようになっています。SharePoint Conference 2008 のキーノートでは、Search Server 2008 の検索結果を Silverlight で加工して、検索結果のうち気になるものをいくつかドラッグアンドドロップによりピックアップして別のペインで詳細を見るといったような機能拡張のデモを行っていました。単純に検索しておわりというだけではなく、検索結果のカスタマイズも視野に入れたソリューション開発というのも重要なポイントになりそうです。

またマイクロソフトさん公開されている 公式 サイトもあります。より詳しい Search Server 2008 については、そちらのサイトを参照されるとよいと思います。
http://www.microsoft.com/enterprisesearch/serverproducts/searchserver/ (英語)

評価版および RTM のダウンロード開始

3/6 付で以下の通り製品版の評価版などがそれぞれ日本語にてダウンロードできるようになっているようです。

【Search Server 2008 試用版】

無償提供される Search Server 2008 Express は RTM がダウンロードできるようになっています。

【Search Server 2008 Express】

まだ、ほんの概要を知った程度であるため、これから折を見て時間を作って環境を構築して、いろいろと機能を探ってみたいと思います。ご興味を持たれている方もいらっしゃるため、また追って記事を投稿するようにします。

ドキュメント ライブラリを使用していて、ビューを使って並び替えなどを設定する場合にフォルダにもプロパティを持たせられると、特にプロパティを使用してグループ化する際などに便利だと思うのですが、ファイルにプロパティを持たせるようには設定できないのでもどかしい思いをしていました。

恥ずかしながら、つい最近まで、私はてっきりフォルダにプロパティは持たせられないと思い込んでいましたが、実はできることがわかったのでご紹介します。

フォルダに任意のプロパティを持たせる

フォルダに任意のプロパティを持たせるには、カスタムのコンテンツ タイプを作成します。

【作業概要】

  1. コンテンツ タイプを作成する
  2. ライブラリに1.で作成したコンテンツ タイプを割り当てる
  3. 既定の"新しいフォルダ"メニューを非表示にする
  4. ビューをカスタマイズする

コンテンツ タイプの作成

  1. [サイトの設定] ページにアクセスします。
  2. [ギャラリー] 内の [サイト コンテンツ タイプ] をクリックします。
  3. [作成] をクリックします。
  4. "名前" に任意の名前を指定します。[親コンテンツ タイプの選択元] から "フォルダ コンテンツ タイプ" を指定し、[親コンテンツ タイプ] として "フォルダ" を選択します。残りは既定知のままで構いませんので、[OK] をクリックします。Folderwithproperty_1
  5. サイト コンテンツ タイプの設定画面が表示されるので、ここで作成したい列(プロパティ) を追加します。たとえば私は "プロジェクト名" という列を追加してみました。

    Contenttypecustomfolder

ライブラリにコンテンツタイプを割り当てる

  1. 任意のドキュメント ライブラリを開きます。
  2. [設定] - [ドキュメント ライブラリの設定] の順にクリックします。
  3. [全般設定]セクションの[詳細設定]を開き、"コンテンツ タイプの管理を許可する" を "はい" に変更し、[OK] をクリックします。
  4. [コンテンツ タイプ] セクションが表示されるので、"既存のサイトコンテンツ タイプから追加" をクリックします。
  5. 作成したコンテンツタイプを追加します。私は、作成したコンテンツタイプを "ユーザー設定のコンテンツタイプ" グループとして指定してしたので、このグループを選択元としています。
    Addcustomfoldercontenttype
  6. [OK] をクリックします。

既定の "新しいフォルダ"メニューを非表示にする

  1. [全般設定]セクションの[詳細設定]を開き、"コンテンツ タイプの管理を許可する" を "はい" に変更し、[OK] をクリックします。
  2. "[新規] メニューに [新しいフォルダ] コマンドを表示する" を "いいえ" に変更します。

ビューを変更する

以上の手順で基本的な設定は終わっていますので、最後に追加した列を表示するようビューを調整するなどします。

[図.フォルダをプロパティ名でグループ化]

Groupbyfolder

2008年3月 7日 (金)

前回までの内容を踏まえて、

"タスクリストの「すぐに通知する」となっている変更通知メール"

をカスタマイズしてみます。わかりやすくかつシンプルにするため、今回はテキスト形式のメールっぽくなるように変更してみたいと思います。

※2008.5.30
テキスト形式となると書いておりましたが、数名の方にご指摘いただきContent-Typeとしてはテキストにはできないようなので、「テキスト形式っぽく」と訂正いたしました。テキスト形式にならなくとも、カスタマイズ方法の参考にはなるかと思いますので引き続き掲載は致します。

[図.カスタマイズした通知メール]
Alertplaintextmail

(※図では、テキストメールを確認しやすいように、Outlook 2007 ではなくフリーウェアの edMax を使ってみています)

作業概要

  1. AlertTempates.xml をコピーして、新たに "MyCustomAlertTemplates.xml" という名前で保存します
  2. MyCustomAlertTemplates.xml を編集します
  3. stsadm.exe を使用し、カスタムテンプレートを登録します
  4. IIS を再起動します

AlertTemplates.xml のコピーを作成する

"SharePoint ハイブ"\TEMPLATE\XMLフォルダ内の "alerttemplates.xml" をコピーし、"MyCustomAlertTemplates.xml" という名前で同じフォルダに保存します。ファイル編集時に不具合があった場合に、すぐに元に戻せるようオリジナルの "alerttemplates.xml" には変更を加えないようにするためです(ほかにも今後SP適用時にこのファイルが上書きされる可能性もあるという理由もあります)。

MyCustomAlertTemplates.xml を編集する

今回は タスクリストの通知部分のみをカスタマイズするため、"AlertTemplate Type="List"  Name="SPAlertTemplateType.Tasks" タグ 内の Immediate 要素(タグ)内部を次のように変更しました。

*********************************

<Immediate>
<Subject>
<HTML><![CDATA["]]></HTML>
<GetVar Name="SiteName"/>
<HTML><![CDATA["サイト]]></HTML>
<GetVar Name="ListName" HTMLEncode="True" />
<HTML><![CDATA[内のデータが変更されました。
]]></HTML>

</Subject>
<Header>
<HTML><![CDATA["]]></HTML>
<GetVar Name="SiteName"/>
<HTML><![CDATA["サイト(]]></HTML>
<GetVar Name="SiteUrl" URLEncodeAsURL="TRUE" />
<HTML><![CDATA[)の「]]></HTML>
<GetVar Name="ListName" HTMLEncode="True" />
<HTML><![CDATA[」内のデータが変更されました。
]]></HTML>
<HTML> 
<![CDATA[
【イベントの種類】]]>
</HTML>
<Switch>
<Expr>
  <GetVar Name="EventType" />
  </Expr>
<Default>
<HTML> <![CDATA[$Resources:Alerts_change1_BEGIN;
]]> </HTML>
  </Default>
<Case Value="1">
<HTML>- <![CDATA[$Resources:Alerts_change0_BEGIN;
]]></HTML>
  </Case>
<Case Value="4">
<HTML>- <![CDATA[$Resources:Alerts_change4_BEGIN;
]]></HTML>
  </Case>
<Case Value="9">
<HTML> <![CDATA[$Resources:Alerts_change5_BEGIN;
]]></HTML>
  </Case>
<Case Value="16">
<HTML> <![CDATA[$Resources:Alerts_change6_BEGIN;
]]></HTML>
  </Case>
<Case Value="32">
<HTML><![CDATA[$Resources:Alerts_change7_BEGIN;
]]> </HTML>
  </Case>
  <Case Value="64">
<HTML> <![CDATA[$Resources:Alerts_change8_BEGIN;
]]></HTML>
  </Case>
<Case Value="128">
<HTML> <![CDATA[$Resources:Alerts_change9_BEGIN;
]]></HTML>
  </Case>
   <Case Value="256">
<HTML> <![CDATA[$Resources:Alerts_change10_BEGIN;
]]></HTML>
  </Case>
  </Switch>
<HTML><br/><![CDATA[
  +++++++++++++++++++++++++++++++++++++++++
  "]]></HTML><GetVar Name="ItemName" HTMLEncode="TRUE" /><HTML><![CDATA["
  (]]></HTML><GetVar Name="ItemUrl" HTMLEncode="TRUE" /><HTML><![CDATA[)
+++++++++++++++++++++++++++++++++++++++++
]]></HTML>
</Header>

<Fields>
<Switch>
<Expr><GetVar Name="EventType"/></Expr>
<Case Value="2">
<IfEqual>
<Expr1><GetVar Name="OldValue#{Field}"/></Expr1>
<Expr2><GetVar Name="NewValue#{Field}"/></Expr2>
<Then>
<HTML><![CDATA[
『]]></HTML> <GetVar Name="DisplayName#{Field}" HTMLEncode="TRUE" /><HTML><![CDATA[:]]></HTML>
<GetVar Name="NewValue#{Field}" /><HTML><![CDATA[』]]></HTML>       
</Then>
<Else>
<HTML><![CDATA[
次のフィールドの値は更新されました: 『]]></HTML>
<GetVar Name="DisplayName#{Field}" HTMLEncode="TRUE" /><HTML><![CDATA[』]]></HTML>
<Limit Len="255" AutoHyperLinkNoEncoding="TRUE" MoreText="..."><GetVar Name="OldValue#{Field}" /></Limit>
<HTML><![CDATA[→]]></HTML><GetVar Name="NewValue#{Field}" /></Else>               
</IfEqual>
</Case>
<Default>
<HTML><![CDATA[
『]]></HTML><GetVar Name="DisplayName#{Field}" HTMLEncode="TRUE" /><HTML><![CDATA[:]]></HTML>
<GetVar Name="NewValue#{Field}" /><HTML><![CDATA[』]]></HTML>    
</Default>

</Switch>
</Fields>
<Footer>       
</Footer>
</Immediate>

*********************************

たとえば、テキスト形式のメール内容を生成するには、メール内に記載したいと思うSharePoint サイトの情報を参照する<GetVar Name="">は残し、HTMLタグはいったん取り除きます。そして、文字列を挿入したいところに<HTML><![CDATA[ ここに表示したい任意の文字列を記述]]></HTML>を挿入します。

作成した MyCustomAlerttemplate.xml ファイルは以下の場所に共有しておきますので、参考にしてみてください。MyCustomAlertTemplates.xml

stsadm.exe を実行し、通知テンプレートを登録する

最後に、カスタム作成した通知テンプレートを SharePoint に読み込みます。これには stsadm.exe を使用します。

stsadm.exe -o updatealerttemplates -url <サイトコレクションのURL> -filename <通知テンプレートのファイルパス>

なお、上記コマンドを実行したときに 使用しているテンプレートファイルが 正しいXML構文になっていないとエラーが表示されますが、無事に登録されても "成功しました" といったメッセージは一切表示されませんので注意してください。

最後に IIS を再起動します。

動作確認

任意のタスクリストで通知を設定して動作確認をしてみます。が、このとき、アイテムを変更するなどすると HTMLメールとテキスト形式のメールの2つが送信されてくることがあります。検証していて何故このように2通送られてくるのかをしばらく悩んだのですが、タスクリストには "SPAlertTemplateType.AssignedToNotification" も使用されているためだということがわかりました。通知を設定したユーザーに対して割り当てたタスクがあると、そのタスクの変更は担当者への通知としてもう一通の通知メールが送られます。この通知に "SPAlertTemplateType.AssignedToNotification" テンプレートが用いられています。

ためしに、 <AlertTemplate Type="List"  Name="SPAlertTemplateType.AssignedToNotification">タグ内の<Immediate>タグ内に定義されているスタイルシートを変更してみると確認できます。私は以下のスタイルを変更して確認しました。

.formbody {
  color: #000000;
}

上記の文字色を "Orange" などに変更してみると変更箇所が確認しやすいです。

元の通知に戻すには

さて、元の通知メールに戻すにはどうしたらよいでしょうか?

答えは再び stsadm.exe を使用して オリジナルの alerttemplates.xml を登録(更新)しなおすことです。更新が終わったら、IIS の再起動もお忘れなく。

最後に

いかがでしたでしょうか。今回の一連の記事も結構なボリュームになってしまいました。通知メールのカスタマイズには、よくご質問いただいていたところで、いつかきちんと調べたいと思い続けていたところでした。いろいろと苦労はありましたが、今回の内容を踏まえれば、通知メールの内容はずいぶんとカスタマイズできそうだということが分かりました。

まぁ、とはいえ、XMLを解析する"根気"が何より重要だということが一番よくわかりました(笑)。仕事の合間に検証をしていたのですが、あれこれ調べていたら全部の記事を書きためるのに結局2週間くらいかかってしまいました。メールのカスタマイズに関しては英語のドキュメントもほとんどないため、試行錯誤して大体の勘所をつかんだ感じです。

睡眠時間を削ったりしながら調べた内容ですので、参考になれば幸甚ですconfident

続きを読む »
2008年3月 6日 (木)

シアトルで開催されている SharePoint Conference では Silverligth と SharePoint とを統合した様々なデモを見ることができました。

Silverlight を SharePoint 上で利用できると、操作性の向上が期待できそうです。こうした Silverlight テクノロジーを SharePoint 上で利用するためには、どのように勉強したらよいのか悩むところですが、そういう方々のためのトレーニングキットが公開されています。それが、"Silverlight Blueprint" です。このサイトにはソースコードやビデオ付きでのガイダンスなどがダウンロードできるようになっています。

Silverlight テクノロジーに興味のある SharePoint 開発者の方には必見です!
もちろん、英語のみではありますがビデオ付きガイダンスがあるため、どんなことができるのかを目で見ることはできるので、英語に自信のない方や開発者ではない方でも参考になると思います。

「Silverlight Blueprintの紹介」(英語)
http://msdn2.microsoft.com/en-us/sharepoint/cc303301.aspx

「Silverlight Blueprint for SharePoint」(英語)
http://www.ssblueprints.net/sharepointSilverlightblueprint

2008年3月 5日 (水)

前回に引き続きタスクリストに使用される通知テンプレートの詳細を確認します。

Format 要素

通知メールのカスタマイズをする上で重要なのがFormat 要素です。このタグの中にメールの定型文書が書かれています(ちなみに、リストから取得するフィールド(列) 情報は "<Properties>~</Properties>"で定義されています)。

Format 要素は Digest 要素と Immediate 要素で構成されています。

Alertimmediateformat

Digest 要素は、"日に一度通知する" もしくは "週に一度通知する" ように設定した際に使われます。一方、Immediate 要素は "すぐに通知する" ように設定した際に使われます。では、この Immediate 要素の詳細を見てみたいと思います。

Immediate 要素は Subject , Header, HTML, Fields, Footer で構成されています。

Alertimmediateformatdetail1

それぞれは、実際に送信される HTML メールのどこに該当するのでしょうか。実際に照らし合わせてみましょう。

以下が、タスクリストに設定した通知メールのサンプルです。Outlook 2007 を使用し、タスクアイテムのタイトルは aaa としています。

Alertmailall

[Subject 要素]

最初のSubject 要素はメールの「件名」です。

Alertimmediateformatdetailsubject

つまり 「件名 : {AlertTitle} - {ItemName} 」 となっており、実際のメールでは GetVar で指定した部分に値が代入され、「タスク - aaa」 となっています。

[Header 要素]

続く Header 要素を見てみましょう。ここから複雑になってきますので、まずは実際のメールのどの部分に当たるかを確認しておきます。Header 要素の内容と生成される HTMLコードと照らし合わせると、次の図の部分が生成されることになります。

(図.HTML メールの抜粋)
Alertimmediateformatdetailheadermai

***生成されるHTMLソースコード****

      <html  dir = ltr>
<head>
<base href="http://moss2007/sites/top/SiteDirectory/soumu">
<style>
<!--
.headertop1 {
  width: 100%;
}
(中略)
-->
</style>
</head>
<body>
  <table class="headertop1" cellspacing="0" cellpadding="0">
   <tr><td class="headercontent">
    <table class="breadcrumb" cellspacing="0" cellpadding="0" width="100%"><tr><td><a href="http://moss2007/sites/top/SiteDirectory/soumu">総務部</a></td></tr></table> 次のアイテムが変更されました: <em>aaa</em>
   </td>
  </tr></table> 
  <table class="content" cellspacing="0" cellpadding="0">
   <tr>
    <td colspan="3">
     <table class="toolbar" cellspacing="0" cellpadding="0" width="100%"><tr><td>
      <table cellspacing="0" cellpadding="0" border="0">
       <tr>
        <td class="toolbarbutton"><a href="http://moss2007/sites/top/SiteDirectory/soumu/_layouts/MySubs.aspx">通知の設定の変更</a></td>
        <td class="toolbarsep">|</td>
        <td class="toolbarbutton"><a href="http://moss2007/sites/top/SiteDirectory/soumu//Lists/Tasks/DispForm.aspx?ID=5">表示 aaa</a></td>
        <td class="toolbarsep">|</td>
        <td class="toolbarbutton"><a href="http://moss2007/sites/top/SiteDirectory/soumu/Lists/Tasks">表示 タスク</a></td>
        <td class="toolbarsep">|</td>
        <td class="toolbarbutton"><a href="http://moss2007/sites/top/SiteDirectory/soumu/_layouts/mobile/dispform.aspx?List=A5540ED9-AC8D-4C1F-9772-421B2CBD2BBA&ID=5">モバイル ビュー</a></td>
       </tr>
      </table>
     </td></tr></table>
    </td>
   </tr>
   <tr><td colspan="3"class="spacer"> &nbsp;</td></tr>

*******************

Header 要素ではHTML文書が生成されるようになっおり、大まかにいうと Table タグとスタイルシートで構成されいます。XML に慣れていない方は "<![CDATA[ " から "]]>" までを中心に確認してください。ここに生成されるHTMLの構造が書かれています。なお、スタイルシートが複数定義されていることから、もしスタイルを変更したいのであればHeader 要素を修正すればよいのだということがわかります。

(図.Header要素の抜粋)
Alertimmediateformatdetailheader

[HTML 要素]

ここは生成されるHTMLメールを見ると使用されていないようですので割愛します。

[Fields 要素]

ここで本文を生成してます。

(図.HTMLメールの抜粋)
Alertmailfield

***生成されるHTMLソースコード****

<tr>
    <td class="formlabel">タイトル:</td><td class="formbody"> aaa</td><td class="altvb">&nbsp;</td>
   <tr>
    <td class="formlabel">優先度:</td><td class="formbody"> (2) 標準</td><td class="altvb">&nbsp;</td>
   <tr>
    <td class="formlabel">状態:</td><td class="formbody"><span class="edited">進行中</span> 完了</td><td class="altvb"><span class="editedicon">編集済み</span></td>
   <tr>
    <td class="formlabel">担当者:</td><td class="formbody"> 山崎 愛</td><td class="altvb">&nbsp;</td>
   <tr>
    <td class="formlabel">説明:</td><td class="formbody"> <div></div></td><td class="altvb">&nbsp;</td>
   <tr>
    <td class="formlabel">開始日:</td><td class="formbody"> 2008/02/09</td><td class="altvb">&nbsp;</td>

****************************************

(図.Fields 要素の抜粋)

Alertimmediateformatdetailfields

面白いのは、フィールドの古い値を新しい値を取得しているところです。HTMLメールを見るとわかりますが、状態フィールドの値を"進行中"から"完了" に変更しています。メールではどの部分が変更されたか確認できるように、GerVar 要素を使って値を参照しています。古い値は"OldValue#{field}"として新しい値は"OldValue#{field}"となっています。

[Footer 要素]

ここでメールの締めくくりの部分を生成しています。

(図.HTMLメールの抜粋)

Alertmailfooter

***生成されるHTMLソースコード****

<tr>
    <td colspan=3 class="descriptiontext">最終更新日時 2008/02/09 15:21 更新者 山崎 愛</td>
   </tr>
  </table>
</body>
</html>

****************************************

(図.Footer 要素)
Alertimmediateformatdetailfooter

以上、Format 要素の詳細を見てきましたが、これでなんとなくどのあたりを変更したらカスタマイズできそうかの見当がついたことと思います。

次回は、具体的なカスタマイズ方法をご紹介します。