2012-06-26 2 views
0

J'ai besoin d'un script qui copie tous les éléments de la liste sélectionnée dans une autre liste (personnalisée). J'ai trouvé belle solution pour les documents:Copier les éléments de liste sélectionnés dans une autre liste avec le script ECMA

var context = SP.ClientContext.get_current(); 
var web = context.get_web(); 
context.load(web); 

var _destinationlib = web.get_lists().getByTitle('DestinationLibrary'); 
context.load(_destinationlib); 
var notifyId; 
var currentlibid = SP.ListOperation.Selection.getSelectedList(); 

var currentLib = web.get_lists().getById(currentlibid); 

var selectedItems = SP.ListOperation.Selection.getSelectedItems(context); 
var count = CountDictionary(selectedItems); 

for(var i in selectedItems) 
{ 
alert('Now copying ' + i); 
var currentItem = currentLib.getItemById(selectedItems[i].id); 
context.load(currentItem); 

var File = currentItem.get_file(); 
context.load(File); 

//Excecuting executeQueryAsync to get the loaded values 
context.executeQueryAsync 
(
function (sender, args) { 
if(File != null) { 

var _destinationlibUrl = web.get_serverRelativeUrl() + _destinationlib.get_title() + '/' + File.get_name(); 

File.copyTo(_destinationlibUrl, true); 
notifyId = SP.UI.Notify.addNotification('Moving file…' + File.get_serverRelativeUrl() + 'to' + _destinationlibUrl, true); 

//Excecuting executeQueryAsync to copy the file 
context.executeQueryAsync(
function (sender, args) { 
SP.UI.Notify.removeNotification(notifyId); 

SP.UI.Notify.addNotification('File copied successfully', false); 
}, 
function (sender, args) { 
SP.UI.Notify.addNotification('Error copying file', false); 
SP.UI.Notify.removeNotification(notifyId); 
showError(args.get_message()); 
}); 
} 
}, 
function (sender, args) { 
alert('Error occured' + args.get_message()); 
} 
); 
} 

Je ne sais pas ce que je dois changer pour le faire fonctionner pour les éléments de la liste normale. J'ai essayé d'échanger

var File = currentItem.get_file(); 

context.load(File); 

avec

var title = currentItem.get_Title(); 
context.load(title); 

var number = currentItem.get_item('number'); 
context.load(number); 

mais il dosnt travail. Ce serait génial si quelqu'un pouvait me donner un indice de ce que je devais faire.

beaucoup thx

Fabulus

Répondre

1

On dirait que vous avez pris le code ci-dessus de here.

Essayez d'être attentif. Ce code copie les fichiers sélectionnés (pas les éléments de la liste!) Dans une autre bibliothèque de documents!

Pour mieux répondre à vos besoins, essayez de coder votre propre solution. Voir SharePoint JavaScript Class Library pour plus de détails. Vous pouvez avoir deux architectures possibles:

  1. Tout faire à partir de JavaScript. Et le premier votre étape sera addItem method of SP.List.
  2. Effectuez le traitement de la sélection sur le client en JavaScript et appelez votre composant côté serveur personnalisé (peut être une page d'application) pour la copie d'éléments (création de copies dans la nouvelle liste d'éléments existants de la liste initiale). Voir this par exemple.

Soyez également prudent avec context.load. Il est recommandé d'écrire tout le code suivant dans context.executeQueryAsync. Utilisez Firebug dans FF et les outils de développement dans Chrome pour déboguer votre code et trouver ce qui ne va pas.

Questions connexes