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<z:row>

作成したリスト アイテムの ID をこの方法で取得できるはずですよね? 何かが欠けているだけですか、それとも私のアプローチが間違っていますか? これを引き起こしているサーバーに奇妙な問題がある可能性はありますか? このコードは以前はうまく機能していたと思います

編集:何らかの理由で、コード全体を投稿に貼り付けることができません。代わりに、ここにペーストビンがありますhttp://pastebin.com/iGrvytgn

4

2 に答える 2

1

エリックが言ったように、ID フィールドを指定する必要がありますが、必須ではないようです。私は UpdateListItems コマンドを、それの有無にかかわらず完全に実行することができました...

しかし、最初の投稿で、コードに他に 2 つの問題が見つかりました。

  1. $(data).find('z\\:row')クロムでは機能しません。行を追加する必要がありました$(data.responseText).find('z\\:row')。chrome は、他のブラウザーとは異なるプロパティにデータを配置することが判明しました。responseXML プロパティではなく、responseText プロパティを使用します。`$(data).find('z\:row') は responseText プロパティで何も見つけられません。これは頭​​を悩ませる問題でした。Chrome デバッガーを確認したところ、responseXML プロパティが存在し、予想されるすべてのノードが含まれていて、ows_ID などのデータが欠落しているだけでした。

  2. コールバック関数 ( function(data,status)) は、ajax 呼び出しの成功関数として使用するためにパラメーターを修正する必要はありませんでした。ajax 呼び出しの応答データは、jqXHR オブジェクトに配置されます。このオブジェクトは常に最初のパラメーターだと思っていましたが、 と のパラメーター リストが異なることがわかりましsuccesscomplete

    • 完全は次のように定義されます。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 に答える