InfoPath 2007を利用したSharePoint Webサービス連携
木曜日, 7 月 31st, 2008
InfoPath 2007にはWebサービス接続が用意されています。一方、MOSSもWebサービスが用意されています。MOSSが用意しているWebサービスは、IIS マネージャからみると、http://server:port/_vti_bin/***.asmxに各種Webサービスが揃っています。
では、まずInfoPathを開き、フォームテンプレートのデザイン→Webサービスを選択します。次にデータ接続ウィザードが起動します。
- 1番目の画面でデータの受信と送信を選択します。
- 2番目の画面でWebサービスを選択します。今回は、http://server:port/_vti_bin/search.asmx?WSDLを入力します。
- 3番目の画面でQueryを選択します。
- 4番目の画面では、適当な名前(既定はメインクエリ)を入力します。
- 5番目の画面では、上記で入力したWebサービスのURLが入力されていることを確認し、次へを押します。
- 6番目の画面では、Queryを選択します。
- 7番目の画面では、パラメータオプションのフィールドまたはグループにqueryXMLを選択します。
- 8番目の画面では、適当な名前(既定はメイン送信)を入力します。
あとは、queryXMLをここにクエリフィールドをドラックしてくださいと記載されている領域にドラッグ&ドロップします。同様にQueryResultをここにデータフィールドをドラッグしてくださいと記載されている領域にドラッグ&ドロップします。次にプレビューを押します(下図になります)。
そして、Query XMLに検索文字を入力し、クエリの実行ボタンを押すと、Qurey Resultに検索結果のXMLが表示されます!
これだけの操作でWebサービスの動作確認ができるなんて楽です!また、他のWebサービスを利用すると、InfoPathフォームを利用した管理ツールなどを利用できる??アクセス権の一覧とか出せたら…
ちなみにQueryではなく、QueryExを選択するとちょっと変わります。
まず、途中でサンプル値を入力する必要があります。下記の例はSharePointという文字で、特に検索範囲を決めない場合です。
<?xml version="1.0" encoding="utf-8" ?>
<QueryPacket xmlns="urn:Microsoft.Search.Query" Revision="1000">
<Query domain="QDomain">
<SupportedFormats>
<Format>urn:Microsoft.Search.Response.Document.Document</Format>
</SupportedFormats>
<Context>
<QueryText language="en-US" type="MSSQLFT">
<![CDATA[ SELECT Title, Rank, Size, Description, Write, Path FROM portal..scope() WHERE CONTAINS ('"sharepoint*"') ORDER BY "Rank" DESC]]>
</QueryText>
</Context>
<Range>
<StartAt>1</StartAt>
<Count>100</Count>
</Range>
<ImplicitAndBehavior>true</ImplicitAndBehavior>
</Query>
</QueryPacket>
(改行がわかりにくくてすいません…)
あと、もう1つ先程の手順と違う箇所は、RelevantResultsグループをここにデータフィールドをドラッグしてくださいと記載されている領域にドラッグ&ドロップします。また、このときに繰り返しセクションとしてフィールドを設定します(下図になります)。
さて、次にクエリですが、ここも単に文字列ではなく、上記のXMLから<Query Packet >~</Query Packet>の部分を入力し、クエリを実行します。
<QueryPacket xmlns="urn:Microsoft.Search.Query" Revision="1000">
<Query domain="QDomain">
<SupportedFormats>
<Format>urn:Microsoft.Search.Response.Document.Document</Format>
</SupportedFormats>
<Context>
<QueryText language="en-US" type="MSSQLFT"><![CDATA[ SELECT Title, Rank, Size, Description, Write, Path FROM portal..scope() WHERE CONTAINS ('"sharepoint*"') ORDER BY "Rank" DESC]]></QueryText>
</Context>
<Range>
<StartAt>1</StartAt>
<Count>100</Count>
</Range>
<ImplicitAndBehavior>true</ImplicitAndBehavior>
</Query>
</QueryPacket>
そうすると・・・下図のように検索結果分の項目や、プロパティ毎に検索結果の値が確認できます。QueryExを利用すると、SQLクエリで検索することができるので、表示させたい項目などを指定して検索結果として表示させることが可能になります!