自定义字段定义
Custom Field definition
在 SharePoint 2013 上,我在使用 schema.xml 文件定义的列表中的字段时遇到问题。我们从 2007 年升级到它工作正常,但升级到 2013 后,从新创建列表时它不再工作。
历史上:
该字段是一个自定义字段,输出用 link 包裹的图像,使用 javascript 是动态的。这是使用显示模式和 cdata 定义的。
我们在 schema.xml 文件中定义了如下字段:
<Field ID="{A54A4AE0-CA79-47b0-819E-32DC1B3F5AFB}" ReadOnly="TRUE" Type="Computed" Name="Book" Sortable="FALSE" Filterable="FALSE" DisplayName="Book" ClassInfo="Icon" AuthoringInfo="(link to book item)" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Book" FromBaseType="TRUE">
<DisplayPattern>
<HTML><![CDATA[<a href="javascript:" OnClick="javascript:this.href=L_Menu_BaseUrl + '/Lists/Bookings/NewForm.aspx?Session_x0020_Name=]]></HTML>
<Column Name="ID" />
<HTML><![CDATA[';GoToLink(this);return false;" target="_self">]]></HTML>
<HTML><![CDATA[<img border="0" alt="]]></HTML>
<HTML>Book</HTML>
<HTML><![CDATA[" src="/_layouts/images/Book.GIF">]]></HTML>
<HTML><![CDATA[</a>]]></HTML>
</DisplayPattern>
</Field>
当使用此模式从新启动列表时,它不再有效,它创建了书籍字段,但它只是空白。
我尝试过的:
经过研究,我了解到自定义字段现在是用 xsl 文件定义的:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\TEMPLATE\LAYOUTS\XSL
所以我创建了一个名为:fldtypes_Book.xsl
的 xls 文件
其中的内容如下所示(目前我只是想输出简单的文本来让它工作):
<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
version="1.0"
exclude-result-prefixes="xsl msxsl ddwrt"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:ddwrt2="urn:frontpage:internal">
<xsl:template match="FieldRef[@ID='A54A4AE0-CA79-47b0-819E-32DC1B3F5AFB']" mode="Computed_body" priority="1">
<xsl:param name="thisNode" select="."/>
<span>Hello.</span>
</xsl:template>
</xsl:stylesheet>
同样这不起作用,它只是输出该字段,但该字段为空。
我知道该字段正在与 xsl 文件挂钩,因为如果我在文件中输入了一些错误的标签或随机混乱,列表就会中断。
24/08/2015 - 更新
经过研究我发现了这个:
https://msdn.microsoft.com/en-us/library/office/jj220061.aspx
并尝试将 js 文件上传到母版页并在列表 Web 部件设置中 link 上传到它,但没有任何反应,我的 js 文件的内容:
(function () {
// Initialize the variables for overrides objects
var overrideCtx = {};
overrideCtx.Templates = {};
// alert("Override call worked");
// Use BaseViewID and ListTemplateType to narrow focus/scope on
// which web parts on the page are affected
// overrideCtx.BaseViewID = 1;
// overrideCtx.ListTemplateType = 100;
/*
* Using the Fields override leaves the rest of the rendering intact, but
* allows control over one or more specific fields in the existing view
*/
overrideCtx.Templates.Fields = {
'Book': { 'View' : 'Hello' }
};
/*
* Register the template overrides.
*/
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();
非常感谢任何帮助。
尝试将已用字段的 FieldRef 放在 DisplayPattern 定义之前(同时,确保这些字段也已定义),如下所示:
<!-- This is your computed field -->
<Field ID="{GUID}" Name="Book" DisplayName="Book" Type="Computed" Required="FALSE" Group="Custom Site Columns">
<!--Insert these refs -->
<FieldRefs>
<FieldRef Name="BookID"/>
</FieldRefs>
<DisplayPattern>
<HTML><![CDATA[<a href="javascript:" OnClick="javascript:this.href=L_Menu_BaseUrl + '/Lists/Bookings/NewForm.aspx?Session_x0020_Name=]]></HTML>
<Column Name="BookID" />
<HTML><![CDATA[';GoToLink(this);return false;" target="_self">]]></HTML>
<HTML><![CDATA[<img border="0" alt="]]></HTML>
<HTML>Book</HTML>
<HTML><![CDATA[" src="/_layouts/images/Book.GIF">]]></HTML>
<HTML><![CDATA[</a>]]></HTML>
</DisplayPattern>
</Field>
<!--This is refered field -->
<Field ID="{GUID}" Name ="BookID" DisplayName="BookID" Type="Text" Group="Custom Site Columns"></Field>
并且不要忘记重新创建您的列表,这将有助于共享指向 "see" 您的更新。祝你好运!
在 SharePoint 2013 中引入了客户端呈现(又名 CSR),用于呈现列表视图、列表表单和搜索结果。与以前的 SharePoint 呈现系统(2010 年的 XSLT 和 2007 年的 CAML)不同,CSR 是客户端呈现模式,SharePoint 2013 中的 default 模式。要熟悉 CSR,我会推荐以下内容文章:SharePoint 2013 Client Side Rendering: List Views.
如何通过 CSR 在 SharePoint 2013 的列表视图中自定义字段呈现
以下示例演示如何自定义 Phones
列表中的 LinkTitle
列呈现。
JavaScript 模板:
SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() {
SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
Templates: {
Fields: {
'LinkTitle': {'View': phoneIconRenderer}
}
}
});
});
function phoneIconRenderer(ctx) {
var item = ctx.CurrentItem;
return '<img src="/SiteAssets/' + item.Title + '.png" />';
}
如何应用更改
至少有两个选项可用:
- 使用JSLink property
- 将JavaScript模板放在列表视图所在的页面上
选项 1:
- 将指定模板另存为文件
- 将文件上传到,例如,
Site Assets
图书馆
- 为列表视图 Web 部件指定
JS Link
属性 示例:~site
collection/SiteAssets/Phones.js
选项 2:
以下是使用第二个选项应用更改的方法:
- 将页面切换到编辑模式
- 在列表视图 Web 部件的正下方添加
Script Editor
Web 部件。
- 将指定的代码用
script
标签括起来放入Script Editor
,例如:<script type="text/javascript">{Template JS code goes here}</script>
- 保存页面
结果
在 SharePoint 2013 上,我在使用 schema.xml 文件定义的列表中的字段时遇到问题。我们从 2007 年升级到它工作正常,但升级到 2013 后,从新创建列表时它不再工作。
历史上:
该字段是一个自定义字段,输出用 link 包裹的图像,使用 javascript 是动态的。这是使用显示模式和 cdata 定义的。
我们在 schema.xml 文件中定义了如下字段:
<Field ID="{A54A4AE0-CA79-47b0-819E-32DC1B3F5AFB}" ReadOnly="TRUE" Type="Computed" Name="Book" Sortable="FALSE" Filterable="FALSE" DisplayName="Book" ClassInfo="Icon" AuthoringInfo="(link to book item)" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Book" FromBaseType="TRUE">
<DisplayPattern>
<HTML><![CDATA[<a href="javascript:" OnClick="javascript:this.href=L_Menu_BaseUrl + '/Lists/Bookings/NewForm.aspx?Session_x0020_Name=]]></HTML>
<Column Name="ID" />
<HTML><![CDATA[';GoToLink(this);return false;" target="_self">]]></HTML>
<HTML><![CDATA[<img border="0" alt="]]></HTML>
<HTML>Book</HTML>
<HTML><![CDATA[" src="/_layouts/images/Book.GIF">]]></HTML>
<HTML><![CDATA[</a>]]></HTML>
</DisplayPattern>
</Field>
当使用此模式从新启动列表时,它不再有效,它创建了书籍字段,但它只是空白。
我尝试过的:
经过研究,我了解到自定义字段现在是用 xsl 文件定义的:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\TEMPLATE\LAYOUTS\XSL
所以我创建了一个名为:fldtypes_Book.xsl
其中的内容如下所示(目前我只是想输出简单的文本来让它工作):
<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
version="1.0"
exclude-result-prefixes="xsl msxsl ddwrt"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:ddwrt2="urn:frontpage:internal">
<xsl:template match="FieldRef[@ID='A54A4AE0-CA79-47b0-819E-32DC1B3F5AFB']" mode="Computed_body" priority="1">
<xsl:param name="thisNode" select="."/>
<span>Hello.</span>
</xsl:template>
</xsl:stylesheet>
同样这不起作用,它只是输出该字段,但该字段为空。
我知道该字段正在与 xsl 文件挂钩,因为如果我在文件中输入了一些错误的标签或随机混乱,列表就会中断。
24/08/2015 - 更新
经过研究我发现了这个:
https://msdn.microsoft.com/en-us/library/office/jj220061.aspx
并尝试将 js 文件上传到母版页并在列表 Web 部件设置中 link 上传到它,但没有任何反应,我的 js 文件的内容:
(function () {
// Initialize the variables for overrides objects
var overrideCtx = {};
overrideCtx.Templates = {};
// alert("Override call worked");
// Use BaseViewID and ListTemplateType to narrow focus/scope on
// which web parts on the page are affected
// overrideCtx.BaseViewID = 1;
// overrideCtx.ListTemplateType = 100;
/*
* Using the Fields override leaves the rest of the rendering intact, but
* allows control over one or more specific fields in the existing view
*/
overrideCtx.Templates.Fields = {
'Book': { 'View' : 'Hello' }
};
/*
* Register the template overrides.
*/
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();
非常感谢任何帮助。
尝试将已用字段的 FieldRef 放在 DisplayPattern 定义之前(同时,确保这些字段也已定义),如下所示:
<!-- This is your computed field -->
<Field ID="{GUID}" Name="Book" DisplayName="Book" Type="Computed" Required="FALSE" Group="Custom Site Columns">
<!--Insert these refs -->
<FieldRefs>
<FieldRef Name="BookID"/>
</FieldRefs>
<DisplayPattern>
<HTML><![CDATA[<a href="javascript:" OnClick="javascript:this.href=L_Menu_BaseUrl + '/Lists/Bookings/NewForm.aspx?Session_x0020_Name=]]></HTML>
<Column Name="BookID" />
<HTML><![CDATA[';GoToLink(this);return false;" target="_self">]]></HTML>
<HTML><![CDATA[<img border="0" alt="]]></HTML>
<HTML>Book</HTML>
<HTML><![CDATA[" src="/_layouts/images/Book.GIF">]]></HTML>
<HTML><![CDATA[</a>]]></HTML>
</DisplayPattern>
</Field>
<!--This is refered field -->
<Field ID="{GUID}" Name ="BookID" DisplayName="BookID" Type="Text" Group="Custom Site Columns"></Field>
并且不要忘记重新创建您的列表,这将有助于共享指向 "see" 您的更新。祝你好运!
在 SharePoint 2013 中引入了客户端呈现(又名 CSR),用于呈现列表视图、列表表单和搜索结果。与以前的 SharePoint 呈现系统(2010 年的 XSLT 和 2007 年的 CAML)不同,CSR 是客户端呈现模式,SharePoint 2013 中的 default 模式。要熟悉 CSR,我会推荐以下内容文章:SharePoint 2013 Client Side Rendering: List Views.
如何通过 CSR 在 SharePoint 2013 的列表视图中自定义字段呈现
以下示例演示如何自定义 Phones
列表中的 LinkTitle
列呈现。
JavaScript 模板:
SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() {
SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
Templates: {
Fields: {
'LinkTitle': {'View': phoneIconRenderer}
}
}
});
});
function phoneIconRenderer(ctx) {
var item = ctx.CurrentItem;
return '<img src="/SiteAssets/' + item.Title + '.png" />';
}
如何应用更改
至少有两个选项可用:
- 使用JSLink property
- 将JavaScript模板放在列表视图所在的页面上
选项 1:
- 将指定模板另存为文件
- 将文件上传到,例如,
Site Assets
图书馆 - 为列表视图 Web 部件指定
JS Link
属性 示例:~site collection/SiteAssets/Phones.js
选项 2:
以下是使用第二个选项应用更改的方法:
- 将页面切换到编辑模式
- 在列表视图 Web 部件的正下方添加
Script Editor
Web 部件。 - 将指定的代码用
script
标签括起来放入Script Editor
,例如:<script type="text/javascript">{Template JS code goes here}</script>
- 保存页面
结果