続・Infopath ボタンクリックでローカルにフォームを保存したい

前回からの続きです。インフォパスはクライアントアプリですが、スクリプトの動作に関しては ie のセキュリティ設定に依存しており、一部の ActiveX コントロールは動作しないことが判りました。

http://sharepointmaniacs.com/files/
マイクロソフトの KB によると、フォームライブラリの URL を ie のセキュリティ設定で「信頼済みサイト」に登録すれば解決、となっていますが…。少なくとも私の環境ではこれだけでは駄目でした。(ie8、WindowsXP)
http://sharepointmaniacs.com/files/


しかし、KB の情報から原因はおおよそ見当がつきましたので、[レベルのカスタマイズ] で直接、セキュリティ設定を変更します。
まずはこれ。
http://sharepointmaniacs.com/files/

http://sharepointmaniacs.com/files/
「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行」を有効にします。
すると、エラー内容が変わりました。
http://sharepointmaniacs.com/files/

http://sharepointmaniacs.com/files/
次はこれ。
http://sharepointmaniacs.com/files/

http://sharepointmaniacs.com/files/
「ドメイン間でのデータ ソースのアクセス」を有効にします。
http://sharepointmaniacs.com/files/

http://sharepointmaniacs.com/files/
hoge.txt が作成されました!
http://sharepointmaniacs.com/files/
やれやれ。
やっと、これでスタート地点です。
http://sharepointmaniacs.com/files/
今度は、フォームの内容をファイルに XML で吐き出させます。
最初の外人さんのコードと組み合わせて、こんな感じで。

var xmlDoc = XDocument.DOM.xml;
var s = new ActiveXObject(‘ADODB.Stream’);
s.type = 2;
s.charset = ‘utf-8′;
s.open();
s.writeText(xmlDoc);
s.saveToFile(‘C:¥¥infoapath.xml’, 2);
s.close();

これでどうかな?
http://sharepointmaniacs.com/files/

http://sharepointmaniacs.com/files/

http://sharepointmaniacs.com/files/
出来ました~(嬉)
きちんと、2バイト文字も保持されてフォームが正常に開きました。
http://sharepointmaniacs.com/files/
あとは、当初の要件を満たすために、
1.フラグを立てる
2.メッセージを出す
3.閉じる
処理が必要ですね。
http://sharepointmaniacs.com/files/
最終的にこんな感じになりました。

var setCopyFlag = XDocument.DOM.selectSingleNode( “my:マイフィールド/my:isCopy”);
setCopyFlag.text = “1”;
var xmlDoc = XDocument.DOM.xml;
var s = new ActiveXObject(‘ADODB.Stream’);
s.type = 2;
s.charset = ‘utf-8′;
s.open();
s.writeText(xmlDoc);
s.saveToFile(‘C:¥¥COPY.xml’, 2);
s.close();
XDocument.UI.Alert(“Cドライブにコピーを保存しました。¥r¥nファイル名は COPY.xml です。¥r¥nOK をクリックすると画面を閉じます。”);
Application.ActiveWindow.Close(true);

http://sharepointmaniacs.com/files/
isCopy フィールドに 1 を立てて、ローカルに保存しています。
あとはこれをフラグに、ボタンを無効化するか、フォームの起動オプションで、閲覧専用のビューに遷移させれば OK です。
http://sharepointmaniacs.com/files/
…。
ところで。もしクライアントに ie がなかったら、どんな挙動になるんですかね?
http://sharepointmaniacs.com/files/
Infopath 正しくは XDocument.Solution.URI ではなく XDocument.URI だったらしい
続・Infopath ボタンクリックでローカルにフォームを保存したい2
続・Infopath ボタンクリックでローカルにフォームを保存したい
Infopath ボタンクリックでローカルにフォームを保存したい


Author

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