2008年1月23日 (水)

データビュー("DataView"WebPart") 内で拡張関数が利用できることは、前回ご紹介しました。今回はその他の関数をいくつかご紹介します。

  • ddwrt:Today() …現在の日付を返す
  • ddwrt:TodayIso()…現在の時刻をISO形式(yyyy-MM-ddThh:mm:ssZ)で返す
  • ddwrt:IfNew(日付)…指定した日付から2日(既定)以内の場合trueを返す。日付はISO形式である必要がある
  • ddwrt:Random(最小値,最大値) …最小値から最大値の範囲内でランダムな値を生成
  • ddwrt:FormatDateTime(日付,ロケールID、書式) … 指定した書式で日付を取得する(例. yyyy年MM月dd日)
  • ddwrt:IfHasRights(permissionMask)…現在のユーザーがpermissionMaskに指定されている権限または権限の組み合わせを持つ場合はtrueを返す

ddwrt:IfHasRights(permissionMask) に指定する値はSPBasePermissions列挙体です。この列挙体について説明するURLはあるのですが、肝心の値が掲載されていません。全部は確認できていませんが、どうも以前のWSS 2.0 のころの使用されていた SPRights 列挙体の方の情報とだいたい同じであるようですので、両方を参考にするとよいと思います。(※ Tatsuki Yamamoto さんからの情報を頂きましたので、訂正しました。) SPBasePermissions 列挙体は以前は SPRights 列挙体でした。メンバー値など一部変更されているようですので、以下に値を記述しておきます。

メンバー説明
AddAndCustomizePages 262144 HTML ページまたは Web パーツ ページを追加、変更、または削除し、Windows SharePoint Services 互換エディタを使用して Web サイトを編集します。
AddDelPrivateWebParts 268435456 Web パーツ ページ上で個人用 Web パーツを追加または削除します。
AddListItems 2 リストにアイテムを追加し、ドキュメント ライブラリにドキュメントを追加して、Web ディスカッション コメントを追加します。
ApplyStyleSheets 1048576 Web サイトにスタイル シート (.css ファイル) を適用します。
ApplyThemeAndBorder 524288 Web サイト全体にテーマまたは枠線を適用します。
ApproveItems 16 リスト アイテムまたはドキュメントのマイナー バージョンを承認します。
BrowseDirectories 67108864

Microsoft Office SharePoint Designer 2007 および WebDAV インターフェイスを使用して、Web サイト内のファイルおよびフォルダを列挙します。
BrowseUserInfo 134217728 Web サイトのユーザーに関する情報を表示します。
CancelCheckout 256 別のユーザーに対してチェックアウトされたドキュメントを破棄またはチェックインします。
CreateAlerts 549755813888 電子メール通知を作成します。
CreateGroups 16777216 サイト コレクション全体で使用できるユーザーのグループを作成します。
CreateSSCSite 4194304 Self-Service Site Creation を使用して Web サイトを作成します。
DeleteListItems 8 リストからのアイテムの削除、ドキュメント ライブラリからのドキュメントの削除、およびドキュメント内の Web ディスカッション コメントの削除を行います。
DeleteVersions 128 リスト アイテムまたはドキュメントの古いバージョンを削除します。
EditListItems 4 リスト内のアイテム、ドキュメント ライブラリ内のドキュメント、およびドキュメント内の Web ディスカッション コメントの編集、およびドキュメント ライブラリ内の Web パーツ ページのカスタマイズ。
EditMyUserInfo 1099511627776 ユーザーに対して、各自の情報の変更 (画像の追加など) を許可します。
EmptyMask 0 Web サイト上でのアクセス許可は持っていません。ユーザー インターフェイスによって使用することはできません。
EnumeratePermissions 4611686018427387904 Web サイト、リスト、フォルダ、ドキュメント、またはリスト アイテム上でのアクセス許可を列挙します。
FullMask 9223372036854775807 Web サイト上ですべてのアクセス許可を持っています。ユーザー インターフェイスによって使用することはできません。
ManageAlerts 274877906944 Web サイトのすべてのユーザーに対する通知を管理します。
ManageLists 2048 リストを作成および削除し、リスト内の列を追加または削除して、リストのパブリック ビューを追加または削除します。
ManagePermissions 33554432 Web サイト上でのアクセス許可レベルを作成および変更し、ユーザーおよびグループにアクセス許可を割り当てます。
ManagePersonalViews 512 リストの個人用ビューを作成、変更、および削除します。
ManageSubwebs 8388608 チーム サイト、会議ワークスペースのサイト、ドキュメント ワークスペースのサイトなどのサブサイトを作成します。サイト コレクションを対象範囲とするフィーチャーのプロパティをアクティブ化、非アクティブ化、または編集します。[サイト コレクションの機能] ページを参照し、サイト コレクションを対象範囲とするフィーチャーをユーザー インターフェイスを介してアクティブ化または非アクティブ化するには、サイト コレクションの管理者である必要があります。
ManageWeb 1073741824 Web サイトのすべての管理タスクを実行し、コンテンツを管理するための権限を付与します。
Open 65536 ユーザーに対して、Web サイト、リスト、またはフォルダを開いて、そのコンテナ内のアイテムにアクセスすることを許可します。
OpenItems 32 サーバー側のファイル ハンドラでドキュメントのソースを表示します。
UpdatePersonalWebParts 536870912 Web パーツを更新して、個人用設定情報を表示します。
UseClientIntegration 68719476736 クライアント アプリケーションを起動する機能を使用します。そうしなければ、ユーザーはドキュメントに対してローカルで作業を行い、変更内容をアップロードする必要があります。
UseRemoteAPIs 137438953472 SOAP、WebDAV、または Microsoft Office SharePoint Designer 2007 インターフェイスを使用して Web サイトにアクセスします。
ViewFormPages 4096 フォーム、ビュー、およびアプリケーション ページを表示し、リストを列挙します。
ViewListItems 1 リスト内のアイテム、ドキュメント ライブラリ内のドキュメントを表示し、Web ディスカッション コメントを表示します。
ViewPages 131072 Web サイトのページを表示します。
ViewUsageData 2097152 Web サイトのページを表示します。
ViewVersions 64 リスト アイテムまたはドキュメントの古いバージョンを表示します。

※ SPRighs 列挙体と SPBasePermissions 列挙体の違いは Yamamoto さんがこの記事のコメントに記載してくださっています

【SPRights列挙体】
http://msdn2.microsoft.com/ja-jp/library/microsoft.sharepoint.sprights.aspx
【SPBasePermissions列挙体】
http://msdn2.microsoft.com/ja-jp/library/microsoft.sharepoint.spbasepermissions.aspx

たとえば、ViewListItems 権限をもったユーザーかどうかを確認する場合は、値を '1' とします。また ViewListItems とAddListItemsの両方の権限を持っているかを確認する場合はそれぞれの値の合計値、つまり '3' (1+2) を指定します。

ちなみに、IfNew関数でチェックする日数の既定値は2日となっているのですが、これはSharePoint サイドで変更可能です(詳細は以前の記事を参照のこと:「新規アイテムを投稿したときに表示される "New!" のアイコンはどれくらいの期間表示されるのですか?」)

では、上記の関数の基本的な使い方を学習するために以下の例をとりあげます。

  • 今日の日付から1週間以内に作成されたアイテムに対してNew! アイコンを表示する
  • 条件によってアイテムを表示する

なお、2つ目の内容は次回の記事で説明します。

今日の日付から1週間以内に作成されたアイテムに対してNew! アイコンを表示する

※ 2008.2.2  Hachi さんからご指摘いただきまして、一部修正いたしました。Hachi さん、ご指摘をありがとうございました。

この例も実は、以前、受講者の方からご質問いただいたものです。SharePoint 以外のツールを使用していてこれから SharePoint に移行したいという方で、以前使用していたツールがこうした仕様であったため同じように表示できないか、ということでした。

ここでは拡張関数としてIfNew関数とToday関数 が登場します。

前回同様、テスト用の任意のドキュメントライブラリのAllItems.aspx を編集します。最初に、前回同様、ListViewWebParts 部分をXSLTデータビューに変換します。次に"New.gif" を検索すると前後含め、次のようなコードが見つかります。

<xsl:if test="ddwrt:IfNew(string(@Created))">
<IMG SRC="/_layouts/1041/images/new.gif" alt="新規" />
</xsl:if>

<xsl:if > は条件文を意味し、"test=" の部分が条件判定の式です。また"@" で始まるのは、列です。つまり、作成日時(@Created) が2日以内であれば、New.gif アイコンを表示するという式です。これを7日以内に作成されたアイテムに対して New! アイコンを表示するようにカスタマイズしようと思います。が、XSLT 内での日付計算は簡単ではないため、今回はライブラリに New! アイコンを表示する期限を保持する列を追加して利用したいと思います。

New! アイコン表示期間用の列の追加

以下の内容の列を追加します。

  • 列名 : "displayDuration"
    ※XSLT 内で利用しやすいように英語表記で列を作成しますが、列作成後に"Newアイコンの表示期日" といった日本語表記に変更しておくとよいです
  • この列の情報の種類: 日付と時刻
  • この列への情報の入力を必須にする: はい
  • 日付と時刻の形式 : 日付のみ
  • 既定値を計算値として、式に "=Today+7" と入力

以上の内容で列を作成すると、既定値として今日から7日後の日付が表示されるようになります。あとはこの列情報を利用して、7日間アイコンを表示するよう 以下のように記述します。

<xsl:if test="number(translate(substring-before(@displayDuration,'T'),'-',''))&lt;=number(translate(ddwrt:Today(),'/',''))">
<IMG SRC="/_layouts/1041/images/new.gif" alt="新規" />
</xsl:if>

以上で、7日以内のアイテムには New! のアイコンが表示されるようになります。

これを応用すれば、テーブル内に列を追加して特定の列の値に応じてアイコンを表示するようにことも可能です。たとえば、「お知らせ」リストに重要度を示す列を追加し、重要な場合はアイコンを表示する、といった具合です。

[図.データビューを用いたお知らせリスト]
Customannouncement

[追加したコード]
<xsl:if test="@_x91cd__x8981_=1">
<img src="/_layouts/images/urgent.gif" alt="重要" border="0"/>    
</xsl:if>   

<Tip : SharePoint Designer 2007 の入力支援機能>

条件を指定する場合には、XPath式を編集する入力支援機能を使用するようにすると便利です。
[図.入力支援機能]
Xpathbuilder

Xpathbuilder2

<Tip : 列情報を確認する>

[データソースの詳細] に現在列情報と現在格納されているアイテムの持つ値が表示されます(値ごとに右クリックするとXPath式のコピーメニューなどが表示されます)。[データソースの詳細]が表示されない場合は、ツールバーの[作業ウィンドウ]メニューから表示します。

[図.データソースの詳細]

Datasourcedetail