Freigeben über


Weitere Steuerelemente mit Konvertereinstellungen

Letzte Änderung: Montag, 8. März 2010

Gilt für: SharePoint Server 2010

Wenn Sie einen benutzerdefinierten Dokumentkonverter erstellen müssen, müssen Sie möglicherweise weitere Informationen vom Administrator erfragen als die Optionen, die auf der standardmäßigen Seite für Dokumentkonfigurationseinstellungen in Microsoft SharePoint Server 2010 bereitgestellt sind. Zum Sammeln dieser Informationen können Sie ein benutzerdefiniertes ASCX-Steuerelement zum Hosten einer vorhandenen Konverterseite verwenden.

Legen Sie zum Angeben eines Steuerelements für benutzerdefinierte Konfigurationseinstellungen das ConverterSpecificSettingsUI-Element der Dokumentkonverterdefinition auf den Dateinamen des ASCX-Steuerelements fest, das Sie verwenden möchten. Dies ist ein optionales Element. Sie müssen eine Seite für die Konverterkonfigurationseinstellungen im ConverterSettingsForContentType-Element angeben, das das Steuerelement hosten soll.

Weitere Informationen zur Dokumentkonverterdefinition finden Sie unter Schema für die Dokumentkonverterdefinition.

Die von Ihnen angegebene Konfigurationseinstellungsseite muss Code enthalten, der die IDocumentConverterControl-Schnittstelle implementiert, wie im folgenden Beispiel zu sehen.

Darüber hinaus muss die Zeichenfolge, die vom Steuerelement zurückgegeben wird, als XML-Knoten gültig sein.

public class XslApplicatorSettingsControl : UserControl, 
             IDocumentConverterControl
{
  /// <summary>
  /// XSLT asset selector control
  /// </summary>
  public AssetUrlSelector assetSelectedXsl;

  /// <summary>
  /// Validator to make sure user picks XSLT
  /// </summary>
  public FileExtensionValidator fileExtensionValidator;

  /// <summary>
  /// Input form section, used only to get the display title of the 
      section.
  /// </summary>
  public InputFormSection inputSection;

  protected override void OnLoad(EventArgs e)
  {
    base.OnLoad(e);
    this.fileExtensionValidator.ControlToValidate = 
      this.assetSelectedXsl.ID;
  }

  private const string ConverterSettingsXmlName = 
      "XslApplicatorConverterSettings";

  /// <summary>
  /// Property that is the interface to the outer world - get/set a 
      string 
      that persists the settings
  /// </summary>
  public string ConverterSettings
  {
    get
    {
      StringBuilder sb = new StringBuilder("<", 256);
      sb.Append(ConverterSettingsXmlName);
      sb.Append(" Version=\"1\" >");

      sb.Append("<FilePlaceHolder Url=\");
      sb.Append(this.assetSelectedXsl.AssetUrl);
      sb.Append("\">");

      sb.Append("</FilePlaceHolder>");

      sb.Append("</");
      sb.Append(ConverterSettingsXmlName);
      sb.Append(">");

      return sb.ToString();
    }

    set
    {
      if (!String.IsNullOrEmpty(value))
      {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(value);

          RcaUtilities.FilePlaceHolderElementName;
        XmlNodeList cl = xmlDoc.SelectNodes("//FilePlaceHolder");

        if (cl.Count > 0)
        {
          XmlNode node = cl[0];
          XmlAttribute attribute = node.Attributes["Url"];
          string fileUrl = String.Empty;

          if (attribute != null && attribute.Value != null)
          {
            fileUrl = attribute.Value;
          }

          this.assetSelectedXsl.AssetUrl = fileUrl;
        }
      }
    }
  }

  /// <summary>
  /// Implement setter to fulfill the interface
  /// </summary>
  public SPContentType ContentType
  {
    set
    {
    }
    get
    {
      return null;
    }
  }

  /// <summary>
  /// This control always requires configuration
  /// </summary>
  public bool RequiresConfiguration
  {
    get
    {
      return true;
    }
  }

  /// <summary>
  /// Display title, used to direct user to this section in the page in 
      case of validation errors
  /// </summary>
  public string SectionDisplayTitle
  {
    get
    {
      return this.inputSection.Title;
    }
  }
Public Class XslApplicatorSettingsControl
    Inherits UserControl
    Implements IDocumentConverterControl
  ''' <summary>
  ''' XSLT asset selector control
  ''' </summary>
  Public assetSelectedXsl As AssetUrlSelector

  ''' <summary>
  ''' Validator to make sure user picks XSLT
  ''' </summary>
  Public fileExtensionValidator As FileExtensionValidator

  ''' <summary>
  ''' Input form section, used only to get the display title of the 
  ''' section.
  ''' </summary>
  Public inputSection As InputFormSection

  Protected Overrides Sub OnLoad(ByVal e As EventArgs)
    MyBase.OnLoad(e)
    Me.fileExtensionValidator.ControlToValidate = Me.assetSelectedXsl.ID
  End Sub

  Private Const ConverterSettingsXmlName As String = "XslApplicatorConverterSettings"

  ''' <summary>
  ''' Property that is the interface to the outer world - get/set a 
  ''' string 
  ''' that persists the settings
  ''' </summary>
  Public Property ConverterSettings() As String
    Get
      Dim sb As New StringBuilder("<", 256)
      sb.Append(ConverterSettingsXmlName)
      sb.Append(" Version=""1"" >")

      sb.Append("<FilePlaceHolder Url=\")
      sb.Append(Me.assetSelectedXsl.AssetUrl)
      sb.Append(""">")

      sb.Append("</FilePlaceHolder>")

      sb.Append("</")
      sb.Append(ConverterSettingsXmlName)
      sb.Append(">")

      Return sb.ToString()
    End Get

    Set(ByVal value As String)
      If Not String.IsNullOrEmpty(value) Then
        Dim xmlDoc As New XmlDocument()
        xmlDoc.LoadXml(value)

          RcaUtilities.FilePlaceHolderElementName
        Dim cl As XmlNodeList = xmlDoc.SelectNodes("//FilePlaceHolder")

        If cl.Count > 0 Then
          Dim node As XmlNode = cl(0)
          Dim attribute As XmlAttribute = node.Attributes("Url")
          Dim fileUrl As String = String.Empty

          If attribute IsNot Nothing AndAlso attribute.Value IsNot Nothing Then
            fileUrl = attribute.Value
          End If

          Me.assetSelectedXsl.AssetUrl = fileUrl
        End If
      End If
    End Set
  End Property

  ''' <summary>
  ''' Implement setter to fulfill the interface
  ''' </summary>
  Public Property ContentType() As SPContentType
    Set(ByVal value As SPContentType)
    End Set
    Get
      Return Nothing
    End Get
  End Property

  ''' <summary>
  ''' This control always requires configuration
  ''' </summary>
  Public ReadOnly Property RequiresConfiguration() As Boolean
    Get
      Return True
    End Get
  End Property

  ''' <summary>
  ''' Display title, used to direct user to this section in the page in 
  ''' case of validation errors
  ''' </summary>
  Public ReadOnly Property SectionDisplayTitle() As String
    Get
      Return Me.inputSection.Title
    End Get
  End Property

Externe Dateieinstellungen

Ein ASCX-Steuerelement, mit dem ein Benutzer auf eine Datei zeigen kann, stellt eine besondere Herausforderung dar: Der Konverter wird in seinem eigenen Prozess ausgeführt und hat daher keinen Zugriff auf Dateien auf dem Server. Aus diesem Grund muss der Inhalt von Dateien in die Konfigurationsinformationen gelesen werden, die an den Konverter übergeben werden. Die Infrastruktur des Dokumentkonverters enthält einen Mechanismus, mit dem bei einem Verweis auf eine Datei der Inhalt tatsächlich aus der Datei in die Konfigurationseinstellungsinformationen gezogen wird, wenn der Konverter aufgerufen wird.

Fügen Sie zum Lesen des Inhalts einer Datei in die Konfigurationseinstellungsinformationen ein FilePlaceholder-Element dem XML für Konfigurationseinstellungen hinzu. Dieses Element besitzt ein einzelnes Attribut, Url, das die URL der Datei darstellt, dessen Inhalt in die an den Konverter übergebenen Konfigurationseinstellungsinformationen gelesen werden soll.

Ein Beispiel:

<FilePlaceHolder Url="myUrlHere"><\FilePlaceHolder>

Bei Initiierung der Dokumentkonvertierung führt die Infrastruktur der Dokumentkonvertierung für jedes FilePlaceHolder-Element in den Konfigurationseinstellungen die folgenden Aktionen aus:

  • Löst die URL auf.

  • Öffnet die angegebene Datei.

  • Verschlüsselt den Dateiinhalt mit Base64-Codierung und platziert den verschlüsselten Inhalt im FilePlaceHolder-Elementknoten.

Wenn der Konverter die Konfigurationseinstellungen empfängt, muss der Inhalt der Datei konvertiert werden. Hierzu muss der Konverter auf den FilePlaceHolder-Knoten zugreifen und seinen Inhalt konvertieren. Ein Beispiel:

byte[] fileContent = System.Convert.FromBase64String(node.InnerXml);
Dim fileContent() As Byte = System.Convert.FromBase64String(node.InnerXml)

Weitere Informationen zum Konfigurationseinstellungen-XML, das an den Konverter übergeben wird, finden Sie unter Konfigurationseinstellungsschema für die Konvertierung von Dokumenten in Seiten.

Siehe auch

Konzepte

Übersicht über Dokumentkonverter

Dokumentkonverter

Bereitstellung von Dokumentkonvertern

Schema für die Dokumentkonverterdefinition

Konfigurationseinstellungsschema für die Konvertierung von Dokumenten in Seiten