SharePoint 2007/2010 Today を使った日付計算結果の表示

こんにちは、奥田です。
今日はお客様からいただいた質問からの投稿です。

あるお客様から、ポータルトップにリストに入力された日付と今日の日付の差分を表示したい、と質問をいただきました。
具体的には、何かのイベントが発生した日付から「無事故日数 ○○ 日達成」 などという表示を行いたいとのことです。
このような Today – 何かの日付 といった計算を行いたい場合に、DataView を使って表示を行う方法をご紹介します。

<設定方法>
1.  リスト内に、日付を含むデータが保存されているとします。
    例) イベントの日付は [EventDate] 列に保存されているとします。
    datalist1

2. トップページに、そのリストの Web パーツ (リストビュー Web パーツ) を配置し、次のような設定を行います。
    >
ツールバーの種類: [ツールバーなし]
    >
枠の種類; [なし]
    >
現在のビューの編集
        –
[EventDate] 列のみを表示
        –
[EventDate] 列を降順で並べ替え
        –
アイテムの制限で 1 件分のアイテムのみ表示するよう設定
    datalist2

3. SharePoint Designer でトップページを開く

4. 貼りつけたリスト Web パーツを右クリックし、[XSLT データビューに変換] をクリック
    (2010の場合はこの手順は必要ありません)

5. エディターを [分割] に切り替え、Web パーツをクリックして、対応するソースコード内から、
   <XSL><xsl:stylesheet version=”1.0″…> タグを見つけ、その下にある <xsl:param name=”****” />
   以下に  <xsl:param name=”Today” /> を追加。

   Today() をスタイル内で利用するための記述です。

6. Web パーツ内に表示されている日付をクリックし、対応するソースコードを見つける
   
例)
   
<TD Class=”{$IDAXVLDC}”><NOBR>
   
<xsl:value-of disable-output-escaping=”no”
      select=”ddwrt:FormatDate(string(@EventDate),number($Language),1)” />
    </NOBR></TD>

7. 上で見つけた対応するソースコード (赤字部分) を、次のように編集
<xsl:value-of select=”(ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))-ddwrt:DateTimeTick(ddwrt:FormatDate(ddwrt:GenDisplayName(string(@EventDate)),1041,1)))div 864000000000″ />

   今日の日付との差分を、日単位で表示するように数式を編集しました。

   数式内で利用している DateTimeTick 関数や GenDisplayName 関数は下記を参照しました。
  
MSDN 「dwrt 名前空間内の SharePoint データ ビュー Web パーツ拡張関数」
  
http://msdn.microsoft.com/ja-jp/library/dd583143(v=office.11).aspx#officesharepointddwrt_gendisplayname

8. ここまでで、上書き保存し、ブラウザーでプレビューすると、日付の表示が、Today – 指定した日付 に変わります。
   SPD デザインモードのプレビューではなぜか、数式最後の div が行われないまま表示されます。。
   datalist3

9. あとは、HTML、CSS を編集して、数字のまわりのデザインを整えれば完成です。
   
たとえば、つぎのように編集すれば、図のような表示にできます。

<TD Class=”{$IDAX3I4B}”>
<div style=”background:#000;font-size:13px;color:#000;padding:1px”>
<div style=”border-width:1px;border-style:solid;border-color:#fff #f8e070 #f8e070 #fff;background:#f9e483;text-align:center;padding:3px;font-family:’Meiryo UI'”>
無事故日数
<xsl:value-of select=”(ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))-ddwrt:DateTimeTick(ddwrt:FormatDate(ddwrt:GenDisplayName(string(@EventDate)),1041,1)))div 864000000000″ /> 日達成!</div></div></TD>

    datalist4

自動的に今日の日付との差分 (日単位) を計算して表示してくれ、またリストに新しい日付を含むアイテムが保存されたら、
リスト内の一番新しい日付を利用して表示されるようになります。

今回質問いただいたお客様の環境が、SharePoint 2007 Standard だったため、その環境での方法をご紹介しましたが、SharePoint 2010 でも同様に行えます。

Enterprise 機能が利用できれば、Today() のように動的な値を使った数式とその結果の表示は、Excel で簡単に作成できて、Excel Web Access Web パーツで表示が行えるんですけどね。。2010 だと InfoPath でもいいかも。
 
Standard の場合はこれら機能が利用できないため、今回は DataView を使って SharePoint Designer でのカスタマイズ方法をご紹介しました。

奥田理恵うさぎ

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中