我有一个带有自定义字符串属性的Sharepoint自定义字段。 它工作得很好,我可以通过我的自定义自定义控件设置属性,并存储该值。 我想使用我的XSL文件并根据自定义属性的值自定义列表视图中的字段渲染。
我怎样才能获得这个价值?
[编辑] 这是字段xml定义:
<?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
<FieldType>
<Field Name="TypeName">Secure</Field>
<Field Name="ParentType">Text</Field>
<Field Name="TypeDisplayName">Secure</Field>
<Field Name="TypeShortDescription">Secure Field</Field>
<Field Name="UserCreatable">TRUE</Field>
<Field Name="ShowOnListCreate">TRUE</Field>
<Field Name="ShowOnSurveyCreate">TRUE</Field>
<Field Name="ShowOnDocumentLibraryCreate">TRUE</Field>
<Field Name="ShowOnColumnTemplateCreate">TRUE</Field>
<Field Name="Sortable">FALSE</Field>
<Field Name="Filterable">FALSE</Field>
<Field Name="FieldTypeClass">MyProject.SecureFields.SecureField, $SharePoint.Project.AssemblyFullName$</Field>
<Field Name="FieldEditorUserControl">/_controltemplates/SecureFieldPropertyEditor.ascx</Field>
<PropertySchema>
<Fields>
<Field Name="ShowedFieldName" Hidden="TRUE" DisplayName="ShowedFieldName" Type="Text" MaxLength="255">
<Default></Default>
</Field>
</Fields>
</PropertySchema>
</FieldType>
</FieldTypes>
这是XSL:
<?xml version="1.0" encoding="utf-8"?>
<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[@FieldType = 'Secure']" mode="Text_body">
<xsl:param name="thisNode" select="." />
<xsl:variable name="showedFieldName" select="./@*[name()=current()/@ShowedFieldName]" />
<span style="background-color:lightgreen;font-weight:bold">
<xsl:value-of select="$showedFieldName"/>
</span>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
<xsl:template match="FieldRef[@FieldType = 'EnhancedTitleField']" mode="Text_body">
<xsl:param name="thisNode" select="."/>
<xsl:variable name="linkType" select="$thisNode/@LinkType" />
<xsl:choose>
<xsl:when test="$linkType=''">
empty
</xsl:when>
<xsl:otherwise>
link
</xsl:otherwise>
</xsl:choose>
</xsl:template >
... 之后,经过数小时的测试可能会成立解决方案当我从“SPFieldMultiLineText”继承我的字段时,owerride“GetFieldValueAsHtml”并更改字段定义它开始工作。 以下是工作组合的关键代码:
<Field Name="ParentType">Note</Field>
<Field Name="CAMLRendering">TRUE</Field>
<Field Name="AllowBaseTypeRendering">TRUE</Field>
<RenderPattern Name="DisplayPattern">
<Column Name="ID" /><HTML><![CDATA[;]]></HTML><Column Name="Title" /><HTML><![CDATA[;]]></HTML><PageUrl WebRel="FALSE" URLEncode="TRUE"/>
</RenderPattern>
在代码中:
EnhancedTitleField : SPFieldMultiLineText
...
public override string GetFieldValueAsHtml(object value)
{
string[] splitedValue = value != null ? value.ToString().Split(';') : new string[0];
int id = splitedValue.Length > 0 ? int.Parse(splitedValue[0]) : 0;
string title = splitedValue.Length > 1 ? splitedValue[1] : "";
string source = splitedValue.Length > 2 ? splitedValue[2] : "";
string html = EnhancedTitleFieldControl.GetHtml(this, id, title, source);
return html;
}
以某种方式在SPFieldMultilinetext中将CAML生成的值传递给此方法。因此,您可以通过此方法准备来自caml的上下文数据,以便您可以访问自定义属性!
希望这有助于:)和MS人员,使用MSDN文档进行搜索!
答案 1 :(得分:0)
您能否提供一些有关您的结构的更多信息?! 但是,您当然可以尝试在自定义字段上使用if else条件。