2008年1月22日 (火)

SharePoint Designer 2007 の「データビュー」 の利用 (2.日付の表示形式の変更)

前回に引き続き、いよいよ今回は本題に入ります。お題は「日付の表示形式の変更」です。

作成日や更新日列に表示される既定の日付の表示形式は "2008/1/18 22:30" です。データビューの XSLT を一部編集するだけで、これをいろいろなパターンの表示形式に手軽に変更できます。

今回はチーム サイトのドキュメントライブラリを使用して検証しています。

XSLTデータビューに変換する

  1. SharePoint Designer 2007 でチーム サイトを開き、Shared Document(共有ドキュメント)フォルダ内のFormsフォルダを展開する。
  2. Allitems.aspx (すべてのアイテムビュー) を開き、分割ビューにしておく
  3. アイテムが表示されている部分(ListViewWebParts)を右クリックし、「XSLTデータビューに変換」をクリックする。

    Xsldataview

XSLT データビューに変換したら、ソースコード内で "ddwrt:FormatDate" を探します。この"ddwrt:"で始まるものがデータビューのXSTL内で使用できる拡張関数です。詳細についてはFrontpage 2003 の頃のものですが、次の資料が参考になります(が、残念ながら日本語ではありません)。
SharePoint Data View Web Part Extension Functions in the ddwrt Namespace

この関数は次のように記述されている筈です。

"ddwrt:FormatDate(string(@Modified), number($Language), 5)"

最後の引数である "5" を別の値に変更すると表示形式を変えられます。ではこの関数の詳細を解説しましょう。まずは関数の定義からです。

ddwrt:FormatDate関数の定義

  • ddwrt:FormatDate(date, lcid, formatflag)
    date … 表示形式を変換する日付データ
    lcid … ロケール (日本語だと 1041)
    formatflag … 表示形式を示すフラグ。1,3,4,5,7,12,13,15 のうちいずれかの数値

以上から、先の記述内容は最初に "@Modified" とあることから 更新日時列のデータを変換しようとしていることがわかります。次が "number($Language)" でロケールを取得しています。最後の"5"は表示形式です。

  • 1 に変更した場合→ 2008/1/22
  • 3 に変更した場合→ 2008年1月22日
  • 4 に変更した場合→ 0:03
  • 5 に変更した場合→ 2008/1/22 0:03
  • 7 に変更した場合→ 2008年1月22日 0:03
  • 12 に変更した場合→ 0:03:00
  • 13 に変更した場合→ 2008/1/22 0:03:00
  • 15 に変更した場合→ 2008年1月22日0:03:00

こういった関数があるということを知っておくと、何かと便利です。次回はその他の関数をご紹介します。

トラックバック

このページのトラックバックURL: http://bb.lekumo.jp/t/trackback/718613/34255785

SharePoint Designer 2007 の「データビュー」 の利用 (2.日付の表示形式の変更)を参照しているブログ:

コメント

こんにちは。いつも参考にさせていただいています。

記事のようにformatflagを指定することでいくつかのパターンには対応できると思いますが、これだけでは曜日などを出力することができません。(たぶん)

2008/04/01 (火) 22:00

こんな感じの自由な日付フォーマットを実現するには、formatflagの代わりに日付形式を文字列で指定します。


ddwrt:FormatDateTime(string(@EventDate) ,number($Language) ,'yyyy/MM/dd (ddd) HH:mm')


こんな感じ。
ちなみに (ddd) → dddd にすると (火) → 火曜日 になったりします。good

tasumaruさん

コメントをありがとうございます。確かに、FormatDateTime関数もありましたね。これにカスタム DateTime 書式指定文字列を使ってやると表現の幅も広がりますね。

その辺の資料が何かまとまってないかなぁとちょっと調べたら、MSDNに記載がありますね。でも、説明があまり分かり易くはないので、tasumaruさんからご提示いただいたサンプルコードが一番分かりやすいです。

一応、ご参考まで。
http://msdn2.microsoft.com/ja-jp/library/8kb3ddd4(VS.80).aspx

このように、追加情報をいただけると、助かりますhappy01

今後ともよろしくお願いいたします。