Internet Explorer で単純な XML ドキュメントとして開くのではなく、プログラムで作成し、SharePoint のフォーム ライブラリに追加して InfoPath テンプレートで開く XML ドキュメントを取得する際に問題があります。
基本的に、データベースをチェックして特定の条件が真かどうかを確認する Web サービスがあります。存在する場合、Web サービスは、前述の InfoPath テンプレートによって作成されたファイルと同じ XML スキーマを持つ XML ドキュメントをプログラムで作成します。通常のプロセスでは、実際のユーザーがこの InfoPath テンプレートを開いてデータを入力し、[送信] ボタンをクリックします。これにより、バックグラウンドで XML ドキュメントが作成され、フォーム ライブラリに保存されます。ユーザーが後でその XML ドキュメントを表示するためにフォーム ライブラリにアクセスすると、ドキュメントは (単に Internet Explorer で XML ドキュメントとして開くのではなく) InfoPath テンプレートで自動的に開きます。
Web サービスから生成された XML ドキュメントが、InfoPath から生成された XML ドキュメントとは異なる動作をする理由を突き止めようとしています。Web サービス内で XML ドキュメントを作成するために使用しているコードのスニペットを次に示します。
//specify path to the SharePoint site and the form library
var clientContext = new ClientContext("http://urlToSiteContainingTheFormLibrary");
var site = clientContext.Web;
clientContext.Load(site);
var folder = site.GetFolderByServerRelativeUrl("FormLibraryNameHere");
clientContext.Load(folder);
clientContext.ExecuteQuery();
//create new file to add to the form library
var fci = new FileCreationInformation();
var encoding = new System.Text.UTF8Encoding();
//load the InfoPath document's XML schema from resources file
var baseXml = XElement.Load(new StringReader(Properties.Resources.BaseXml));
//fill out the appropriate elements and attributes of the XML here
//......
//
//set remaining properties of the new FileCreationInformation object
byte[] array = encoding.GetBytes(baseXml.ToString());
fci.Content = array;
fci.Overwrite = true;
fci.Url = "DocumentName"
//add the new file to the form library
var newFile = folder.Files.Add(fci);
clientContext.Load(newFile);
var item = newFile.ListItemAllFields;
clientContext.Load(item);
//set metadata for the xml file here
item["HTML_x0020_File_x0020_Type"] = "InfoPath.Document.3";
item["TemplateUrl"] =
"http://templateUrlHere/template.xsn?openin=preferclient&noredirect=true&xsnlocation=/templateLocation/template.xsn";
//set remaining item properties......
//update changes to the item
item.Update();
//commit the changes
clientContext.ExecuteQuery();
この時点で、XML ドキュメントはフォーム ライブラリに正常に送信されますが、それを開こうとすると、指定したテンプレートを使用するのではなく、Internet Explorer 内でプレーンな XML として開きます。アイテムの HTML_x0020_File_x0020_Type および TemplateUrl プロパティは、SharePoint が InfoPath テンプレートを使用してこのファイルを開く必要があることを知るのに十分な情報を指定すると思いますが、特に設定する必要がある他のプロパティがある可能性があります。同様の問題を経験した人はいますか?最初は、自分のテンプレートに使用している URL が間違っていると思っていましたが、InfoPath テンプレートを介して作成された既存の XML ドキュメントから直接コピーしたので、それが問題だとは思いません (実際の URL は省略しました)。 URL とファイル名は上記のサンプル コードに含まれているため、これらの URL が正しくないという事実は無視してください)。
事前に回答いただきありがとうございます。提供されたヘルプに感謝します。