Usando getSelectedItems para obter um valor de campo em vez do ID
-
10-12-2019 - |
Pergunta
Eu tenho sido capaz de usar getSelectedItems()
sem problema para que eu possa realizar operações, mas da minha (espero incorreta) a compreensão, o único valor que é retornado é o tipo de item que está selecionado (objtype)?Eu não tenho certeza de como executar algo no getSelectedItems(ctx) para obter, por exemplo, o valor "Nome" (i.e., SamplePhoto.jpg).Eu estou pensando que eu precisar usar outro método para comparar os IDs para algo que tem todas as informações de campo para cada ficheiro e, em seguida, recuperar o nome de valores que têm Identificações correspondentes aqueles em getSelectedItems(ctx).id
editar:Fornecido respostas até agora não ajuda, pois parece que devolver, ou seja, preencher variáveis globais não é possível.
Solução
SP.ListOperation.Seleção.getSelectedItems() método retorna a lista de objetos que estão sendo selecionados.O objeto contém dois atributos, id
e fsObjType
, por isso não é SP.ListItem
objecto.
O exemplo a seguir demonstra como retornar SP.Coleção ListItem
Exemplo:
function getSelectedItems()
{
var dfd = $.Deferred(function () {
var context = SP.ClientContext.get_current();
var listId = SP.ListOperation.Selection.getSelectedList(); //get selected list Id
var selectedItemIds = SP.ListOperation.Selection.getSelectedItems(context); //get selected objects
var list = context.get_web().get_lists().getById(listId);
var listItems = [];
for (idx in selectedItemIds)
{
var item = list.getItemById(parseInt(selectedItemIds[idx].id));
listItems.push(item);
context.load(item);
}
context.executeQueryAsync(
function() {
dfd.resolve(listItems);
},
function (sender, args) {
dfd.reject(args.get_message());
}
);
});
return dfd.promise();
}
//Usage
getSelectedItems().then(function(items){
var fileNames = []; //save file names
for (var i =0 ; i < items.length;i++)
{
fileNames.push(items[i].get_item('FileRef'));
}
});
Outras dicas
Você precisa chamar load
e executeQueryAsync
sobre os itens retornados pela getSelectedItems
e o método de carga que você precisa passar o nome interno dos campos que você deseja recuperar.Veja o exemplo abaixo:
var selectedItems = SP.ListOperation.Selection.getSelectedItems(context);
for (var i = 0; i < selectedItems.length; i++) {
var itemId = selectedItems[i].id;
GetName(itemId);
}
function GetName(itemId) {
var clientContext = SP.ClientContext.get_current();
var currentList = clientContext.get_web().get_lists().getById(SP.ListOperation.Selection.getSelectedList());
this.singleItem = currentList.getItemById(itemId);
clientContext.load(this.singleItem, 'Name');
clientContext.executeQueryAsync(Function.createDelegate(this, this.OnSucceeded), Function.createDelegate(this, this.OnFailed));
}
function OnSucceeded() {
this.NameValue = this.singleItem.get_item('Name');
}
function OnFailed(sender, args) {
alert('Error occurred: ' + args.get_message());
}