我有一堆InfoPath表單模板(xsn),我想以編程方式上傳到SharePoint列表。我的程序必須根據預定義的邏輯將這些表單模板上傳到不同的列表。當我上傳我的代碼的瀏覽器啓用表單模板(XSN),形式不工作:以編程方式將XSN上傳到SharePoint
/// <summary>
/// Uploads a file to the specified sharepoint list
/// </summary>
/// <param name="listName"></param>
/// <param name="fileInfo"></param>
/// <param name="listVersion"></param>
/// <returns></returns>
public static bool UploadFile(string listName, FileInfo fileInfo, string listVersion)
{
WebRequest request = WebRequest.Create(fileInfo.URL);
request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
request.Method = "PUT";
byte[] buffer = new byte[1024];
using (Stream stream = request.GetRequestStream())
{
using (MemoryStream ms = new MemoryStream(fileInfo.Bytes))
{
for (int i = ms.Read(buffer, 0, buffer.Length); i > 0; i = ms.Read(buffer, 0, buffer.Length))
stream.Write(buffer, 0, i);
}
}
WebResponse response = request.GetResponse();
response.Close();
var client = new Lists.ListsSoapClient();
var batch = new XElement("Batch",
new XAttribute("OnError", "Continue"),
new XAttribute("ListVersion", listVersion),
new XAttribute("PreCalc", "TRUE"));
var method = new XElement("Method",
new XAttribute("ID", "1"),
new XAttribute("Cmd", "Update"),
new XElement("Field",
new XAttribute("Name", "ID")),
new XElement("Field",
new XAttribute("Name", "FileRef"),
fileInfo.URL));
foreach (string key in fileInfo.Properties.Keys)
{
object value = fileInfo.Properties[key];
method.Add(new XElement("Field",
new XAttribute("Name", key),
fileInfo.Properties[key]));
}
batch.Add(method);
var element = client.UpdateListItems(listName, batch);
var code = element.Elements().First().Elements().First().Value;
if (code != "0x00000000")
throw new Exception(code);
return true;
}
似乎有更多的事情要做,只是按下一個文件流進榜。
任何人都有一個想法如何做到這一點?
編輯更具體地說,該錯誤消息我得到的是:This form template is not enabled for viewing in the browser.
UPDATE當我發佈與微軟的InfoPath相同的形式它的工作原理。
從錯誤信息該表單可能會有所幫助。 – 2011-05-17 15:21:52
謝謝....更新。 – 2011-05-17 16:31:54
您的表單是否真正啓用瀏覽器查看? – 2011-05-18 07:47:56