次の方法で共有


コンバータの設定の追加コントロール

最終更新日: 2010年3月8日

適用対象: SharePoint Server 2010

ユーザー設定のドキュメント コンバーターを作成する必要がある場合、Microsoft SharePoint Server 2010 ドキュメントの既定の構成設定ページに表示されるオプションより多くの情報を管理者から収集する必要が生じることもあります。この情報を収集するため、既存のコンバーター ページ上にホストするカスタム .ascx コントロールを指定できます。

構成設定のカスタム コントロールを指定するには、ドキュメント コンバータ定義の ConverterSpecificSettingsUI 要素を、使用する .ascx コントロールのファイル名に設定します。これは省略可能な要素です。コンバータ構成設定ページは、コントロールをホストする ConverterSettingsForContentType 要素で指定する必要があります。

ドキュメント コンバータ定義の詳細については、「ドキュメント コンバータ定義スキーマ」を参照してください。

指定する構成設定ページには、次の例で示すように、IDocumentConverterControl インターフェイスを実装するコードを含める必要があります。

さらに、コントロールが返す文字列は、XML ノードとして有効であることが必要です。

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

外部ファイルの設定

ユーザーがファイルを参照できるようにする .ascx コントロールには、特別に注意する点があります。コンバーターはそれ自身のプロセス内で実行されるので、サーバー上のファイルにアクセスできません。このため、すべてのファイルの内容が、コンバーターに渡される構成情報の中に読み込まれる必要があります。ドキュメント コンバーターのインフラストラクチャには、コンバーターが呼び出されたときに、ファイルへの参照によって、実際にファイルの内容を構成設定情報の中に取り込むメカニズムが含まれています。

ファイルの内容を構成設定情報の中に読み込むには、構成設定の XML に FilePlaceholder 要素を追加します。この要素には、Url という属性が 1 つあり、この属性が、コンバータに渡す構成設定情報に内容を読み込もうとしているファイルの URL を表します。

次に例を示します。

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

ドキュメントの変換が開始されると、ドキュメント変換のインフラストラクチャは構成設定内にある FilePlaceHolder 要素ごとに、以下のことを行います。

  • URL を解決します。

  • 指定されたファイルを開きます。

  • ファイルの内容を base64 エンコードでエンコードし、エンコードされた内容を FilePlaceHolder 要素のノードに配置します。

コンバータは、構成設定を受け取ったら、ファイルの内容を変換する必要があります。そのためには、コンバータは FilePlaceHolder ノードにアクセスし、その内容を変換する必要があります。たとえば、次のように指定します。

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

コンバータに渡される構成設定の XML の詳細については、「ドキュメントからページへのコンバーターの構成設定スキーマ」を参照してください。

関連項目

概念

ドキュメント コンバータの概要

ドキュメント コンバータ

ドキュメント コンバータの展開

ドキュメント コンバータ定義スキーマ

ドキュメントからページへのコンバーターの構成設定スキーマ