2017-04-04 28 views
0

在我的SharePoint上,有一個網站,其中根據用戶選擇的JavaScript和CSOM加載了單個列表項。這個列表項在其列表定義中總共定義了約60個屬性。通過JS&CSOM更新後,SharePoint listitem屬性會丟失

在HTML輸入字段中,用戶可以在jQuery將所加載的屬性填充到相應的輸入字段後修改大部分屬性。當「保存」在按下按鈕時,屬性從通過jQuery輸入收集並放入簡單JS-對象(itemProps):

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

然後,下面的函數被調用:

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 
    ); 
} 

調試表明,itemProps中的數據是有效的。但有時(我無法確定性地重現該效果)某些屬性會丟失,當我查看SharePoint列表中的列表項時,某些屬性爲空,就好像itemProps與該屬性關聯的null"" 。當我第一次嘗試調試這個時,我只是簡單地創建了一個項目並保存了它(正確地使用了所有的屬性),然後加載並保存了一次而沒有修改,但是一些屬性丟失了。 其他屬性得到正確更新,有時這根本不會發生。

有沒有什麼辦法,以確保這種效果簡化版,發生或至少檢測到它,然後重試更新數據,用戶的輸入迷失過嗎?

回答

0

我注意到你context.executeQueryAsync()這可能會導致與listItem對象的值是無效的或脫水的問題,之前調用context.load(listItem)

在你的問題中的代碼看起來應該還是在列表項正確設置規定值,雖然可能有一些代碼以後(如在onItemAdded功能),這是運行到錯誤的假設或微妙來自不充分加載的列表項目的數據差異。