使用ECMAScript将选定的List-Items复制到另一个列表

时间:2012-06-26 10:45:58

标签: javascript sharepoint sharepoint-2010

我需要一个脚本将所有选定的列表项复制到另一个(自定义)列表。我找到了很好的文档解决方案:

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

我不知道我必须改变什么才能让它适用于普通列表项。我试图交换

var File = currentItem.get_file();

context.load(File);

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

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

但它很有用。如果有人能给我一个暗示我必须做的事情,那将是很棒的。

很多人

Fabulus

1 个答案:

答案 0 :(得分:1)

看起来您从here获取了上面的代码。

尽量注意。此代码将选定的文件(不是列表项!)复制到另一个文档库!

为了您的需求,请尝试编写自己的解决方案。有关详细信息,请参阅SharePoint JavaScript Class Library。您可以拥有两种可能的架构:

  1. 使用JavaScript完成所有工作。您的第一步将是addItem method of SP.List
  2. 在JavaScript中对客户端进行选择处理,并为复制项目调用自定义服务器端组件(可能是应用程序页面)(从初始列表中创建已存在项目的新列表中的副本)。例如,请参阅this
  3. 还要注意context.load。建议在context.executeQueryAsync中编写所有下一个代码。在FF中使用Firebug,在Chrome中使用开发人员工具来调试代码并查找错误。