Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト|サインイン
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home   MSDN Home
MSDN Home > Office Developer Center > 開発資料 > カスタム Web フォームで InfoPath 2007 フォーム編集環境をホストする

カスタム Web フォームで InfoPath 2007 フォーム編集環境をホストする

  

Mike Talley、Microsoft Corporation
Namita Sheokand、Microsoft Corporation

2006 年 6 月公開
2007 年 4 月更新
日本語版最終更新日 2008 年 4 月 3 日

適用対象:
   Microsoft Office InfoPath 2007
   Microsoft Office SharePoint Server 2007

要約: XmlFormView ASP.NET コントロールを InfoPath Forms Services と共に使用して、カスタム Web ページを作成し、Web 対応の対話型 InfoPath フォームを表示する方法について説明します。

目次

XmlFormView コントロールの概要
SharePoint Server でカスタム Web ページを作成する
コントロールに Web 対応 InfoPath フォーム テンプレートを読み込む
XmlFormView コントロールを使用したコーディング
非ルート SharePoint サイトにカスタム Web ページを展開する
推奨される開発手法と展開手法
XmlFormView コントロール使用時の考慮事項
結論
追加情報

XmlFormView コントロールの概要

Web 対応 InfoPath フォーム テンプレートは、Microsoft Office InfoPath 2007 での実行を目的としてデザインされるフォームと機能的には同じですが、このフォーム テンプレートを InfoPath Forms Services を実行しているサーバーに発行したり、そのサーバーから開いたりする場合は、フォームを使用するコンピュータに Office InfoPath 2007 をインストールする必要はありません。Microsoft Office Forms Server 2007 または Microsoft Office SharePoint Server 2007 の一部である InfoPath Forms Services には、XmlFormView ASP.NET コントロールが含まれています。このコントロールを使用して、Web 対応フォームをカスタム Web ページで表示できます。 XmlFormView コントロールは、InfoPath フォームの機能を組織の Web インフラストラクチャに組み込む場合に企業にとって利点があります。

InfoPath Forms Services は Windows SharePoint Services 3.0 の拡張機能であるため、XmlFormView コントロールを新しい Web ページに開いたり、構成、追加する手順では、インターネット インフォメーション サービス (IIS) マネージャを使用して SharePoint サイトのパスを検索する、Microsoft Visual Studio 2005 でサイトを開く、Web 構成ファイルをデバッグ用に構成するなどの一般的な SharePoint Server 開発技術が必要です。

この記事では、次の作業について説明します。

  • SharePoint サーバー上で新しい Web ページを作成し、そのページに XmlFormView コントロールを追加する。
  • Web 対応フォーム テンプレートを作成および発行する。
  • XmlFormView コントロールを制御するためのコードを記述する。
  • SharePoint Server 機能パッケージを使用して、カスタム Web ページを展開する。

要件

この記事にある作業を実行するには、以下のアプリケーションがコンピュータにインストールされている必要があります。

  • Microsoft Office InfoPath 2007
  • Microsoft Office SharePoint Server 2007 または Microsoft Office Forms Server 2007
  • Microsoft Visual Studio 2005

SharePoint Server でカスタム Web ページを作成する

このセクションでは、Windows SharePoint Services によって管理するカスタム Web ページの作成に必要な以下の 4 つの作業について説明します。

  • SharePoint サイトを開いて Web ページを作成する
  • ページのプロパティを設定して、XmlFormView コントロールを追加する
  • SharePoint Server を構成し、IIS をリセットする
  • カスタム Web ページをデバッグする

ここに示す手順は、それぞれ前の手順を基に成り立っているため、手順を順番に実行することが重要です。

メモ:   InfoPath Forms Services を実行しているサーバーに Visual Studio 2005 をインストールしておく必要があります。

SharePoint サイトを開いて Web ページを作成する

次の手順に従い、ルート サイト コレクションを使用して、ポート 80 でカスタム Web ページを作成します。既定では、ポート 80 が SharePoint サーバーのサイト コレクションとなっていますが、ルート サイト コレクションの使用に限らず、どの SharePoint サイトでも使用できます。

ルート サイト コレクション以外のサイトにカスタム Web ページを展開する方法については、「非ルート SharePoint サイトにカスタム Web ページを展開する」を参照してください。

SharePoint サイトを開いて、Web ページを作成するには

  1. [スタート] メニューを開き、[管理ツール] をクリックして、[インターネット インフォメーション サービス (IIS) マネージャ] をクリックします。
  2. [ServerName (ローカル コンピュータ)] の横のプラス (+) 記号をクリックして、サーバーで使用可能な IIS サービスの一覧を展開します。ここで ServerName は、ご使用のサーバーの名前です。
  3. [Web サイト] を展開して、IIS で管理している Web サイトの一覧を表示します。
  4. [SharePoint (80)] を右クリックして、[プロパティ] を選択します。
  5. [SharePoint (80) のプロパティ] ダイアログ ボックスの [ASP.NET] タブで、[ファイルの場所] ボックスのテキストを強調表示してコピーします。このとき、[ファイルの場所] の文字列の最後に表示されている場合がある web.config はコピーしません。この文字列は通常、次のいずれかのパスのように表示されます。
    • C:\Inetpub\wwwroot\wss\VirtualDirectories\80
    • C:\Inetpub\wwwroot\wss\VirtualDirectories\GUID
  6. Visual Studio 2005 を起動します。
  7. [ファイル] メニューの [開く] をクリックして、[Web サイト] をクリックします。
  8. 図 1 に示すように、[ファイル システム] をクリックして、コピーしたファイルの場所のパスを [フォルダ] ボックス内に貼り付けます。
  9. ソリューション エクスプローラで Web サイトのパスを右クリックして、[新しいフォルダ] を選択します。
  10. "XmlFormView" など、フォルダの名前を入力します。
  11. この新しいフォルダを右クリックして、[新しい項目の追加] を選択します。規定のテンプレートに、[Web フォーム] が選択されます。
  12. MyCustomPage など、新しい Web フォームの名前を入力して、[言語] として [Visual C#] を選択します。
  13. [別のファイルにコードを書き込む] オプションを選択して [追加] をクリックします。

    図 1. Visual Studio 2005 ファイル パスを使用して SharePoint サイトを開く

ページのプロパティを設定して、XmlFormView コントロールを追加する

XmlFormView コントロールを含むカスタム Web ページではすべて、ページのセッション状態が有効になっており、その他の既定のオプションは削除されるか変更されている必要があります。次の手順を実行して、XmlFormView コントロールをホストするようにページを設定し、XmlFormView コントロールを Visual Studio の [ツールボックス] に追加してから Web ページに追加します。

ページのプロパティを設定して、XmlFormView コントロールを追加するには

  1. 新しい Web フォームの [ドキュメント プロパティ] で、EnableSessionState プロパティの [True] をクリックします。
  2. 左下隅の [ソース] ボタンをクリックして、ソース モードでページを表示します。
  3. 既定の Doctype 宣言タグを削除します。このタグは、<!DOCTYPE html PUBLIC で開始しています。
  4. 次の style 属性が含まれるように Body タグを変更します。
    style="margin: 0px;overflow:auto;padding:20px"
  5. 次の enctype 属性が含まれるように Form タグを変更します。
    enctype="multipart/form-data"
メモ:   エンコード タイプ (enctype) 属性は、XmlFormView コントロールに読み込んだフォームでファイル添付コントロールを使用する場合のみ必要です。この属性が正しく設定されていない場合、ファイル添付コントロールは表示されて機能しますが、InfoPath Forms Services を実行しているサーバーにファイルがアップロードされません。
  1. 完了したら、ページは、次のように表示されます。
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCustomPage.aspx.cs" Inherits="CustomPage_MyCustomPage" EnableSessionState="True" %>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body style="margin: 0px;overflow:auto;padding:20px">
        <form id="form1" runat="server" enctype="multipart/form-data">
        <div>
        
        </div>
        </form>
    </body>
    </html>
  2. 左下隅の [デザイン] ボタンをクリックして、デザイン モードでページを表示します。
  3. 次の手順に従って [ツールボックス] (Visual Studio で通常は左側にあります) を展開し、[全般] セクションに XmlFormView コントロールを追加します。
    1. [ツールボックス] で、[標準] セクションを折りたたんで、[全般] セクションを展開します。
    2. [全般] のタイトルの下を右クリックし、[アイテムの選択] をクリックします。
    3. [ツールボックス アイテムの選択] ダイアログ ボックスの [.NET Framework コンポーネント] タブで、[XmlFormView] を選択して [OK] をクリックします。

      [XmlFormView] が表示されていない場合は、[参照] ボタンをクリックし、Microsoft.Office.InfoPath.Server.dll アセンブリを検索します。このファイルは通常、ドライブ名:\Program Files\Microsoft Office Servers\12.0\Bin にあります。ここでドライブ名は、Office Forms Server 2007 または Office SharePoint Server 2007 がインストールされている場所です。

    4. Microsoft.Office.InfoPath.Server.dll アセンブリを選択して、[OK] をクリックします。
    5. [ツールボックス アイテムの選択] ダイアログ ボックスの [XmlFormView] を選択して、[OK] をクリックします。
  4. [ツールボックス] の [全般] セクションで、XmlFormView コントロールを新しいページにドラッグします。新しいページは図 2 のようになります。
  5. このページで XmlFormView コントロールを選択します。
  6. コントロールのプロパティ シートの [データのバインド] セクションで、Web 対応フォーム テンプレートの URL をコントロールの XsnLocation プロパティに貼り付けます。

    このプロパティの値に使用する Web 対応フォーム テンプレートの作成方法と発行方法については、「コントロールに Web 対応 InfoPath フォーム テンプレートを読み込む」を参照してください。

  7. 新しい Web フォームを保存します。

    図 2. 空白の Web ページ内の XmlFormView コントロール

SharePoint を構成し、IIS をリセットする

Visual Studio でカスタム Web ページを正常にデバッグするには、[Web サイト] メニューの [開始オプション] コマンドを使用して、URL を SharePoint サイト上のページに指定する必要があります。次に、Visual Studio ソリューションを保存し、SharePoint Server で変更を認識できるように IIS サービスをリセットします。

SharePoint Server を構成して IIS をリセットするには

  1. Visual Studio で、[Web サイト] メニューの [開始オプション] をクリックします。
  2. [開始動作] セクションで [URL の開始] をクリックし、カスタム ページへの URL を入力します。たとえば、次のような URL を入力します。

    http://ServerName/XmlFormView/MyCustomPage.aspx

    ここで ServerName はサーバーの名前、XmlFormView は Visual Studio で作成したフォルダの名前、MyCustomPage は Web フォーム ページを保存するために使用する名前です。

  3. [OK] をクリックします。
  4. [ファイル] メニューの [すべて保存] をクリックして、ソリューションに名前と場所を指定します。
  5. [スタート] メニューの [すべてのプログラム] をクリックして、[Microsoft Visual Studio 2005] をクリックし、[Visual Studio Tools] をクリックした後、Microsoft Visual Studio 2005 のコマンド プロンプト ウィンドウを開きます。
  6. プロンプトに、「iisreset」と入力して、Enter キーを押します。
  7. "インターネット サービスの再起動に成功しました" と表示されたら、Visual Studio 2005 のコマンド プロンプト ウィンドウを閉じます。

カスタム Web ページをデバッグする

カスタム Web ページをデバッグするには、web.config ファイルに含まれる、SharePoint サイトの Web オプションを変更する必要があります。次の手順によって、デバッグ フラグが web.config ファイルに自動的に追加されます。

Web ページをデバッグするには

  1. カスタム Web ページを保存します。
  2. F5 キーを押して、デバッグを開始します。

    web.config ファイルがデバッグ用に構成されていないという警告が表示されたら、[OK] をクリックします。これによって、デバッグ フラグが Web.config ファイルに自動的に追加されます。

XmlFormView1 コントロールをテストするための Web 対応フォーム テンプレートがない場合は、次の手順に従って、基本的な Web 対応フォーム テンプレートを作成して発行します。

コントロールに Web 対応 InfoPath フォーム テンプレートを読み込む

このセクションでは、Web 対応フォーム テンプレートを作成して、SharePoint サイトに発行する方法について説明します。

サーバーで発行されたフォーム テンプレートを指すように、XmlFormView コントロールの XsnLocation プロパティを変更します。また、フォーム テンプレートを、カスタム Web フォームと同じサイト コレクションに配置する必要があります。

XmlFormView コントロールで表示できるフォーム テンプレートを作成する場合は、InfoPath および InfoPath Forms Services と互換性のある新しい空白のフォーム テンプレートを作成する方法が最も簡単です。InfoPath および InfoPath Forms Services と互換性のあるフォーム テンプレートは Web 互換フォーム テンプレートと呼ばれます。 InfoPath Forms Services を実行してサーバーに発行されるフォーム テンプレートは Web 対応フォーム テンプレートと呼ばれます。

メモ:   標準のフォーム テンプレートで使用可能なコントロール、構造、データ接続の一部には、Web 互換フォーム テンプレートで使用できないものがあります。フォーム テンプレートの互換性の設定が [InfoPath と InfoPath Forms Services] の場合、このような Office InfoPath 2007 のデザイン ワンス機能セットの例外を [デザイン チェック] 作業ウィンドウに表示できます。InfoPath Forms Services と連携する機能の詳細については、「Introduction to browser-compatible form templates (英語)」を参照してください。

サンプルのフォーム テンプレートをデザインするには

  1. Office InfoPath 2007 を開き、[作業の開始] ダイアログ ボックスの [フォーム テンプレートのデザイン] をクリックします。
  2. 図 3 に示すように、[フォーム テンプレートのデザイン] ダイアログ ボックスで、[フォーム テンプレート]、[空白]、および [ブラウザ互換の機能のみを有効にする] をクリックします。

    図 3. [フォーム テンプレートのデザイン] ダイアログ ボックスでのフォームの作成

  3. [OK] をクリックします。
  4. 作業ウィンドウで [コントロール] をクリックします。
  5. フォームに日付の選択コントロールを追加します。
  6. [日付の選択] を右クリックして、[日付の選択のプロパティ] を選択します。
  7. [値] ボックスの右にある関数ボタンをクリックします。
  8. [数式の挿入] ダイアログボックスの [関数の挿入] ボタンをクリックします。
  9. today 関数をクリックして、[OK] をクリックします。
  10. [OK] をさらに 2 回クリックして、すべてのダイアログ ボックスを閉じます。これによって、フォームが開くときに日付の選択コントロールに現在の日付が挿入されます。
  11. フォームに省略可能セクションを追加します。
  12. [省略可能セクション] を右クリックして、[セクションのプロパティ] を選択します。
  13. [データ] タブの [既定でセクションをフォームに含める] をクリックします。
  14. [表示] タブの [条件付き書式] ボタンをクリックします。
  15. [条件付き書式の設定] ダイアログ ボックスの [追加] をクリックします。
  16. 最初のドロップダウン ボックスで field1 が表示されていることを確認します。このフィールドは、日付の選択コントロールに連結しています。表示されていない場合は、field1 に変更します。
  17. [次の条件の場合] の 3 つ目のボックスで、ボックスの一覧を開いて [数式の使用] を選択します。
  18. [数式の挿入] ダイアログボックスの [関数の挿入] ボタンをクリックします。
  19. today 関数をクリックして、[OK] をクリックし、もう一度 [OK] をクリックします。
  20. [条件付き書式の設定] ダイアログ ボックスで、[網かけ] ボックスの一覧を開いて色を選択し、[OK] をクリックします。
  21. 手順 15 から 19 を繰り返し、field1 が今日の日付の値より大きい場合と小さい場合で異なる色を選択します。

    2 つ目のドロップダウン リストで、[が次の値より大きい] または [が次の値より小さい] を選択します。これによって、フォームに対話機能が追加されるため、フォームが XmlFormView コントロールで動作していることがわかるようになります。

  22. 完了したら、[条件付き書式の設定] ダイアログ ボックスの [OK] をクリックし、さらに [OK] をクリックして [セクションのプロパティ] ダイアログ ボックスを消します。

    最終的なフォームは、図 4 のようになります。

    図 4. サンプルの最終的なフォーム

サンプルのフォーム テンプレートを発行するには

  1. [ファイル] メニューの [保存] をクリックして、フォーム テンプレートをローカルのハード ドライブに保存します。
  2. [ファイル] メニューの [発行] をクリックします。
  3. [発行ウィザード] ダイアログ ボックスの [InfoPath Forms Services をインストール済み/未インストールの SharePoint サーバーへ] を選択して、[次へ] をクリックします。
  4. InfoPath Forms Services を実行しているサーバーの URL を入力します。

    フォーム テンプレートとカスタム Web ページは、同じサイト コレクションに配置する必要があります。このため、http://ServerName を入力して、フォーム テンプレートをルート サイト コレクションに発行します。ここで ServerName は InfoPath Forms Services を実行しているサーバーの名前です。

  5. [このフォームをブラウザで入力できるようにする] を選択し、[ドキュメント ライブラリ] を選択して、[次へ] をクリックします。
  6. [新しいドキュメント ライブラリを作成する] をクリックして、[次へ] をクリックします。
  7. 新しいドキュメント ライブラリの名前を入力し、[次へ] をクリックします。
  8. [次へ] をクリックして、ドキュメント ライブラリへの列の追加をスキップします。
  9. [発行] をクリックします。
  10. フォーム テンプレートの発行後、[発行ウィザード] ダイアログ ボックスの [このフォームをブラウザで開く] リンクをクリックします。
  11. Microsoft Internet Explorer のアドレス バーで、URL から XsnLocation の部分 (先頭は等号 (=) の後に「http」、末尾は「.xsn」を付けて) をコピーし、ブラウザ ウィンドウを閉じます。
  12. [発行ウィザード] ダイアログ ボックスの [閉じる] をクリックします。

XmlFormView コントロールを使用したコーディング

フォーム テンプレートを作成して発行すると、編集状態の変更、ヘッダーおよびフッターのツールバーを表示するかどうかの指定、完了したフォームの保存場所の指定など、XmlFormView コントロールの動作をさまざまな方法で指定できます。Visual Studio ユーザー インターフェイス (UI) でプロパティを設定することによって宣言的に、またはプログラムから、これらのオプションを制御できます。 ここでは、EditingStatus プロパティの変更の例を示します。

Web ページから XmlFormView コントロールに、または XmlFormView コントロールから Web ページに値を渡すこともできます。ここでは、これらのタスクをプログラムから実行する場合の例を示します。

フォームの編集状態を制御する

Web ページを読み込むときにフォームを表示しない場合は、XmlFormView コントロールの EditingStatus プロパティを Init に設定します。これを XmlFormControl1 コントロールのプロパティ、またはソース ページのコントロール インスタンスのタグで行うと、次の例のようになります。

<cc1:XmlFormView ID="XmlFormView1" runat="server" XsnLocation="~sitecollection/FormServerTemplates/MyForm.xsn" EditingStatus="Init">

このコントロール タグ ~sitecollection は、複数のサイト コレクションへのカスタム Web ページの展開を簡単にするための SharePoint 変数として使用します。カスタム Web ページを複数のサイト コレクションに展開する必要がない場合は、完全修飾 URL を入力するだけです。 サイト コレクションへのカスタム Web ページの展開の詳細については、この記事の後で説明している「非ルート SharePoint サイトにカスタム Web ページを展開する」を参照してください。

ユーザーが Web ページで、ページ内のボタンをクリックするなどのアクションを実行した後で、フォームの EditingStatus プロパティを XmlFormView.EditingStatus.Editing にプログラムで変更し、XmlFormView1 コントロールでフォーム テンプレートを初期化して表示できます。次の例で、その方法を示します。この場合は、コードビハインド ページの先頭に using Microsoft.Office.InfoPath.Server.Controls; ディレクティブを追加していることを想定しています。

protected void Button1_Click(object sender, EventArgs e)
{
    XmlFormView1.EditingStatus = XmlFormView.EditingStatus.Editing;
}
重要:   EditingStatus プロパティを XmlFormView.EditingState.Init に設定している場合は、XmlFormView コントロールの XmlForm プロパティでは XmlForm クラスおよびそのクラスに関連する機能のいずれにもアクセスできません。たとえば、MainDataSource プロパティを使用できなくなり、フォームの基盤となる XML データで作業できなくなります。 XmlForm プロパティを使用して XmlForm クラスにアクセスするには、EditingStatus プロパティを XmlFormView.EditingState.Editing に設定しておく必要があります。

フォームから Web ページに値を取得する

ページ内のコードを使用して InfoPath フォーム内のフィールドの値を設定するには、コードは適切なイベント ハンドラ内にある必要があります。XmlFormView コントロールの XmlForm プロパティによって、XmlForm クラスとその MainDataSource プロパティにアクセスして、フォームの基盤となる XML データで作業することができます。ただし、アクセスできるのは次のいずれかのイベントの期間のみです。

メモ:   Initialize イベントは、InfoPath フォームが XmlFormView コントロールに読み込まれるときは常に実行されます。これは、Web ページが初めて読み込まれるときに、XmlFormView コントロールの XsnLocation プロパティまたは XmlLocation プロパティが別のフォーム テンプレートまたはフォームを指すように設定されている場合に発生します。また、EditingStatus プロパティが XmlFormView.EditingState.Init から XmlFormView.EditingState.Editing に変更された場合にも発生します。

次の例に示すように、コードが、ボタンの Click ハンドラなど、ページ上の別のコントロールのイベント ハンドラにある場合は、フォームのデータにアクセスする前に、コードから継承された XmlFormView コントロールの DataBind メソッドを呼び出す必要があります。この例では、コードビハインド ページの先頭に using System.Xml;using System.Xml.XPath; ディレクティブを追加していること、および TextBox1 という名前のページ上の ASP.NET TextBox コントロールでデータを受信していることを想定しています。

protected void Button2_Click(object sender, EventArgs e)
{
   // XmlFormView control's DataBind method to bind to 
   // its data source.
   XmlFormView1.DataBind();
   // Create an XPathNavigator positioned at the root of 
   // the form's main data source.
   XPathNavigator xNavMain = 
      XmlFormView1.XmlForm.MainDataSource.CreateNavigator();
   // Create an XmlNamespaceManager and add the "my" namespace
   // alias from the form's main data source.
   XmlNamespaceManager xNameSpace = 
      new XmlNamespaceManager(new NameTable());
   xNameSpace.AddNamespace("my", XmlFormView1.XmlForm.NamespaceManager.
      LookupNamespace("my").ToString());
   // Set TextBox1 on the page to the value in the form's field2.
   TextBox1.Text = xNavMain.SelectSingleNode(
      "/my:myFields/my:field2", xNameSpace).ToString();
}

Web ページからフォームに値を取得する

次の手順では、XmlFormView コントロールの Initialize イベント ハンドラが実行されると常に、フォーム内の field2 の値を Web ページ上の TextBox1 コントロールの値に設定します。この例では、Web ページと、XmlFormView コントロールで表示される InfoPath Web 対応フォーム テンプレートの両方に、TextBox コントロールを追加する必要があります。

  1. Web ページの [デザイン] ビューで、TextBox コントロールをページに追加します。InfoPath デザイン モードで、TextBox コントロールをフォーム テンプレートに追加して、SharePoint サイト上のドキュメント ライブラリに再発行します。
  2. Web ページの [ソース] ビューに切り替えて、XmlFormView1 コントロールのタグを見つけます。タグは、次の例のようになっています。
    <cc1:XmlFormView ID="XmlFormView1" runat="server" Height="250px" Width="100%"
    XsnLocation="http://ServerName/DocumentLibrary/Forms/template.xsn">

    ServerNameDocumentLibrary は、InfoPath Forms Services を実行しているサーバーの名前とフォーム テンプレートが発行されるドキュメント ライブラリの名前に対応しています。

  3. 次のように、XmlFormView1 コントロール タグで Initialize イベント ハンドラの名前を宣言します。
    <cc1:XmlFormView ID="XmlFormView1" runat="server" Height="250px" Width="100%"
    XsnLocation="http://ServerName/DocumentLibrary/Forms/template.xsn"
    OnInitialize="XmlFormView1_Initialize" />
    
    メモ:   または、XmlFormView1 コントロールの選択時に、プロパティ ウィンドウで、このイベントの隣にある空白のテキスト ボックスをダブルクリックすることもできます。
  4. Web ページの [ソース] ウィンドウ内を右クリックして、[コードの表示] をクリックします。これによって、新しいコードビハインド ウィンドウが開きます。
  5. 次の using ステートメントを追加します。
    using System.Xml;
    using System.Xml.XPath;
  6. 同じウィンドウで、Initialize イベント ハンドラのコードを追加します。
    protected void XmlFormView1_Initialize(object sender, 
       InitializeEventArgs e)
    {
        // Create an XPathNavigator positioned at the root of 
        // the form's main data source.
        XPathNavigator xNavMain = XmlFormView1.XmlForm.MainDataSource.CreateNavigator();
        // Create an XmlNamespaceManager and add the "my" namespace
        // alias from the form's main data source.
        XmlNamespaceManager xNameSpace = new XmlNamespaceManager(new NameTable());
        xNameSpace.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-04-20T16:26:21");
        // Create an XPathNavigator positioned on the form's field2.
        XPathNavigator fTextBox1 = xNavMain.SelectSingleNode(
            "my:myFields/my:field2", xNameSpace);
        // Set the form's field2 to the value in TextBox1.
        fTextBox1.SetValue(TextBox1.Text);
    }
  7. AddNamespace メソッドへの呼び出しで、適切な XML 名前空間を、読み込むフォーム テンプレートの XML 名前空間に置き換えます。
    ヒント:   名前空間の値を取得するには、デザイン モードでフォーム テンプレートを開き、[データ ソース] 作業ウィンドウを表示します。次に、[myFields] を右クリックし、[プロパティ] をクリックしてから、[詳細] をクリックします。
  8. SelectSingleNode Method メソッドへの呼び出しで、この例の "my:myFields/my:field2" でフィールドを選択する XPath 式を Web ページのテキスト ボックスの値を取り込むフォームのフィールドの式に変更します。
    ヒント:   フォームのデータ ソース内のフィールドまたはグループを選択する XPath 式をクリップボードにコピーするには、[データ ソース] 作業ウィンドウ内のフィールドまたはグループを右クリックしてから [XPath のコピー] をクリックします。

フォームからデータを送信する

Office InfoPath 2007 では、別の環境でホストされるフォーム テンプレートに基づくフォームからホスティング環境に送信するための新しいデータ接続形態、つまりここでは、XmlFormView コントロールを含むカスタム Web ページが用意されています。SubmitToHostAdapter というこの新しいデータ接続に対応するエントリは、フォーム定義ファイル (.xsf) の manifest.xsf です。

<xsf:submitToHostAdapter name="Submit" submitAllowed="yes"></xsf:submitToHostAdapter>

次の手順では、XmlFormView コントロールの SubmitToHost イベント ハンドラが実行されると常に、フォーム内の field2 の値を Web ページ上の TextBox1 コントロールの値に設定します。これは、ツールバーの [送信] ボタンをクリックすると、実行されます。

次の手順に従って、カスタム Web ページでホストされるフォーム テンプレートで SubmitToHostAdapter データ接続を作成します。

新しい SubmitToHostAdapter データ接続を設定するには

  1. デザイン モードで、InfoPath フォーム テンプレートを開きます。
  2. [ツール] メニューで [データ接続] をクリックします。
  3. [追加] をクリックします。
  4. データ接続ウィザードで、[新しいデータ接続先] と [データの送信] をクリックし、[次へ] をクリックします。
  5. 図 5 のように [ASP.NET ページやホストするアプリケーションなどのホスティング環境に送信] を選択し、[次へ] をクリックします。

    図 5. ホストへのデータの送信

  6. 新しいデータ接続の名前を入力し、[完了] をクリックします。

新しい SubmitToHostAdapter データ接続の作成後、次の手順に従って、このフォームから、XML データをホスティング環境に送信できるようにします。

フォームからデータを送信するには

  1. [ツール] メニューで [送信オプション] をクリックします。
  2. [ユーザーによるこのフォームの送信を許可する] を選択します。
  3. 最初のドロップダウン リストから [ホスティング環境] を選択し、2 つ目のドロップダウン リストからデータ接続に付ける名前を選択します。

    図 6 のようになります。

    図 6. データ接続の選択

  4. [OK] をクリックします。
  5. SharePoint サーバー上の同じドキュメント ライブラリにフォーム テンプレートを再発行するか、新しいドキュメント ライブラリを作成します。

フォーム テンプレートの再発行後、カスタム Web ページで XmlFormView コントロールの SubmitToHost イベント用のイベント ハンドラを作成する必要があります。これを実行するには、次の手順に従います。

イベント ハンドラを作成するには

  1. Web ページの [ソース] ビューに切り替えて、XmlFormView1 のタグを見つけます。タグは、次の例のようになっています。
    <cc1:XmlFormView ID="XmlFormView1" runat="server" Height="250px" Width="100%" XsnLocation="http://ServerName/DocumentLibrary/Forms/template.xsn">

    ServerNameDocumentLibrary は、InfoPath Forms Services を実行しているサーバーの名前とドキュメント ライブラリの名前に対応しています。

  2. XmlFormView1 コントロール タグで SubmitToHost イベント ハンドラの名前を宣言します。
    <cc1:XmlFormView ID="XmlFormView1" runat="server" Height="250px" Width="100%"
    XsnLocation="http://ServerName/DocumentLibrary/Forms/template.xsn"  
    OnInitialize="XmlFormView1_Initialize"
    OnSubmitToHost="XmlFormView1_SubmitToHost" />
  3. Web ページの [ソース] ウィンドウ内を右クリックして、[コードの表示] をクリックします。これによって、コードビハインド ウィンドウが開きます。 このウィンドウで、次の SubmitToHost コードを追加します。
    protected void XmlFormView1_SubmitToHost(object sender, 
       SubmitToHostEventArgs e)
    {
       // Create an XPathNavigator positioned at the root of 
       // the form's main data source.
       XPathNavigator xNavMain = 
          XmlFormView1.XmlForm.MainDataSource.CreateNavigator();
       // Create an XmlNamespaceManager and add the "my" namespace
       // alias from the form's main data source.
       XmlNamespaceManager xNameSpace = 
          new XmlNamespaceManager(new NameTable());
       xNameSpace.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-04-20T16:26:21");
       // Create an XPathNavigator positioned on the form's field2.
       XPathNavigator fTextBox1 = xNavMain.SelectSingleNode(
          "my:myFields/my:field2", xNameSpace);
       // Set TextBox1 on the page to the value in the form's field2.
       TextBox1.Text = xNavMain.SelectSingleNode(
          "/my:myFields/my:field2", xNameSpace).ToString();
    }

適切な XML 名前空間を、XmlFormView コントロールに読み込むフォーム テンプレートの XML 名前空間に置き換え、この例のフィールド "my:myFields/my:field2" の XPath を Web ページ上の Text Box コントロールを取り込むフォームのフィールドの XPath に変更します。

フォームが送信されると、TextBox1my:field2 の値に設定されます。

フォームから Web ページに値を取得する他の方法として、NotifyHost イベント ハンドラの使用とフォーム テンプレートのビジネス ロジック コードの XmlForm クラスの NotifyHost メソッドによって Notification プロパティに取得される値の使用があります。これは、フォームの送信によってトリガされる SubmitToHost イベント ハンドラとは異なります。NotifyHost イベント ハンドラを使用すると、Web ページでフォーム データが使用可能になる前に XML データが検証されなくなります。

コード例

次の例は、コードビハインド ページの全コードです。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Office.InfoPath.Server.Controls;
using System.Xml;
using System.Xml.XPath;

public partial class XmlFormView_MyPage : System.Web.UI.Page
{
   protected void Button1_Click(object sender, EventArgs e)
   {
      XmlFormView1.EditingStatus = XmlFormView.EditingState.Editing;
   }

   protected void Button2_Click(object sender, EventArgs e)
   {
      XmlFormView1.DataBind();
      XPathNavigator xNavMain =
         XmlFormView1.XmlForm.MainDataSource.CreateNavigator();
      XmlNamespaceManager xNameSpace = 
         new XmlNamespaceManager(new NameTable());
      xNameSpace.AddNamespace("my",XmlFormView1.XmlForm.
        NamespaceManager.LookupNamespace("my").ToString());
      TextBox1.Text = xNavMain.SelectSingleNode(
         "/my:myFields/my:field2",xNameSpace).ToString() ; 
   }

   protected void XmlFormView1_Initialize(object sender,
      InitializeEventArgs e)
   {
      XPathNavigator xNavMain =
         XmlFormView1.XmlForm.MainDataSource.CreateNavigator();
      XmlNamespaceManager xNameSpace = new XmlNamespaceManager(
         new NameTable());
      xNameSpace.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-03-27T02:05:51");
      XPathNavigator fTextBox = xNavMain.SelectSingleNode(
         "/my:myFields/my:field2", xNameSpace2);
      fTextBox.SetValue(TextBox1.Text);
   }

   protected void XmlFormView1_SubmitToHost(object sender, 
      SubmitToHostEventArgs e)
   {
      XPathNavigator xNavMain = 
         XmlFormView1.XmlForm.MainDataSource.CreateNavigator();
      XmlNamespaceManager xNameSpace = 
         new XmlNamespaceManager(new NameTable());
      xNameSpace.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-04-20T16:26:21");
      XPathNavigator fTextBox1 = xNavMain.SelectSingleNode(
         "my:myFields/my:field2", xNameSpace);
      TextBox1.Text = xNavMain.SelectSingleNode(
         "/my:myFields/my:field2", xNameSpace).ToString();
   }
}

非ルート SharePoint サイトにカスタム Web ページを展開する

前述のようにカスタム Web ページを作成する場合、.aspx ページは、SharePoint サーバーのルート サイト コレクションにのみ属することができます。非ルート サイト コレクションの下にページを作成するには、カスタム Web ページを SharePoint 機能として展開する必要があります。 SharePoint 機能は Windows SharePoint Services 要素のパッケージで、特定のスコープで有効にして、特定の目的やタスクを実行できます。

SharePoint 機能には 2 つの単純な XML ファイルが必要で、この機能はサーバーの stsadm.exe コマンド ライン ツールを使用して展開されます。展開は、バッチ ファイルを使用して自動化できます。

Web ページを SharePoint 機能として展開するには

  1. サーバーのローカル Features フォルダの下にフォルダを作成します。通常、このフォルダの場所は C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\FEATURES です。
  2. カスタム .aspx ページをこのフォルダに追加します。
  3. 次の例を基に Feature.xml ファイルと Module.xml ファイルを作成し、これらのファイルを同じ場所に追加します。

    Feature.xml の例

    <?xml version="1.0"?>
    <Feature Id="8C4DD0CB-5A94-44da-9B7F-E9ED49C2B2DC" Title="Custom Web page"
    Description="This simple example feature adds an aspx page with a hosted
    XmlFormView control" Version="1.0.0.0" Scope="Web"
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
        <ElementManifest Location="Module.xml"/>
    </ElementManifests>
    </Feature>

    Feature.xml ファイルで、Feature 要素の Id 属性の値を、Visual Studio の [ツール] メニューの Create GUID コマンドを使用して生成される GUID に設定します。または、簡単なコンソール アプリケーションを作成して、GUID を作成できます。次の C# コード行を使用します。

    System.Console.WriteLine(System.Guid.NewGuid().ToString().ToUpper());

    特定の機能に対して、Id 属性の値を 1 回だけ設定する必要があります。既存の機能をアップグレードする場合は、機能のアップグレードごとに Id 属性に対して新しい GUID を生成する必要はありません。

    Module.xml の例

    <?xml version="1.0"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
        <Module Name="file" Url="" Path="">
            <File Url="XmlFormViewPage.aspx" />
        </Module>
    </Elements>

    Module.xml ファイルで、File 要素の Url 属性の値を、.aspx ページの名前に設定します。

  4. この機能を SharePoint Server に展開します。機能を展開するコマンド ライン構文は、次のとおりです。
    C:\Program Files\Common Files\Microsoft Shared\Web Server
    Extensions\12\bin\stsadm -o installfeature -filename
    FeatureFolderName\Feature.xml
  5. この機能を SharePoint サイト コレクションでアクティブにします。機能をアクティブにするコマンド ライン構文は、次のとおりです。
    C:\Program Files\Common Files\Microsoft Shared\Web Server
    Extensions\12\bin\stsadm -o activatefeature -filename
    FeatureFolderName\Feature.xml -url http://ServerName/Sitecollection

    ServerNameSiteCollection を、SharePoint サーバーの実際の名前と、機能をアクティブにするサイト コレクションの名前に置き換えます。バッチ ファイルを作成して、これらのコマンド ラインを順次実行できます。

    メモ:   完全修飾サーバー名を使用する代わりに、~sitecollection を使用できます。

推奨される開発手法と展開手法

実際のシナリオでは、XmlFormView コントロールが含まれるカスタム Web ページは SharePoint サーバーのルート サイト上にありません。ただし、この記事で説明しているようにカスタム Web ページを SharePoint サーバーのルート サイトから開発する方法を推奨します。 Web ページを展開する準備が整ったら、カスタム機能パッケージを使用して、Web ページをサイト コレクションに展開できます。この方法は、「非ルート SharePoint サイトにカスタム Web ページを展開する」のセクションで説明しています。

サイト コレクションに展開する場合、すべての完全修飾 URL をサイト コレクションで機能するトークン化 URL に置き換えます。たとえば、XsnLocation パラメータでは次の場所のフォーム テンプレートを参照しています。

XsnLocation="http://ServerName/SiteCollectionName/DocumentLibraryName/Forms/template.xsn"

Web ページをサイト コレクションへ展開する場合、~sitecollection トークンが、ServerName や SiteCollectionName の値と置き換えられます。

XsnLocation="~sitecollection/DocumentLibraryName/Forms/template.xsn"

XmlFormView コントロール使用時の考慮事項

XmlFormView コントロールをカスタム Web ページで使用する際、次の事項について考慮する必要があります。

  • Web フォーム (.aspx ページ) ごとに追加できる XmlFormView コントロールは 1 つのみです。
  • セキュリティの問題上、XmlFormView コントロールの XsnLocation プロパティ、XmlLocation プロパティ、SaveLocation プロパティは、カスタム ページと同じサイト コレクションの場所を指定する必要があります。前述の手順を使用して作成したサンプルのカスタム ページの場合、XsnLocation プロパティに指定される値は SharePoint サーバー上のルート サイト コレクションにあります。
  • XmlFormView コントロール内でフォームを表示するには、Microsoft Office Forms Server 2007 または Microsoft Office SharePoint Server 2007 に含まれる InfoPath Forms Services が必要です。
  • XmlFormView コントロールが含まれるカスタム Web ページは、SharePoint Server と同じ IIS Web アプリケーションの場所にある必要があります。別の Web アプリケーションの使用に関する詳細は、InfoPath Team Blog の「Forms Services and multiple IIS Web Applications (英語)」を参照してください。

結論

XmlFormView コントロールを使用して、カスタム Web ページにユーザーに対して対話型の InfoPath フォームを表示できます。このとき、ユーザーのコンピュータに InfoPath 2007 クライアントをインストールしておく必要はありません。XmlFormView コントロールは、Microsoft Office Forms Server 2007 または Microsoft Office SharePoint Server 2007 の一部として、InfoPath Forms Services を実行するサーバー上に配置されます。コントロールのさまざまなプロパティ、メソッド、イベントによって、既存の Web インフラストラクチャで InfoPath フォームのシームレスな統合を実現できます。

追加情報

InfoPath を使用した開発の詳細については、次の情報を参照してください。


* このコンテンツの内容は役立ちましたか?

役立った 少し役立った あまり役立たなかった 役立たなかった

コンテンツの内容についてご意見はこちらへ(任意)


 


Microsoft