【问题标题】:Sharepoint custom fields xslt and custom propertiesSharepoint 自定义字段 xslt 和自定义属性
【发布时间】:2011-12-10 02:42:53
【问题描述】:

我有一个带有自定义字符串属性的 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>

【问题讨论】:

    标签: sharepoint xslt custom-fields


    【解决方案1】:

    由于缺少 MS 人员和 MSDN 文档,我很疯狂。 也许这个帮助适用于我的自定义字段类型(名为 LinkType 的自定义属性):

        <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”继承我的字段时,覆盖“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 文档做点什么!

    【讨论】:

      【解决方案2】:

      你能告诉我们更多关于你的结构的信息吗?! 但是你当然可以尝试在你的自定义字段上使用 if else 条件。

      【讨论】:

      • 我的问题是我不知道如何访问自定义属性的值。
      • Edit 我已经编辑了我的问题,添加了字段定义和 xsl 文件内容。
      猜你喜欢
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多