1

尝试在其中创建一个新的列表项并将创建的项的 ID 存储在一个变量中以供以后使用。(在 SharepointOnline 2010 中)我能够完美地创建项目,但无法获得结果对象的 ID。

我当前的解决方案是使用 UpdateListItems 发出 ajax 请求来创建项目,然后在成功回调函数中尝试在结果对象中查找和 ID。

 var onsuccessArg = function (data) {
        $(data).find('z\\:row').each(function () {
            savedItemID = $(this).attr('ows_ID');
        });
    };

所以列表项创建成功并调用了onSuccess。但是从未输入 each 子句。起初我认为存在浏览器问题,find('z\\:row')但我data在 chrome 调试器中查看了它的对象,我可以看到虽然<z:row>元素确实存在,但它不包含任何子节点!所以它就像服务没有返回任何项目,即使它确实成功地创建了一个列表项。为什么会这样?

我应该能够以这种方式获取创建的列表项ID,对吗?我只是错过了什么还是我的方法不正确?导致这种情况的服务器是否存在一些奇怪的问题?我认为这段代码以前一直运行良好

编辑:由于某种原因无法将整个代码粘贴到帖子中。所以这里是一个pastebin,而不是http://pastebin.com/iGrvytgn

4

2 回答 2

1

正如 Eric 所说,应该指定 ID 字段,但似乎不是必需的。无论有没有它,我都设法完美地执行了 UpdateListItems 命令......

但是我在第一篇文章中发现了代码的另外两个问题:

  1. $(data).find('z\\:row')在铬中不起作用。不得不追加这一行$(data.responseText).find('z\\:row')。事实证明,chrome 将数据放置在与其他浏览器不同的属性中。它使用 responseText 属性而不是 responseXML 属性。并且 `$(data).find('z\:row') 不会在 responseText 属性中找到任何内容。这真是令人头疼,因为当我检查 chrome 调试器时,我仍然可以看到 responseXML 属性存在并且包含所有预期的节点,只是缺少任何数据,例如 ows_ID。

  2. 回调函数 ( function(data,status)) 不必更正参数即可用作 ajax 调用的成功函数。ajax 调用的响应数据放在 jqXHR 对象中。我认为这个对象总是第一个参数,但结果参数列表对于successand是不同的complete

    • 完整定义为:Function( jqXHR jqXHR, String textStatus )
    • 成功定义为: Function( Object data, String textStatus, jqXHR jqXHR )

因此,要将我的回调用作成功函数,它的标题应该是function(obj,status,data).

于 2013-01-21T13:59:38.607 回答
0

调用 UpdateListItems 时必须填写 ID。请参阅MSDN中的 Cmd="New" 示例。

因此,在您的情况下,将 Batch 元素更改为:

var batch = "<Batch OnError=\"Continue\"><Method ID=\"1\" Cmd=\"New\">" + 
                "<Field Name=\"Title\">" + title + "</Field>" +
                "<Field Name=\"ID\">" + New + "</Field>" +
            "</Method></Batch>";

其中 New 是一个虚构的 ID。您仍然需要解析真实 ID 的结果,就像您已经在做的那样。

以下是对 SP2010 服务器列表的请求示例:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <listName>Announcements</listName>
      <updates>
        <Batch OnError="Continue">
          <Method ID="1" Cmd="New">
            <Field Name="ID">998877</Field>
            <Field Name="Title">abcdef</Field>
          </Method>
        </Batch>
      </updates>
    </UpdateListItems>
  </soap:Body>
</soap:Envelope>

和回应:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <UpdateListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <UpdateListItemsResult>
        <Results>
          <Result ID="1,New">
            <ErrorCode>0x00000000</ErrorCode>
            <ID />
            <z:row ows_ID="6" details="removed" xmlns:z="#RowsetSchema" />
          </Result>
        </Results>
      </UpdateListItemsResult>
    </UpdateListItemsResponse>
  </soap:Body>
</soap:Envelope>
于 2013-01-18T12:14:35.607 回答