Infopath は Modify User Property ByAccountName メソッドを使えない

SharePoint 標準の Web サービスに userprofileservice.asmx があります。
その名の通り、ユーザプロファイルに関する操作を行うものです。

普段は、情報を取得する GetUserProfileByName メソッドくらいしか利用しないのですが、メソッド一覧を眺めていたら ModifyUserPropertyByAccountName が目に入りました。

これを使えば、ユーザプロファイルを Infopath から編集できるかも?SOAP の構造を見る限り、以前の GetListItem のように複雑ではありません。この形の通り、スキーマを組めば使えるように見えます。

とりあえず組んで見ました。

あとはデータ接続→送信で http://server/_vti_bin/userprofileservice.asmx?WSDL を指定。投げる XML 値の指定はこれで正しい筈。

早速、値を入力して送信してみます。

…なにも起こりません。エラーもしませんが、変更も反映されません。Domein¥User.Name を適当な文字列にすると、きちんと「ユーザが見つかりません」というエラーが返るので、とりあえずプロファイルデータベースと通信は出来ているようなのですが。

しばらく各種設定をこねくり回しましたが、結局駄目。そこで、「そういえば Infopath 2007 には “データ接続テンプレート” なるものがあったな」と思いつきました。

早速、2007を起動してフォームテンプレートのデザイン→Webサービスを選択。あとは Infopath 2003 のデータ接続と同じ要領です。

スキーマが自動生成されました。この機能を使えば、Webサービスのスキーマ構造が簡単に判るんですね!(知らなかった…)とりあえず、構造に間違いはなかったようです。

早速、値を入力して [送信]─

「文字列のデータ型が一致する必要があります」

何を指定しても、Value の値を更新しようとするとこのエラーが返ります。正直、もうお手上げでしたので、一体 Infopath からどんな XML が送信されているのかを調べてもらいました。
[code]<Values>
<ValueData>
<Value>test</Value>
</ValueData>
</Values>[/code]
きれいな構文です。

しかし、実はこれが原因でした。どうやら、この Webサービスは、Value 値の型を示すアトリビュートを、明示的に指定してやる必要があるようです。更に、アトリビュートは更新するプロパティによって異なります。

[code]
emailプロパティ:
<Value <font color="red">xsi:type="xsd:string"</font>>hogehoge@mogemoge.com</Value>
UserProfile_GUIDプロパティ:
<Value <font color="red">xsi:type="q1:guid"</font>>hogehoge&#45;hoge&#45;hogehoge&#45;hoge&#45;hogehoge</Value>
[/code]
どこかでこのアトリビュートを設定できないものか?と暫く試行錯誤しましたが、どうやら、保存や送信をした際に、データ型を外して、プレーンな XML にしてしまうのは Iinfopath の仕様のようです。

結局、残念ながら SharePoint の Web サービスは Infopath で使う目的で設計されている訳ではない、ということですかね。

Infopath の(受信)データ接続の限界は数百行。GetListItem は使えない。
Getting ModifyUserPropertyByAccountName to work


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9