我在MOSS 2007上的表單庫中有一個InfoPath表單。我認爲InfoPath瀏覽器工具欄與它保存(手動輸入文件名)並關閉,而不是過度複雜填寫表格。我想要做的只是一個帶有一些代碼的按鈕,它將表單保存到使用自動生成的文件名打開的庫中,並關閉回庫。要做到這一點,我寫了下面的代碼:以編程方式將瀏覽器InfoPath表單保存到源列表中
public void SaveForm(string formXml, string fileName, Dictionary<string, string> extraColumns)
{
SPFolder formsLibraryFolder = SPContext.Current.List.RootFolder;
string lowerCaseFilename = fileName.ToLower();
if (!lowerCaseFilename.EndsWith(".xml"))
fileName += ".xml";
web.AllowUnsafeUpdates = true;
SPFile file = formsLibraryFolder.Files.Add(fileName, Encoding.UTF8.GetBytes(formXml));
if ((extraColumns != null) && (extraColumns.Count > 0))
{
foreach (KeyValuePair<string, string> column in extraColumns)
{
file.Item[column.Key] = column.Value;
}
file.Item.Update();
}
web.AllowUnsafeUpdates = false;
}
用事實證明這段代碼的問題是,SPContext.Current.List在空的情況,我想的形式保存到庫在那裏它被打開了。我明顯錯誤地認爲,因爲表單將在瀏覽器內部完成,所以列表的上下文將是有效的。 但是,我可以訪問包含列表的SPWeb,但這意味着我需要爲每種表格類型硬編碼列表名稱,當然事先知道每個表格的列表名稱。這段代碼是我編寫和參考了許多不同項目的幫助程序庫的一部分,所以我真的不能硬編碼值。我當然可以傳遞列表名稱作爲參數,並在表單名稱中對錶單本身進行硬編碼,但這仍然意味着我必須事先知道將在何處部署表單。 有沒有什麼辦法可以解決新點擊庫的問題,從而開始填寫表單?