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?