2013-01-18 3 views
1

Essayez de créer un nouvel élément de liste et stockez l'ID de l'élément créé dans une variable pour une utilisation ultérieure. (dans SharepointOnline 2010) Je suis en mesure de créer l'article parfaitement bien mais pas en mesure d'obtenir l'ID de l'objet résultant.UpdateListItems L'appel ajax réussit mais ne renvoie pas l'élément créé

Ma solution actuelle consiste à effectuer une requête ajax à l'aide de UpdateListItems pour créer l'élément, puis dans la fonction de rappel de succès try find et ID dans l'objet résultant. Par conséquent, l'élément de la liste est créé avec succès et onSuccess est appelé.

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

Mais la clause each n'est jamais entrée. Au début je pensais qu'il y avait un problème de navigateur avec find('z\\:row') mais j'ai regardé l'objet data dans le débogueur chrome et je peux voir que si un élément <z:row> existe, il ne contient aucun nœud enfant! C'est comme si le service n'avait renvoyé aucun élément, même s'il a réussi à créer un élément de liste. Pourquoi cela pourrait-il être?

I Dois-je être en mesure d'obtenir l'ID de l'élément de liste créé de cette façon, non? Suis-je en train de manquer quelque chose ou est-ce que mon approche est incorrecte? Pourrait-il y avoir un problème étrange avec le serveur qui cause cela? Je pense que ce code a fonctionné très bien précédemment

Modifier: Pour une raison quelconque, impossible de coller l'intégralité du code dans la publication. Donc, voici un pastebin à la place http://pastebin.com/iGrvytgn

+0

Exemple de code utilisé et le résultat donné aiderait. – dbf

Répondre

1

Comme Eric dit, le champ ID DEVRAIT être spécifié, mais il ne semble pas être requis. J'ai réussi à exécuter les UpdateListItems commandent parfaitement bien à la fois avec ou sans ...

Mais j'ai trouvé 2 autres problèmes avec le code dans mon premier post:

  1. $(data).find('z\\:row') ne fonctionne pas chrome. A dû ajouter la ligne $(data.responseText).find('z\\:row'). Il s'avère que le chrome place les données dans une propriété différente des autres navigateurs. Il utilise la propriété responseText plutôt que la propriété responseXML. et `$ (data) .find ('z \: row') ne trouvera rien dans la propriété responseText. Il s'agissait d'un problème majeur, car lorsque je vérifiais le débogueur chrome, je pouvais toujours voir que la propriété responseXML était présente et contenait tous les nœuds attendus, manquant simplement des données telles que ows_ID.

  2. La fonction de rappel (function(data,status)) n'a pas eu à corriger les paramètres à utiliser comme fonction de succès de l'appel ajax.Les données de réponse d'un appel ajax sont placées dans l'objet jqXHR. Je pensais que cet objet était toujours le premier paramètre, mais il s'avère que la liste des paramètres est différente pour success et complete.

    • complète est définie comme: Function(jqXHR jqXHR, String textStatus)
    • Le succès est défini comme: Function(Object data, String textStatus, jqXHR jqXHR)

Donc, pour utiliser mon rappel comme la fonction de succès, il est en-tête doit être function(obj,status,data).

0

Vous devez remplir un ID lorsque vous appelez UpdateListItems. Voir l'exemple Cmd = "New" dans MSDN.

Donc, dans votre cas, vous modifiez l'élément de lot à:

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

Où Nouveau est un identifiant composé. Vous devez toujours analyser le résultat pour l'identifiant réel, comme vous le faites déjà.

Voici un exemple d'une requête à une liste de serveur 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> 

Et la réponse:

<?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> 
+0

Existe-t-il des exigences pour ce que l'ID composé devrait être? MSDN n'explique pas vraiment comment l'utiliser, indique seulement qu'il ne correspond pas à un ID d'élément de liste. ("Chaque méthode affichée contient des éléments de champ qui spécifient l'ID de l'élément et la nouvelle valeur de champ pour l'élément.L'ID de champ ne correspond pas à l'index de l'élément dans la collection d'éléments pour la liste.") – Drkawashima

+0

Bon, c'est pourquoi j'ai utilisé un guid. Je ne suis pas sûr s'il y a une manière plus facile (api), mais les réponses [cette question] (http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript) montrent quelques façons de générer un guid dans JavasScript. –

+0

On dirait que vous pouvez lui donner une valeur fixe aussi (comme «Nouveau»). Malheureusement la documentation est pauvre et je ne serais pas surpris si le comportement peut varier un peu entre les versions et les éditions de SharePoint. Guid travaille pour moi de WSS 3.0 à, SP2013 Enterprise, mais il peut perdre quelques octets et cycles de processeur. –

Questions connexes