2013-08-27 58 views
0

我想複製選定的列表項目。我的代碼只在選擇一個項目時起作用,但在更多時失敗。調試代碼我發現在調用成功回調函數之前,它首先遍歷所有選定的項目。同樣在成功回調中,currItem並不總是填充項目數據。在SharePoint列表視圖中處理多個SharePoint項目列表

我怎樣才能一個接一個地處理選定的項目?

function copySelected(){ 
if($("#copyAllButton").hasClass('ms-cui-disabled')){ 
    return; 
} 
var cc = null; 
var web = null; 
copyCounter = 0; 
failedCounter = 0; 
cc = new SP.ClientContext.get_current(); 
web = cc.get_web(); 
var currItem = null; 
notifyId = SP.UI.Notify.addNotification(duplicatingItemsNotification, true); 
var selectedItems; 
currList = web.get_lists().getById(SP.ListOperation.Selection.getSelectedList()); 
selectedItems = SP.ListOperation.Selection.getSelectedItems(); 
if(selectedItems.length > 0){ 
    for(var i in selectedItems){ 
     //var currItemID = selectedItems[i].id; 
     currItem = currList.getItemById(selectedItems[i].id); 
     cc.load(currItem); 
     cc.executeQueryAsync(function(sender, args){ 
      var itemCreateInfo = new SP.ListItemCreationInformation(); 
      var aListItem = currList.addItem(itemCreateInfo); 
       aListItem.set_item('Title', currItem.get_item('Title')); 
       aListItem.set_item('Customer', currItem.get_item('Customer')); 
       aListItem.set_item('Description', currItem.get_item('Description')); 
       aListItem.set_item('Source', currItem.get_item('Source')); 
       aListItem.set_item('field2', currItem.get_item('field2')); 
       aListItem.set_item('field3', currItem.get_item('field3')); 
       aListItem.set_item('Workloadtype', currItem.get_item('Workloadtype')); 
       aListItem.set_item('Tickettype', currItem.get_item('Tickettype')); 
       aListItem.set_item('Customergroup', currEngineer.group); 
       aListItem.set_item('Allocation', currEngineer.allocation); 
       aListItem.set_item('SubCap', currItem.get_item('SubCap')); 
       aListItem.set_item('Engineer', currEngineer.fullName); 
       aListItem.update(); 
       cc.load(aListItem); 
       cc.executeQueryAsync(function(){ 
        copyCounter ++; 
       },function(){ 
        failedCounter ++; 
       }); 
     }, Function.createDelegate(this,this.getItemFailed)); 
    } 
    notifyMe(); 
} 

}

回答

1

在我發現了該決議同時(這是很好的反思的問題,這個問題)。

我用查詢填充所需項目的數組然後處理數組。

var allSelectedItems; 

function copySelected(){ 
if($("#copyAllButton").hasClass('ms-cui-disabled')){ 
    return; 
} 
var cc = null; 
var web = null; 
copyCounter = 0; 
failedCounter = 0; 
cc = new SP.ClientContext.get_current(); 
web = cc.get_web(); 
//var currItem = null; 
notifyId = SP.UI.Notify.addNotification(duplicatingItemsNotification, true); 
var selectedItems; 
currList = web.get_lists().getById(SP.ListOperation.Selection.getSelectedList()); 
selectedItems = SP.ListOperation.Selection.getSelectedItems(); 
if(selectedItems.length > 0){ 
    allSelectedItems = new Array(selectedItems.length); 
    for(var i in selectedItems){ 
     allSelectedItems[i] = currList.getItemById(selectedItems[i].id); 
     cc.load(allSelectedItems[i]); 
    } 
    cc.executeQueryAsync(Function.createDelegate(this, this.getItemSucceded), Function.createDelegate(this, this.getItemFailed)); 
    notifyMe(); 
} 

}