在SharePoint 2010中提交列表表单时,在库中创建文件夹

时间:2011-08-19 13:57:18

标签: sharepoint-2010

我想知道在SharePoint中提交表单时是否可以创建文件夹。我在Infopath中创建了一个自定义SharePoint列表表单,我想在提交按钮中添加一个操作,以创建四个文件夹,每个文件夹对应四个文档库,其中包含已提交项目的标题。

但是我看到在Infopath中没有为SharePoint列表启用自定义代码按钮,因此我无法在后台添加任何代码。开箱即用的工作流程也不允许我这样做,除非我遗漏了某些东西......还有什么方法可以做到这一点?

提前感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

是的,你可以做到这一点,但是,它非常棘手。

理论上,您可以调用Lists.asmx Web服务的“UpdateListItems”方法并传递批处理语句,但由于列表Web服务的实现,您无法在InfoPath中使用它。这就是为什么你需要编写自己的Web服务来包装UpdateListItems方法,这样你就可以将它与IP一起使用。

如果您不知道如何编写Web服务(并在SharePoint中托管),请使用StackOverflow的搜索功能或考虑谷歌 - 许多很棒的教程; - )

运行Web服务后,您需要向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的Url配置为硬编码(如本例所示),则需要确保要添加文件夹的列表与Url位于同一站点内。如果你想让这个方法更通用(我建议你做),你可以简单地将SiteCollection Url作为参数传递,并将listSvc.Url设置为SiteCollectionUrl +“_ vti_bin / Lists.asmx”。

设置完成后,您可以在InfoPath中创建与新创建的Web服务的数据连接,并将其配置如下: Configuration of the Lists wrapper data connection

字段“listName”实际上是列表的GUID - 您可以通过单击“库设置” - “信息管理策略设置”通过UI获取它,然后从浏览器的地址栏复制它。例如:

{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>

然后你只需添加一个提交按钮动作就可以了: - )

另请注意,上面的代码只是一个示例(虽然有效)。如果您在生产中使用它,请确保添加适当的异常日志记录,因为您将需要它: - )

希望这有帮助!