Partager via


Autres contrôles de paramètres de convertisseur

Dernière modification : lundi 8 mars 2010

S’applique à : SharePoint Server 2010

Si vous devez créer un convertisseur de documents personnalisé, il est possible que vous deviez recueillir d'autres informations auprès de l'administrateur que celles proposées dans la page des paramètres de configuration de document par défaut de Microsoft SharePoint Server 2010. Pour recueillir ces informations, vous pouvez spécifier un contrôle .ascx personnalisé de sorte qu'il soit hébergé dans une page de convertisseur existante.

Pour spécifier un contrôle de paramètres de configuration personnalisés, vous pouvez définir l'élément ConverterSpecificSettingsUI du convertisseur de documents sur le nom de fichier du contrôle .ascx que vous souhaitez utiliser. Il s'agit d'un élément facultatif. Vous devez spécifier une page de paramètres de configuration de convertisseur dans l'élément ConverterSettingsForContentType pour héberger le contrôle.

Pour plus d'informations sur la définition de convertisseur de documents, voir Schéma de définition du convertisseur de documents.

La page de paramètres de configuration que vous spécifiez doit contenir du code qui implémente l'interface IDocumentConverterControl, comme illustré dans l'exemple ci-après.

La chaîne retournée par le contrôle doit être en outre un nœud XML valide.

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

Paramètres de fichier externe

Un contrôle .ascx permettant à l'utilisateur de pointer vers un fichier représente un défi spécial : le convertisseur exécute son propre processus et n'a pas accès aux fichiers sur le serveur. Le contenu de tous les fichiers doit par conséquent être lu dans les informations de configuration passées au convertisseur. L'infrastructure du convertisseur de documents contient un mécanisme par lequel une référence à un fichier transmet le contenu du fichier aux informations de paramètres de configuration lorsque le convertisseur est appelé.

Pour lire le contenu d'un fichier dans les informations de paramètres de configuration, vous devez ajouter un élément FilePlaceholder au code XML des paramètres de configuration. Cet élément possède un seul attribut, Url, qui représente l'URL du fichier dont vous souhaitez lire le contenu dans les informations de paramètres de configuration passées au convertisseur.

Par exemple :

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

Lorsqu'une conversion de documents est démarrée, l'infrastructure de celle-ci effectue les opérations suivantes pour chaque élément FilePlaceHolder des paramètres de configuration :

  • résolution de l'adresse URL ;

  • ouverture du fichier spécifié ;

  • codage en base64 du contenu du fichier et placement du contenu codé dans le nœud FilePlaceHolder.

Lorsque le convertisseur reçoit les paramètres de configuration, il doit convertir le contenu du fichier. Pour ce faire, il doit accéder au nœud FilePlaceHolder et convertir son contenu. Par exemple :

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

Pour plus d'informations sur les éléments XML des paramètres de configuration passés au convertisseur, voir Schéma des paramètres de configuration de convertisseur documents/pages.

Voir aussi

Concepts

Vue d'ensemble des convertisseurs de documents

Convertisseurs de documents

Déploiement de conversion de document

Schéma de définition du convertisseur de documents

Schéma des paramètres de configuration de convertisseur documents/pages