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.

Foi útil?

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());
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top