是的,你可以做到這一點,但是,這是非常棘手的。
理論上,您可以調用Lists.asmx Web服務的「UpdateListItems」方法並傳遞批處理語句,但由於列表Web服務的實現不能在InfoPath中使用它。這就是爲什麼您需要編寫自己的Web服務來包裝UpdateListItems方法,以便您可以將它用於IP。
如果你不知道如何編寫一個Web服務(和SharePoint中託管的話),請使用StackOverflow上的搜索功能,或者考慮谷歌 - 大量的教程在那裏;-)
一旦你得到了網服務運行,你需要的服務引用添加到http://myserver/_vti_bin/Lists.asmx Web服務,然後創建以下方法:
[WebMethod]
public void UpdateListItems(string listGuid, string xmlBatch)
{
var batch = new XmlDocument();
batch.LoadXml(xmlBatch);
//create an instance of the lists proxy client
var listSvc = listService = new ListsWebService.Lists();
//set the url of the client
listService.Url = "http://myserver/_vti_bin/Lists.asmx";
listSvc.UpdateListItems(listGuid, batch);
}
請注意,如果您配置LISTSVC的網址(在本例等)硬編碼的,你需要做確保列表中,你想添加文件夾,是在th與網址相同的網站。如果你想讓這個方法更通用(我建議你這樣做),你可以簡單地將SiteCollection Url作爲參數傳遞給ListCvlectionUrl +「_vti_bin/Lists.asmx」。
一旦設置,您可以創建在InfoPath到新創建的Web服務數據連接和配置它是這樣的:
字段「列表名」,其實是List的GUID - 你可以通過單擊「庫設置」 - 「信息管理策略設置」通過用戶界面獲取它,然後從瀏覽器的地址欄複製它。示例:
{39d01277-4ba1-4589-90f8-c957b4b2dd09}
字段「XML」包含用於創建文件夾的批處理腳本。你可以靜態聲明它,或者你可以使用concat()函數動態構建它。本示例在庫的根目錄下創建一個名爲「MyFolder」的文件夾。
<Batch>
<Method ID='1' Cmd='New'>
<Field Name='ID'>New</Field>
<Field Name='FSObjType'>1</Field>
<Field Name='BaseName'>MyFolder</Field>
</Method>
</Batch>
如果你需要有子文件夾,這也是可能的。以下示例將在文件夾「MyFolder」中創建一個名爲「MySubFolder」的文件夾。
<Batch>
<Method ID='1' Cmd='New'>
<Field Name='ID'>New</Field>
<Field Name='FSObjType'>1</Field>
<Field Name='BaseName'>MyFolder/MySubFolder</Field>
</Method>
</Batch>
然後你只需要添加一個提交按鈕動作就大功告成了:-)
還要注意,上面的代碼僅僅是一個例子(工作雖然)。如果您在生產中使用它,一定要加適量的異常記錄,因爲你會需要它:-)
希望這有助於!
安德烈亞斯謝謝! 我會探討網絡服務的想法。我不是開發商,但我敢肯定,我會來的吧:) 將盡快我來正確 – Melkman
啊好吧,我不知道更新後....你可能會想這傳遞給你最喜歡的sharepoint dev ;-) – int32
哈哈,是的,我認爲是。我相信我們的開發人員會喜歡一個寵物項目:-)感謝您的幫助! – Melkman