この資料では、Microsoft Office InfoPath で Web サービスを呼び出すことにより、1 つ目のドロップダウン リストの選択内容に基づいて 2 つ目のドロップダウン リストに動的に値を挿入する方法について説明します。
Microsoft Office InfoPath では、新しいデータ フィルタ機能が追加されています。この新機能を使用すると、ユーザー インターフェイスを使用して入力フィールドに値を指定できるようになります。その後、指定した値は Web サービスに渡され、入力フィールドの値に一致する結果がドロップダウン リストに順番に挿入されます。この資料では、Web サービスを呼び出して、新しいデータ フィルタ機能を使用することにより、1 つ目のドロップ ダウン リストの選択内容に基づいて 2 つ目のドロップダウン リストに動的に値を挿入する方法についても説明します。
スクリプトを使用した InfoPath データのフィルタ処理
簡単な Web サービスの作成
-
Microsoft Visual Studio .NET を起動します。
-
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
-
[プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックします。
-
[テンプレート] ボックスの一覧の [ASP.NET Web サービス] をクリックします。
-
[場所] ボックスに、http://<SERVER>/PopulateCities と入力し、[OK] をクリックします。
注 : SERVER は Web サーバーの名前です。
-
[Service1.asmx] を右クリックし、[コードの表示] をクリックします。
-
次の Web サービス メソッドを Service1 クラスに追加します。
<WebMethod()> _
Public Function GetCities(ByVal sState As String) As String()
If sState = "FL" Then
GetCities = New String() {"Coral Gables", "Miami", "Orlando", "Tallahassee"}
ElseIf sState = "MI" Then
GetCities = New String() {"Detroit", "Flint", "Lansing", "Livonia"}
Else
GetCities = New String() {"Unknown State"}
End If
End Function -
[ビルド] メニューの [ソリューションのビルド] をクリックします。
InfoPath フォームの作成
-
InfoPath を起動します。
-
InfoPath 2007 では、[ファイル] メニューの [フォーム テンプレートのデザイン] をクリックします。InfoPath 2003 では、[ファイル] メニューの [フォームのデザイン] をクリックします。
-
新しいフォームにコントロールを追加します。これを行うには、以下の手順を実行します。
-
InfoPath 2007 では、[フォーム テンプレートのデザイン] 作業ウィンドウの [空白] をクリックし、[OK] をクリックします。InfoPath 2003 では、[フォームのデザイン] 作業ウィンドウで、[新しい空白のフォーム] をクリックします。
-
[デザイン タスク] 作業ウィンドウで [コントロール] をクリックします。
-
[コントロールの挿入] ボックスの一覧の [ドロップダウン リスト ボックス] をクリックします。フィールド1 という名前の新しいドロップダウン リスト ボックスがフォームに追加されます。
-
Microsoft InfoPath のデザイナ ウィンドウで、[フィールド1] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[追加] をクリックします。
-
[選択肢の追加] ダイアログ ボックスの [値] ボックスに FL と入力し、[OK] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[追加] をクリックします。
-
[選択肢の追加] ダイアログ ボックスの [値] ボックスに MI と入力し、[OK] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[OK] をクリックします。
-
[コントロールの挿入] ボックスの一覧の [ドロップダウン リスト ボックス] をクリックします。フィールド2 という名前の新しいドロップダウン リスト ボックスがフォームに追加されます。
-
InfoPath 2007 では、次の手順を実行します。
-
[ツール] メニューの [データ接続] をクリックし、[追加] をクリックします。
-
データ接続ウィザードで、[新しいデータ接続先] をクリックし、[データの受信] をクリックし、[次へ] をクリックします。
InfoPath 2003 では、次の手順を実行します。
-
[ツール] メニューの [セカンダリ データ ソース] をクリックします。
-
[セカンダリ データ ソース] ダイアログ ボックスで、[追加] をクリックします。
-
[Web サービス] をクリックし、[次へ] をクリックします。
-
[セカンダリ データ ソースとして使用する Web サービスの場所を入力してください] ボックスに http://<SERVER>/PopulateCities/Service1.asmx?wsdl と入力し、[次へ] をクリックします。
-
[処理を選択してください] ボックスの一覧の [GetCities] をクリックし、[次へ] をクリックします。
-
[データ ソース セットアップ ウィザード] ダイアログ ボックスで、[値の設定] をクリックします。[値の設定] ダイアログ ボックスで、FL と入力し、[OK] をクリックします。
-
[データ ソース セットアップ ウィザード] ダイアログ ボックスで [次へ] をクリックし、[完了] をクリックします。
-
[セカンダリ データ ソース] ダイアログ ボックスで、[閉じる] をクリックします。
-
デザイナ ウィンドウで、[フィールド2] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
[リスト ボックス項目] の [データベース、Web サービス、またはファイルから設定する] をクリックします。
-
[項目] ボックスの右側にある [XPath の選択] をクリックします。
-
すべてのノードを展開し、[string] をクリックし、[OK] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[OK] をクリックします。
1 つ目のドロップダウン リスト ボックスの変更時に Web サービスに照会するスクリプトの追加
-
InfoPath 2007 では、次の手順を実行します。
-
デザイナ ウィンドウで、[フィールド1] を右クリックします。
-
[プログラミング] をポイントし、[OnAfterChange イベント] をクリックします。Microsoft Script Editor が起動します。
InfoPath 2003 では、次の手順を実行します。
-
デザイナ ウィンドウで、[フィールド1] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
[入力規則] の [データの入力規則] をクリックします。
-
[イベント] ボックスの一覧の [OnAfterChange] をクリックし、[編集] をクリックします。Microsoft Script Editor が起動します。
-
次のコードのコメントを探します。
-
そのコードのコメントの後に、次のコード サンプルを追加します。
VBScriptUpdateCities
XDocument.View.ForceUpdate
JScriptUpdateCities();
XDocument.View.ForceUpdate();
-
スクリプト ファイルに以下の UpdateCities プロシージャを追加します。
VBScriptSub UpdateCities
Dim fieldValue
set fieldValue = XDocument.DOM.selectSingleNode( "/my:マイフィールド/my:フィールド1" )
'Get a reference to the SDS bound to the Web Service.
Dim theDataObject
set theDataObject = XDocument.DataObjects.Item("GetCities")
'Set the SelectionNamespaces so that you can find the correct field.
'Note: If the Web service was created with Visual Studio .NET 2003, the xmlns:s0 namespace is
'http://tempuri.org/PopulateCities/Service1
theDataObject.DOM.setProperty"SelectionNamespaces", _
"xmlns:dfs=""http://schemas.microsoft.com/office/infopath/2003/dataFormSolution"" " &_
"xmlns:s0=""http://tempuri.org/"""
Dim queryValue
set queryValue = theDataObject.DOM.selectSingleNode( _
"/dfs:myFields/dfs:queryFields/s0:GetCities/s0:sState" )
queryValue.text = fieldValue.text
theDataObject.Query
End Sub
JScriptfunction UpdateCities()
{
var fieldValue = XDocument.DOM.selectSingleNode( "/my:マイフィールド/my:フィールド1");
//Get a reference to the SDS bound to the Web Service.
var theDataObject = XDocument.DataObjects.Item("GetCities");
//Set the SelectionNamespaces so that you can find the correct field.
// Note: If the Web service was created with Visual Studio .NET 2003, the xmlns:s0 namespace is
// http://tempuri.org/PopulateCities/Service1
theDataObject.DOM.setProperty("SelectionNamespaces",
'xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution" ' +
'xmlns:s0="http://tempuri.org/"');
var queryValue = theDataObject.DOM.selectSingleNode(
"/dfs:myFields/dfs:queryFields/s0:GetCities/s0:sState" );
queryValue.text = fieldValue.text;
theDataObject.Query();
} -
InfoPath に切り替えます。[データの入力規則] ダイアログ ボックスで、[OK] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[OK] をクリックします。
-
InfoPath 2007 では、[ツール] メニューの [プログラミング] をポイントし、[OnLoad イベント] をクリックします。InfoPath 2003 では、[ツール] メニューの [スクリプト] をポイントし、[読み込み時のイベント] をクリックします。
Script Editor が起動します。XDocument_OnLoad イベント ハンドラが追加されます。
-
以下のコード サンプルを XDocument_OnLoad イベント ハンドラに追加して実装します。
VBScriptJScript -
[ファイル] メニューの [すべてを上書き保存] をクリックし、Script Editor を終了します。
フォームのテスト
-
InfoPath 2007 では、[ファイル] メニューの [プレビュー] をポイントし、[フォーム] をクリックします。InfoPath 2003 では、[ファイル] メニューの [フォームのプレビュー] をポイントし、[既定] をクリックします。
フォームが表示されると、1 つ目のドロップダウン リスト ボックスに [選択] が表示されます。
-
2 つ目のドロップダウン リスト ボックスの一覧を表示します。[Unknown State] が表示されます。
-
1 つ目のドロップダウン リストの一覧の [FL] をクリックし、次に [MI] をクリックします。クリックする項目に応じて、2 つ目のドロップダウン リストの内容が更新されます。
InfoPath のデータ フィルタ機能の使用
Web サービス用の簡単な XML データ ソースの作成
-
Microsoft Visual Studio .NET を起動します。
-
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
-
[プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックします。
-
[テンプレート] ボックスの一覧の [ASP.NET Web サービス] をクリックします。
- [場所] ボックスに http://<SERVER>/PopulateCities/Service1.asmx?wsdl と入力し、[次へ] をクリックします。
-
ソリューション エクスプローラで [PopulateCities] を右クリックし、[追加] をポイントして、[新しい項目の追加] をクリックします。[新しい項目の追加] ダイアログ ボックスが表示されます。
-
[テンプレート] セクションの [XML ファイル] をクリックし、[名前] ボックスに Allcities.xml と入力し、[開く] をクリックします。
-
コード全体を次のコードに置き換え、[Allcities.xml の上書き保存] をクリックします。
<?xml version="1.0" encoding="utf-8" ?>
<States>
<State value="FL">
<ArrayOfString>
<string>Coral Gables</string>
<string>Miami</string>
<string>Orlando</string>
<string>Tallahassee</string>
</ArrayOfString>
</State>
<State value="MI">
<ArrayOfString>
<string>Detroit</string>
<string>Flint</string>
<string>Lansing</string>
<string>Livonia</string>
</ArrayOfString>
</State>
<State value="Unknown">
<ArrayOfString>
<string>Unknown State</string>
</ArrayOfString>
</State>
</States>
-
[Service1.asmx] を右クリックし、[コードの表示] をクリックします。
-
このコード ページの先頭に次のコード サンプルを追加します。
Imports System.Xml
Imports System.IO
-
次の Web サービス メソッドを Service1 クラスに追加します。
<WebMethod()> _
Public Function GetCities2() As System.Xml.XmlDocument
Dim path As String
path = Server.MapPath("AllCities.xml")
Dim doc As New System.Xml.XmlDocument
doc.Load(path)
GetCities2 = doc
End Function -
[ビルド] メニューの [ソリューションのビルド] をクリックします。
InfoPath フォームの作成
-
InfoPath を起動します。
-
InfoPath 2007 では、[ファイル] メニューの [フォーム テンプレートのデザイン] をクリックします。InfoPath 2003 では、[ファイル] メニューの [フォームのデザイン] をクリックします。
-
新しいフォームにコントロールを追加します。これを行うには、以下の手順を実行します。
-
InfoPath 2007 では、[フォーム テンプレートのデザイン] 作業ウィンドウの [空白] をクリックし、[OK] をクリックします。InfoPath 2003 では、[フォームのデザイン] 作業ウィンドウで、[新しい空白のフォーム] をクリックします。
-
[デザイン タスク] 作業ウィンドウで [コントロール] をクリックします。
-
[コントロールの挿入] ボックスの一覧の [ドロップダウン リスト ボックス] をクリックします。フィールド1 という名前の新しいドロップダウン リスト ボックスがフォームに追加されます。
-
Microsoft InfoPath のデザイナ ウィンドウで、[フィールド1] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[追加] をクリックします。
-
[選択肢の追加] ダイアログ ボックスの [値] ボックスに FL と入力し、[OK] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[追加] をクリックします。
-
[選択肢の追加] ダイアログ ボックスの [値] ボックスに MI と入力し、[OK] をクリックします。
- [ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[OK] をクリックします。
-
[コントロールの挿入] ボックスの一覧の [ドロップダウン リスト ボックス] をクリックします。フィールド2 という名前の新しいドロップダウン リスト ボックスがフォームに追加されます。
-
[ツール] メニューの [データ接続] をクリックします。
-
[データ接続] ダイアログ ボックスで、[追加] をクリックします。
-
[データ接続ウィザード] ダイアログ ボックスで [データの受信] をクリックし、[次へ] をクリックします。
-
[Web サービス] をクリックし、[次へ] をクリックします。
-
[データ接続に使用する Web サービスの場所を入力してください] ボックスに http://<SERVER>/PopulateCities/Service1.asmx?wsdl と入力し、[次へ] をクリックします。
-
[処理を選択してください] ボックスの一覧の [GetCities2] をクリックし、[次へ] をクリックします。
-
[データ接続ウィザード] ダイアログ ボックスで、[完了] をクリックします。
-
[データ接続] ダイアログ ボックスで、[閉じる] をクリックします。
-
InfoPath のデザイナ ウィンドウで、[フィールド2] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
InfoPath 2007 では、[リスト ボックス項目] の [フォームのデータ ソースで値を検索する] をクリックします。InfoPath 2003 では、[リスト ボックス項目] の [データ接続の値をデータベース、Web サービス、ファイル、SharePoint ライブラリまたはリストで参照する] をクリックします。
-
[エントリ] ボックスの右側にある [XPath の選択] をクリックします。[フィールドまたはグループの選択] ダイアログ ボックスが表示されます。
-
返されるデータにフィルタを追加します。これを行うには、次の手順を実行します。
-
すべてのノードを展開し、[string] をクリックし、[フィルタ データ] をクリックします。[フィルタ データ] ダイアログ ボックスが表示されます。
-
[追加] をクリックします。[フィルタ条件の指定] ダイアログ ボックスが表示されます。
-
1 つ目のドロップダウン リスト ボックスの一覧の [フィールドまたはグループの選択] をクリックします。
-
[データ ソース] ボックスの一覧の [GetCities (セカンダリ)] をクリックします。
-
[dataFields] ノードの [value] をクリックし、[OK] をクリックします。
-
2 つ目のドロップダウン リスト ボックスの一覧の [が次の値に等しい] をクリックします。
-
3 つ目のドロップダウン リスト ボックスの一覧の [フィールドまたはグループの選択] をクリックします。
-
[データ ソース] ボックスの一覧の [メイン] をクリックします。
-
[フィールド1] をクリックし、[OK] をクリックします。
-
[OK] をクリックしてすべてのダイアログ ボックスを閉じます。
-
[上書き保存] をクリックしてフォームを保存します。
フォームのテスト
-
InfoPath 2007 では、[ファイル] メニューの [プレビュー] をポイントし、[フォーム] をクリックします。InfoPath 2003 では、[ファイル] メニューの [フォームのプレビュー] をポイントし、[既定] をクリックします。
-
1 つ目のドロップダウン リストの一覧の [FL] をクリックし、[MI] をクリックし、[Unknown] をクリックします。クリックする項目に応じて、2 つ目のドロップダウン リストの内容が更新されます。
InfoPath の動作規則機能の使用
簡単な Web サービスの作成
「スクリプトを使用した InfoPath データのフィルタ処理」に記載されているものと同じ Web サービスを使用します。
InfoPath フォームの作成
-
InfoPath を起動します。
-
InfoPath 2007 では、[ファイル] メニューの [フォーム テンプレートのデザイン] をクリックします。InfoPath 2003 では、[ファイル] メニューの [フォームのデザイン] をクリックします。
-
新しいフォームにコントロールを追加します。これを行うには、以下の手順を実行します。
-
InfoPath 2007 では、[フォーム テンプレートのデザイン] 作業ウィンドウの [空白] をクリックし、[OK] をクリックします。InfoPath 2003 では、[フォームのデザイン] 作業ウィンドウで、[新しい空白のフォーム] をクリックします。
-
[デザイン タスク] 作業ウィンドウで [コントロール] をクリックします。
-
[コントロールの挿入] ボックスの一覧の [ドロップダウン リスト ボックス] をクリックします。フィールド1 という名前の新しいドロップダウン リスト ボックスがフォームに追加されます。
-
Microsoft InfoPath のデザイナ ウィンドウで、[フィールド1] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[追加] をクリックします。
-
[選択肢の追加] ダイアログ ボックスの [値] ボックスに FL と入力し、[OK] をクリックします。
-
[ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[追加] をクリックします。
-
[選択肢の追加] ダイアログ ボックスの [値] ボックスに MI と入力し、[OK] をクリックします。
- [ドロップダウン リスト ボックスのプロパティ] ダイアログ ボックスで、[OK] をクリックします。
-
[コントロールの挿入] ボックスの一覧の [ドロップダウン リスト ボックス] をクリックします。フィールド2 という名前の新しいドロップダウン リスト ボックスがフォームに追加されます。
-
[ツール] メニューの [データ接続] をクリックします。
-
[データ接続] ダイアログ ボックスで、[追加] をクリックします。
-
[データ接続ウィザード] ダイアログ ボックスで、[データの受信] をクリックし、[次へ] をクリックします。
-
[Web サービス] をクリックし、[次へ] をクリックします。
-
[データ接続に使用する Web サービスの場所を入力してください] ボックスに http://<SERVER>/PopulateCities/Service1.asmx?wsdl と入力し、[次へ] をクリックします。
-
[処理を選択してください] ボックスの一覧の [GetCities] をクリックし、[次へ] をクリックします。
- [データ接続ウィザード] ダイアログ ボックスで、[完了] をクリックします。
-
[データ接続] ダイアログ ボックスで [閉じる] をクリックします。
-
InfoPath のデザイナ ウィンドウで、[フィールド2] を右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
InfoPath 2007 では、[リスト ボックス項目] の [フォームのデータ ソースで値を検索する] をクリックします。InfoPath 2003 では、[リスト ボックス項目] の [データ接続の値をデータベース、Web サービス、ファイル、SharePoint ライブラリまたはリストで参照する] をクリックします。
-
[エントリ] ボックスの右側にある [XPath の選択] をクリックします。[フィールドまたはグループの選択] ダイアログ ボックスが表示されます。
-
すべてのノードを展開し、[string] をクリックします。
-
[OK] をクリックします。
-
動作規則を追加して、返されるデータをフィルタ処理します。これを行うには、次の手順を実行します。
-
デザイナ ウィンドウで、[フィールド1] ボックスを右クリックし、[ドロップダウン リスト ボックスのプロパティ] をクリックします。
-
[入力規則と動作規則] の [動作規則] をクリックします。[動作規則] ダイアログ ボックスが表示されます。
-
[追加] をクリックし、[動作の追加] をクリックします。
-
[動作] セクションのドロップダウン リストの一覧の [フィールドの値を設定する] をクリックします。
-
[フィールド] ボックスの右側にある [XPath の選択] をクリックします。
-
[GetCities (セカンダリ)] データ ソースの [queryFields] の下にある [sState] ノードをクリックし、[OK] をクリックします。
-
[値] ボックスの右側にある [fx] をクリックします。
-
[フィールドまたはグループの挿入] をクリックします。
-
[メイン] データ ソースの [マイフィールド] の下にある [フィールド1] ノードをクリックし、[OK] をクリックします。
-
[OK] をクリックして、[動作規則] ダイアログ ボックスに戻ります。
-
[動作の追加] をクリックします。
-
[動作] セクションのドロップダウン リストの一覧の [データ接続を使用してクエリを送信する] をクリックします。
-
[データ接続] セクションの [GetCities] をクリックし、[OK] をクリックします。
-
[OK] をクリックしてすべてのダイアログ ボックスを閉じます。
-
[上書き保存] をクリックしてフォームを保存します。
フォームのテスト
-
InfoPath を起動します。
-
InfoPath 2007 では、[ファイル] メニューの [プレビュー] をポイントし、[フォーム] をクリックします。InfoPath 2003 では、[ファイル] メニューの [フォームのプレビュー] をポイントし、[既定] をクリックします。
-
1 つ目のドロップダウン リストの一覧の [FL] をクリックし、[MI] をクリックして、[Unknown] をクリックします。2 つ目のドロップダウン リストの内容が更新されます。
Microsoft Office の最新の Service Pack の入手方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
870924
(http://support.microsoft.com/kb/870924/
)
最新の Office 2003 Service Pack を入手する方法
文書番号: 826994 - 最終更新日: 2007年4月16日 - リビジョン: 2.1
この資料は以下の製品について記述したものです。
- Microsoft Office InfoPath 2007
- Microsoft Office InfoPath 2003
- Microsoft Visual Studio .NET 2003 Professional Edition
- Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
| kbhowto kbwebservices KB826994 |
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"