locked
コンテンツクエリWebパーツのカスタマイズについて RRS feed

  • 質問

  • 初めて投稿します。よろしくお願いします。

     

    コンテンツクエリWebパーツに任意の列を追加して表示させています。

    ItemStye.xslをカスタマイズして表示も変えようと考えています。

    そこで、コンテンツクエリWebパーツに「本日の日付」を表示させたいのですが、

    なにかよい方法はないでしょうか。

     

    なにかよいアイディアがあればご教授ください。

    よろしくお願いいたします。

    2007年11月27日 14:38

回答

  • お世話になっております。松崎と申します。

     

    ItemStyle.xsl をご使用されているということですので、ここについての細かな説明は割愛致します。スタティックな値の表示でしたら、JScript などで表示時に値を設定するというスタイルの指定が可能です。

     

    そこで、以下の通り ItemStyle.xsl を変更し簡単に試してみたのですが、実は別の課題が発覚しました。(動かしてみてよかったです、、、赤字ゴシック部分を追加しました)

     

    <xslTongue Tiedtylesheet
      version="1.0"
      exclude-result-prefixes="x d xsl msxsl cmswrt"
      xmlns:x="http://www.w3.org/2001/XMLSchema"
      xmlnsBig Smile="http://schemas.microsoft.com/sharepoint/dsp"
      xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urnTongue Tiedchemas-microsoft-com:xslt" xmlns:myfnc="http://www.mysite.com/myfnc">
      <msxslTongue Tiedcript language="JScript" implements-prefix="myfnc">
      <![CDATA[
      function getFormatDate() {
        // 今回はそのまま返す!
        var tdate = new Date();
        return tdate;
      }
      ]]>
      </msxslTongue Tiedcript>

      .....

    <!-- 新しいスタイルのテンプレートを追加 -->

        <xsl:template name="MyTest" match="Row[@Style='MyTest']" 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">
                <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
                <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
                    <xsl:value-of select="$DisplayTitle"/>
                </a>
                <xsl:value-of select="myfnc:getFormatDate()"/>
            </div>
        </xsl:template>

      .....

    </xslTongue Tiedtylesheet>

     

    このスタイルテンプレートをコンテンツクエリWebパーツでご使用頂いてログをみて頂くとわかるのですが、xsl でスクリプトの実行 (EnableScript プロパティ) が有効となっていないため例外 (Exception) が発生します。このプロパティは、Web パーツの初期化の処理などで設定する必要がありますが、今回はカスタムで作成した Web パーツではないのでこの方法の採用もできません。

    ですので、結論としては、少し面倒で申し訳ありませんが、「今日の日付」を表示するサーバ上で定義された「列」 (つまり SharePoint のサイト列) をカスタムに作成して頂き、ItemStyle.xsl で、これを表示するようなスタイルを指定して頂くことになると思われます。

     

    以下、ざっくりと方法を記載いたします。(以下は当方でも動かしてみたわけではありませんので、以下の概要で関係サイトなどをご参照いただき設定してみてください。)

     

    1. まず、「今日の日付」を表示するカスタムの列を Visual Studio などで構築します。
      Visual Studio extensions for WSS (VSeWSS) はこれを簡単におこなう仕組みを提供していますので(アイテムテンプレートなどが入っています)、以下をご参照ください。

      http://msdn2.microsoft.com/en-us/library/bb684919.aspx

    2. 以降の設定に際し、内部名が必要となりますので、上記で作成したカラムの内部名 (internal field name) を取得してください。(特殊なコードなどが内部名に割りあたらないよう、表示名の文字そのものではなく、エンコードされた内部名が使用されます)
      Visual Studio extensions for WSS で作成された場合には、CAML (定義の XML) に記載されています。もし、VSeWSS を使用されていない場合には、VSeWSS のソリューションジュネレータでCAMLを取得するか、あるいは、以下 (ECM チームブログ) で記載されているように、「サイト列」のページに行って該当の列を選択し、URL (URL の中の field プロパティ) から内部名を取得できます。(記載されている通り、"field=Body%5Fx0020%5Fcontent" の場合は、内部名は Body_x0020_content になります。)

      http://blogs.msdn.com/ecm/archive/2006/10/25/configuring-and-customizing-the-content-query-web-part.aspx

    3. 使用するコンテンツクエリ Web パーツの側で、この上記で追加した列を取得するようにする必要があります。
      .webpart ファイルをエクスポートし、以下の記事の「Note on the Content Query scope for Beta 2」に記載されている方法で WebPart プロパティ (.webpart ファイル) の CommonViewFields, DataColumnRenames を追加し、アップロードしてください。(今回は日付型ですから、DateTime としてください。)

      http://www.microsoft.com/belux/msdn/nl/community/columns/stevenvandecraen/contentquerywebpart.mspx

    4. ItemStyle.xsl に新しいスタイルテンプレートを追加します (新しい列の指定は、上記サイトの「Note on the Content Query scope for Beta 2」に記載されている要領で記述することになります。)

     

    2007年12月14日 9:19

すべての返信

  • お世話になっております。松崎と申します。

     

    ItemStyle.xsl をご使用されているということですので、ここについての細かな説明は割愛致します。スタティックな値の表示でしたら、JScript などで表示時に値を設定するというスタイルの指定が可能です。

     

    そこで、以下の通り ItemStyle.xsl を変更し簡単に試してみたのですが、実は別の課題が発覚しました。(動かしてみてよかったです、、、赤字ゴシック部分を追加しました)

     

    <xslTongue Tiedtylesheet
      version="1.0"
      exclude-result-prefixes="x d xsl msxsl cmswrt"
      xmlns:x="http://www.w3.org/2001/XMLSchema"
      xmlnsBig Smile="http://schemas.microsoft.com/sharepoint/dsp"
      xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urnTongue Tiedchemas-microsoft-com:xslt" xmlns:myfnc="http://www.mysite.com/myfnc">
      <msxslTongue Tiedcript language="JScript" implements-prefix="myfnc">
      <![CDATA[
      function getFormatDate() {
        // 今回はそのまま返す!
        var tdate = new Date();
        return tdate;
      }
      ]]>
      </msxslTongue Tiedcript>

      .....

    <!-- 新しいスタイルのテンプレートを追加 -->

        <xsl:template name="MyTest" match="Row[@Style='MyTest']" 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">
                <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
                <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
                    <xsl:value-of select="$DisplayTitle"/>
                </a>
                <xsl:value-of select="myfnc:getFormatDate()"/>
            </div>
        </xsl:template>

      .....

    </xslTongue Tiedtylesheet>

     

    このスタイルテンプレートをコンテンツクエリWebパーツでご使用頂いてログをみて頂くとわかるのですが、xsl でスクリプトの実行 (EnableScript プロパティ) が有効となっていないため例外 (Exception) が発生します。このプロパティは、Web パーツの初期化の処理などで設定する必要がありますが、今回はカスタムで作成した Web パーツではないのでこの方法の採用もできません。

    ですので、結論としては、少し面倒で申し訳ありませんが、「今日の日付」を表示するサーバ上で定義された「列」 (つまり SharePoint のサイト列) をカスタムに作成して頂き、ItemStyle.xsl で、これを表示するようなスタイルを指定して頂くことになると思われます。

     

    以下、ざっくりと方法を記載いたします。(以下は当方でも動かしてみたわけではありませんので、以下の概要で関係サイトなどをご参照いただき設定してみてください。)

     

    1. まず、「今日の日付」を表示するカスタムの列を Visual Studio などで構築します。
      Visual Studio extensions for WSS (VSeWSS) はこれを簡単におこなう仕組みを提供していますので(アイテムテンプレートなどが入っています)、以下をご参照ください。

      http://msdn2.microsoft.com/en-us/library/bb684919.aspx

    2. 以降の設定に際し、内部名が必要となりますので、上記で作成したカラムの内部名 (internal field name) を取得してください。(特殊なコードなどが内部名に割りあたらないよう、表示名の文字そのものではなく、エンコードされた内部名が使用されます)
      Visual Studio extensions for WSS で作成された場合には、CAML (定義の XML) に記載されています。もし、VSeWSS を使用されていない場合には、VSeWSS のソリューションジュネレータでCAMLを取得するか、あるいは、以下 (ECM チームブログ) で記載されているように、「サイト列」のページに行って該当の列を選択し、URL (URL の中の field プロパティ) から内部名を取得できます。(記載されている通り、"field=Body%5Fx0020%5Fcontent" の場合は、内部名は Body_x0020_content になります。)

      http://blogs.msdn.com/ecm/archive/2006/10/25/configuring-and-customizing-the-content-query-web-part.aspx

    3. 使用するコンテンツクエリ Web パーツの側で、この上記で追加した列を取得するようにする必要があります。
      .webpart ファイルをエクスポートし、以下の記事の「Note on the Content Query scope for Beta 2」に記載されている方法で WebPart プロパティ (.webpart ファイル) の CommonViewFields, DataColumnRenames を追加し、アップロードしてください。(今回は日付型ですから、DateTime としてください。)

      http://www.microsoft.com/belux/msdn/nl/community/columns/stevenvandecraen/contentquerywebpart.mspx

    4. ItemStyle.xsl に新しいスタイルテンプレートを追加します (新しい列の指定は、上記サイトの「Note on the Content Query scope for Beta 2」に記載されている要領で記述することになります。)

     

    2007年12月14日 9:19
  • 松崎様

     

    すっかりお正月気分で返事が遅れてしまいました。

    回答いただいてありがとうございます。

    なるほど、jscriptではだめなのですね。

    新しい列を追加する方法検討してみます。

    どうもありがとうございました。

     

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

     

    2008年1月7日 5:22
  • Nagahara Mutsuko さん、こんにちは。

    フォーラムオペレーターの鈴木裕子です

     

    投稿からかなり時間がたってしまいましたが、弊社 松崎の情報が参考となったようでよかったです!

    こちらの情報を、他の皆様にも活用していただきたいと思いましたので、

    勝手ながら私の方で回答チェックをつけさせていただきました。

     

    Nagahara Mutsuko さんはチェックの解除もできますので、もし不適切でしたら修正をお願いします。

     

    これからもForumをご活用くださいね!

    それでは。

    2008年8月22日 6:08
    モデレータ