2008年2月12日 (火)

すっかり長くなってしまった一連の投稿も、今回でいよいよ最終回です。

最後に、これまでの内容の応用としてコンテンツ クエリ Web パーツを使い、サイトコレクション内のすべてのサイトから自分が担当になっいるタスクの一覧を取得するようにしてみたいと思います(これも、以前、ご質問をいただいたことがあるものです。)

[最終目標の画面]
Cqwpmytask
※作業量割には、そこそこ素敵な感じの仕上がりになったように思います。

実現した機能

  • タスクの進捗ごとにグループ化する
  • タスクのタイトルの他に、優先順位と期日を表示するようにする
  • 優先順位で並び替える
  • 優先順位が高いものだけにアイコンを表示する
  • 新しいアイテムは New! のアイコンを表示する
  • 期日が過ぎている場合は、その旨を表示する

作業概要

  1. コンテンツ クエリ Web パーツを配置し、サイトコレクション全体から自分が担当になっているタスクを取得するための基本設定を行う
  2. コンテンツ クエリ Web パーツをエクスポートし、表示したい列を取得できるよう編集して、再びインポートする
  3. ItemStyle.xsl を編集し、見た目を整える
  4. コンテンツ クエリ Web パーツに新しいスタイルを適用する

コンテンツクエリWebパーツの基本設定

  1. グループ作業ポータルのトップページに、コンテンツ クエリ Web パーツを配置します。
  2. [コンテンツ クエリ Web パーツ] の [編集] - [共有 Web パーツの変更] をクリックします。
  3. [クエリ] セクションで [ソース] を "このサイトコレクションのすべてのサイトからアイテムを表示する"とします(今回はサイトコレクション全体を対象としてみます)。
  4. [リストの種類]から[このリストの種類のアイテムを表示する] を"タスク" に変更します。また[コンテンツ タイプ] で "リスト コンテンツ タイプ" を指定し、[このコンテンツタイプのアイテムを表示する] で "タスク" を指定します。
  5. [追加フィルタ] セクションで [次の条件でアイテムを表示する] にて "担当者" が "次の値に等しい" "[Me]" となるように指定します。これで自分のタスクのみをフィルタできるようになります。なお、画面に表示されているようにこの設定ではキャッシュが利用できないため、パフォーマンスが下がる可能性がありますので、実運用で利用される場合は実際にどの程度のパフォーマンスになるかを測定してみてから利用されるとよいと思います。さらに今回は終了したタスクは非表示にするようにしたいため、"かつ" を選択し、"タスクの状態" が "次の値に等しくない" "完了" となるように指定します。
    Cqwptaskfilter
  6. [プレゼンテーション] セクションでは、[アイテムのグループ化キー]として" タスクの状態" を指定します。[アイテムの並び替えキー]に[優先度]を指定します。
  7. すべてのタスクを表示するために [表示するアイテム数を制限する] チェックボックスをオフにします。
  8. [グループスタイル]を"帯状"、[アイテムのスタイル]を"箇条書きタイトル" に設定します。
  9. [外観]セクションの[タイトル]に"自分の仕事一覧" と入力します。
  10. [適用] をクリックします。

表示したい列の取得

  1. コンテンツ クエリ Web パーツの右上に表示される▼をクリックし、[エクスポート]をクリックします。
  2. 任意の名前でローカルに保存します。今回は "mytask.webpart" という名前で保存します。
  3. エクスポートしたファイルをメモ帳などで編集します。次のタグを見つけます。

    <property name="CommonViewFields" type="string" />
  4. "期日" と "優先度" 列情報を取得できるように次の通り編集します。

    <property name="CommonViewFields" type="string">DueDate,DateTime;Priority,Choice</property>
  5. 上書き保存します。
  6. 再び IE に戻り、編集した Web パーツ情報をインポートするために、[Webパーツの追加]をクリックします。
  7. Webパーツの追加画面右下に表示される "Webパーツギャラリーとオプションの詳細設定" リンクをクリックします。
  8. 画面右上の "Web パーツの追加" の下に表示される"参照" 部分の▼をくりっし、[インポート] をクリックします。
  9. "mytask.webpart" ファイルを指定し、アップロードします。
  10. アップロードしたWebパーツをWebパーツ領域に追加します。

ItemStyle.xsl を編集する

  1. SharePoint Designer 2007 を起動し、コンテンツ クエリ Web パーツを配置しているサイトを開きます。
  2. [フォルダ一覧]内から[Style Library(スタイル ライブラリ)] - [XSL Style Sheets] の順に展開し、ItemStyle.xsl を右クリックしチェックアウトします。
  3. ItemStyle.xsl をダブルクリックします。
  4. XSLT 内で ddwrt 関数を使用できるよう宣言を次のように追加します。なお、これまでの一連の設定を行っている場合はこの操作は不要です。

    <xsl:stylesheet
        version="1.0"
        exclude-result-prefixes="x xsl cmswrt cbq ddwrt"
       ... (中略)
       xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/
    DataView/runtime">
  5. <xsl:template name="Bullets" match="Row[@Style='Bullets']" mode="itemstyle">
    から対応する</xsl:template>までをコピーし、</xsl:stylesheet> の直前に貼り付けます。
  6. スタイルシートを次のように変更します(赤色部分が追加修正を行った部分です)。

    <xsl:template name="すべてのタスク" match="Row[@Style='すべてのタスク']" mode="itemstyle">
            <xsl:variable name="SafeLinkUrl">
                <xsl:call-template name="OuterTemplate.GetSafeLink">
                    <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
                </xsl:call-template>
            </xsl:variable>
            <xsl:variable name="DisplayTitle">
                <xsl:call-template name="OuterTemplate.GetTitle">
                    <xsl:with-param name="Title" select="@Title"/>
                    <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
                </xsl:call-template>
            </xsl:variable>
            <xsl:variable name="LinkTarget">
                <xsl:if test="@OpenInNewWindow = 'True'" >_blank</xsl:if>
            </xsl:variable>
            <div id="linkitem" class="item link-item bullet">
                <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
    <span style="color:black;">
       <xsl:value-of select="@Priority"/></span>
       :

                <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
                    <xsl:value-of select="$DisplayTitle"/>
                </a>
       <img src="/_layouts/images/blank.gif" width="5" style="visibility:hidden" alt=""/><xsl:if test="@Priority='(1) 高'">
      <img src="/_layouts/images/ewr207s.gif" alt="優先度:高" border="0" height="11px"/>
       </xsl:if>
    <xsl:if test="ddwrt:IfNew(@Modified)">
    <img src="/_layouts/1041/images/New.gif" alt="新しいアイテム"/></xsl:if>
       <img src="/_layouts/images/blank.gif" width="13" style="visibility:hidden" alt=""/>
    <span style="color:black">
       [期日:<xsl:value-of select="ddwrt:FormatDate(string(@DueDate),number('1041'),7)"/>]
            </span>
    <xsl:if test="translate(substring-before(@DueDate,' '),'-','')&lt;translate(substring-before(ddwrt:TodayIso(),'T'),'-','')">
    <span style="color:red;"><img src="/_layouts/images/blank.gif" width="5" style="visibility:hidden" alt=""/>
    ※期日を過ぎています!</span>
    </xsl:if>

    </div>
    </xsl:template>
  7. 上書き保存し、メジャーバージョンとして発行します(SharePoint Desigenr 2007 を終了しても構いませんが、記述ミスなどがある場合にすぐに修正できるよういったんは最小化しておいた方が良いでしょう)。

コンテンツ クエリ Web パーツに新しいスタイルを適用する

  1. IE に戻ります。コンテンツ クエリWeb パーツの[編集] メニューから[共有Webパーツの変更] をクリックします。
  2. コンテンツのクエリツールパーツ内の"プレゼンテーション" セクションを開き、アイテムのスタイルを "すべてのタスク" に変更し 適用します。
  3. 表示に問題がなければ発行します。エラーが表示される場合は、ItemStyle.xsl の構文を見直してください。

以上で完了です!

と、なんとなく実務で利用できそうな感じ完成しました。トップページを見ると常に自分の仕事が追いかけてくるようになります(^^ゞ。

思いのほか長い連続投稿になってしまいましたが、参考になりましたでしょうか。

他にもいろいろとカスタマイズしたいというニーズがあるかと思いますが、調査中のものもたくさんありますので、また追々ご紹介していきたいと思います。

続きを読む »