2017-04-04 8 views
0

Auf meinem SharePoint gibt es eine Website, wo ein einzelnes Listenelement basierend auf einer Benutzerauswahl mit JavaScript und CSOM geladen wird. Dieses Listenelement hat insgesamt ~ 60 Eigenschaften, die in seiner Listendefinition definiert sind.SharePoint listitem Eigenschaften gehen verloren nach Update via JS & CSOM

In HTML-Eingabefeldern kann der Benutzer die meisten Eigenschaften ändern, nachdem jQuery die geladenen Eigenschaften in die entsprechenden Eingabefelder eingetragen hat. Wenn die Schaltfläche „Speicher“ gedrückt wird, werden die Eigenschaften von den Eingängen über jQuery gesammelt und in ein einfaches JS-Objekt (itemProps):

var itemprops = { 
    'foo': $('#foo-input').val(), 
    'bar': $('#bar-input').val() 
} 

Dann wird die folgende Funktion aufgerufen:

function updateListItem(itemProps, onItemAdded, onItemError) { 
    var list = web.get_lists().getByTitle('ListTitle'); 
    var listItem = list.getItemById(id); 
    for (var propName in itemProps) { 
     if (itemProps.hasOwnProperty(propName)) { 
      listItem.set_item(propName, itemProps[propName]); 
     } 
    } 
    listItem.update(); 
    context.executeQueryAsync(
     function() { 
      onItemAdded(listItem); 
     }, 
     onItemError 
    ); 
} 

Debugging zeigt mir, dass die Daten in itemProps gültig sind. Aber manchmal (Ich kann diesen Effekt nicht deterministisch reproduzieren) einige Eigenschaften verloren gehen und wenn ich das Listenelement in der Liste auf dem SharePoint betrachten einige der Eigenschaften sind leer, als ob itemProps hatte null oder "" mit dieser Eigenschaft verbunden . Als ich das erste Mal versucht habe, das zu debuggen, habe ich einfach ein Element erstellt und gespeichert (korrekt, mit allen Eigenschaften) und dann wieder geladen und ohne Änderung gespeichert, aber einige Eigenschaften sind verloren gegangen. Andere Eigenschaften werden korrekt aktualisiert und manchmal passiert dies überhaupt nicht.

Gibt es eine Möglichkeit, sicherzustellen, dass dieser Effekt nicht auftritt, oder zumindest es zu erkennen und die Daten zu aktualisieren, bevor die Eingaben des Benutzers verloren gehen?

Antwort

0

Ich stelle fest, du bist nichtcontext.load(listItem) Aufruf vor context.executeQueryAsync() Aufruf, welche die Probleme mit dem listItem Objekt verursachen könnten Werte abgestanden oder dehydriert.

Der Code in Ihrer Frage sieht aus wie es noch Einstellung die angegebenen Werte korrekt auf dem Listenelement sein sollte, obwohl es später einiger Code sein kann (wie in der onItemAdded Funktion), die in falsche Annahmen ausgeführt ist oder subtil Datenunterschiede zu dem unzureichend geladenen Listenelement.

Verwandte Themen