Pregunta

Tengo un modelo BCS bastante simple:

public Guid Id { get; set; }
public SPFieldUrlValue Url { get; set; }
public string Description { get; set; }
public string Owner { get; set; }
public DateTime CreatedOn { get; set; }

La propiedad URL contiene tanto el título como la URL como cualquier propiedad de Hyperlink de SharePoint. El modelo BCS tiene el siguiente descriptor de tipo para los métodos de Listlist y ReadItem:

<TypeDescriptor Name="Url" TypeName="Microsoft.SharePoint.SPFieldUrlValue">
    <Properties>
        <Property Name="SPCustomFieldType" Type="System.String">`URL</Property>
    </Properties>
</TypeDescriptor>

En el schema.xml de la definición de la lista tengo los siguientes valores para la colección de campos:

<Field Name="BdcIdentity" DisplayName="BDC Identity" Hidden="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="BdcIdentity" Type="Text" />
<Field Name="Id" DisplayName="Id" Hidden="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Id" Type="Text" />
<Field Name="Url" DisplayName="Url" Format="Hyperlink" Hidden="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Url" Type="URL" />
<Field Name="Description" DisplayName="Description" Hidden="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Description" Type="Text" />
<Field Name="Owner" DisplayName="Owner" Hidden="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Owner" Type="Text" />
<Field Name="CreatedOn" DisplayName="Created On" Hidden="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="CreatedOn" Type="DateTime" />

Nada demasiado elegante. Sin embargo, cuando abro la vista predeterminada, no muestra la URL correctamente en la vista de la tabla, no muestra nada. En la vista del elemento individual se muestra correctamente. ¿Alguna idea sobre cómo obtener un spfielidurlvalue para que renderice correctamente en la interfaz de usuario?

¿Fue útil?

Solución

Después de dos meses y medio (!!!!) PSS pudo encontrar una solución al usar una hoja de estilo XML personalizada que se almacena en diseños/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[@Name='Url' and @Format='Hyperlink']" mode="URL_body" priority="1">
    <xsl:param name="thisNode" select="."/>
    <xsl:variable name="url" select="normalize-space(substring-before($thisNode/@*[name()=current()/@Name],','))" />
    <xsl:variable name="desc" select="normalize-space(substring-after($thisNode/@*[name()=current()/@Name],','))" />
    <xsl:variable name="descfld" select="$thisNode/@Description"/>
    <xsl:variable name="urlfld" select="$thisNode/@Url"/>
    <!--  URL: <xsl:value-of select="$urlfld" /><br/>
          Description: <xsl:value-of select="$descfld" /><br/>
      Link: -->
    <a href="{$url}" alt="{$desc}">
      <xsl:value-of select="$desc"/>
    </a>
  </xsl:template>
</xsl:stylesheet>

Otros consejos

Según la página de MSDN Propiedades personalizadas de BDC:

Esta propiedad no tiene ningún efecto en los métodos que no sean el Finder específico.

Me pregunto, ¿cómo puedo implementar este XSL? Descanso puedo crearlo e implementarlo en diseños/XSL ... ¿Pero no hay conexión entre la lista externa y el archivo XSL?

Licenciado bajo: CC-BY-SA con atribución
scroll top