在没有托管代码的情况下使用Infopath表单在Sharepoint上使用UpdateListItems webbservice

时间:2013-11-21 12:48:23

标签: web-services sharepoint infopath caml sharepoint-list

我需要创建一个Infopath表单,用户可以使用该表单创建帖子并更新Sharepoint列表。

我找到了列表GUID和Lists.asmx webbservice。我已经确定我是管理员,对该列表有完整的权利。该列表是一个基本的2列(1行文本)。

我创建了CAML模板:

<?xml version="1.0" encoding="UTF-8"?>
<Batch OnError="Continue">
    <Method ID="1" Cmd="New">
        <Field Name="Field1"></Field>
        <Field Name="Field2"></Field>
    </Method>
</Batch>

使用CAML的两个数据连接:

XML-file - loading the CAML.
Send data using Lists.asmx-service - "UpdateListItems"-method. 

UpdateListItems的参数:tns:listName连接到包含GUID的变量。 tns:在加载的CAML中连接到/ Batch的更新,包括XML子树。

我使用XMLfile-connection(CAML)添加了一个重复表,我可以在其中填充新Listitem的列值。

我添加了一个触发使用dataconnection和“UpdateListItems”-method的操作规则的按钮。该按钮也会被测试触发其他规则操作,因此按钮本身可以正常工作。

当我尝试将新项目发布到sharepoint-list时,我没有收到任何错误消息,一切似乎都正常,但没有创建任何项目。

如果我更改任何内容,例如GUID或其他内容,我会收到不同的错误消息,因此它显示为Infopath认为一切正常,但Sharepoint没有对我的列表做任何事情。没有创建任何项目。

任何人都知道这会出现什么问题?

编辑:我使用了来自同一个Sharepoint服务器的其他Web服务而没有任何问题。

4 个答案:

答案 0 :(得分:2)

这个建议可能有点过时了,但是......

我遇到了类似的问题。通过在SharePoint服务器上使用ULSViewer并阅读MSDN文档,我发现CAML字段标记中的Name属性应该是Sharepoint在创建时分配给列表列的内部名称。在我的情况下,我不得不改变CAML:

<Field Name="pub1"> 

to 

<Field Name="_x0066_ub1">

答案 1 :(得分:1)

我遇到了同样的问题 - 您必须将Web服务提交到网站/_vti_bin/lists.asmx而不是服务器/_vti_bin/lists.asmx。例如,您的网站位于地址server/site,您应该使用server/site/_vti_bin/lists.asmx,而不是server/_vti_bin/lists.asmx。我的问题出在某些子网站上,所以你可以检查它是否与你相同。

答案 2 :(得分:0)

使用UpdateListItem创建新项目时,需要为列表的ID列包含Field标记。它应格式化为:

<Field Name='ID'>New</Field>

答案 3 :(得分:0)

标题仍然是列表中的必填列(默认情况下是这样)。如果是这样,请尝试将其添加到XML:

<Field Name='Title'></Field>

我不认为

<Field Name='ID'></Field>
执行NEW命令(插入新的列表项)时需要

,但UPDATE命令(更新现有列表项)需要它 - 当我测试它时,我当然不需要它。