トップ回答者
コンテンツクエリWebパーツのカスタマイズについて

質問
回答
-
お世話になっております。松崎と申します。
ItemStyle.xsl をご使用されているということですので、ここについての細かな説明は割愛致します。スタティックな値の表示でしたら、JScript などで表示時に値を設定するというスタイルの指定が可能です。
そこで、以下の通り ItemStyle.xsl を変更し簡単に試してみたのですが、実は別の課題が発覚しました。(動かしてみてよかったです、、、赤字ゴシック部分を追加しました)
<xsl
tylesheet
version="1.0"
exclude-result-prefixes="x d xsl msxsl cmswrt"
xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns="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="urnchemas-microsoft-com:xslt" xmlns:myfnc="http://www.mysite.com/myfnc">
<msxslcript language="JScript" implements-prefix="myfnc">
<![CDATA[
function getFormatDate() {
// 今回はそのまま返す!
var tdate = new Date();
return tdate;
}
]]>
</msxslcript>
.....
<!-- 新しいスタイルのテンプレートを追加 -->
<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>.....
</xsl
tylesheet>
このスタイルテンプレートをコンテンツクエリWebパーツでご使用頂いてログをみて頂くとわかるのですが、xsl でスクリプトの実行 (EnableScript プロパティ) が有効となっていないため例外 (Exception) が発生します。このプロパティは、Web パーツの初期化の処理などで設定する必要がありますが、今回はカスタムで作成した Web パーツではないのでこの方法の採用もできません。
ですので、結論としては、少し面倒で申し訳ありませんが、「今日の日付」を表示するサーバ上で定義された「列」 (つまり SharePoint のサイト列) をカスタムに作成して頂き、ItemStyle.xsl で、これを表示するようなスタイルを指定して頂くことになると思われます。
以下、ざっくりと方法を記載いたします。(以下は当方でも動かしてみたわけではありませんので、以下の概要で関係サイトなどをご参照いただき設定してみてください。)
-
まず、「今日の日付」を表示するカスタムの列を Visual Studio などで構築します。
Visual Studio extensions for WSS (VSeWSS) はこれを簡単におこなう仕組みを提供していますので(アイテムテンプレートなどが入っています)、以下をご参照ください。
http://msdn2.microsoft.com/en-us/library/bb684919.aspx -
以降の設定に際し、内部名が必要となりますので、上記で作成したカラムの内部名 (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 -
使用するコンテンツクエリ 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 -
ItemStyle.xsl に新しいスタイルテンプレートを追加します (新しい列の指定は、上記サイトの「Note on the Content Query scope for Beta 2」に記載されている要領で記述することになります。)
2007年12月14日 9:19 -
すべての返信
-
お世話になっております。松崎と申します。
ItemStyle.xsl をご使用されているということですので、ここについての細かな説明は割愛致します。スタティックな値の表示でしたら、JScript などで表示時に値を設定するというスタイルの指定が可能です。
そこで、以下の通り ItemStyle.xsl を変更し簡単に試してみたのですが、実は別の課題が発覚しました。(動かしてみてよかったです、、、赤字ゴシック部分を追加しました)
<xsl
tylesheet
version="1.0"
exclude-result-prefixes="x d xsl msxsl cmswrt"
xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns="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="urnchemas-microsoft-com:xslt" xmlns:myfnc="http://www.mysite.com/myfnc">
<msxslcript language="JScript" implements-prefix="myfnc">
<![CDATA[
function getFormatDate() {
// 今回はそのまま返す!
var tdate = new Date();
return tdate;
}
]]>
</msxslcript>
.....
<!-- 新しいスタイルのテンプレートを追加 -->
<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>.....
</xsl
tylesheet>
このスタイルテンプレートをコンテンツクエリWebパーツでご使用頂いてログをみて頂くとわかるのですが、xsl でスクリプトの実行 (EnableScript プロパティ) が有効となっていないため例外 (Exception) が発生します。このプロパティは、Web パーツの初期化の処理などで設定する必要がありますが、今回はカスタムで作成した Web パーツではないのでこの方法の採用もできません。
ですので、結論としては、少し面倒で申し訳ありませんが、「今日の日付」を表示するサーバ上で定義された「列」 (つまり SharePoint のサイト列) をカスタムに作成して頂き、ItemStyle.xsl で、これを表示するようなスタイルを指定して頂くことになると思われます。
以下、ざっくりと方法を記載いたします。(以下は当方でも動かしてみたわけではありませんので、以下の概要で関係サイトなどをご参照いただき設定してみてください。)
-
まず、「今日の日付」を表示するカスタムの列を Visual Studio などで構築します。
Visual Studio extensions for WSS (VSeWSS) はこれを簡単におこなう仕組みを提供していますので(アイテムテンプレートなどが入っています)、以下をご参照ください。
http://msdn2.microsoft.com/en-us/library/bb684919.aspx -
以降の設定に際し、内部名が必要となりますので、上記で作成したカラムの内部名 (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 -
使用するコンテンツクエリ 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 -
ItemStyle.xsl に新しいスタイルテンプレートを追加します (新しい列の指定は、上記サイトの「Note on the Content Query scope for Beta 2」に記載されている要領で記述することになります。)
2007年12月14日 9:19 -