Pregunta

He podido usar getSelectedItems() sin problemas para poder realizar operaciones, pero de mi comprensión (con suerte incorrecta), el único otro valor que se devuelve es el tipo de elemento que está seleccionado (objtype)? No estoy seguro de cómo realizar algo en GetSelectectemems (CTX) para recuperar, por ejemplo, el valor en "Nombre" (es decir, SamplePhoto.jpg).Estoy pensando que necesito usar otro método para comparar las IDS a algo que tiene toda la información del campo para cada archivo, y luego recuperar los valores de Nombre que tienen IDS que coinciden con los de GetSelectectemems (CTX) .ID

Editar: Las respuestas suministradas hasta ahora no ayudan, ya que parece que no es posible que la devolución o la población de variables globales no sea posible.

¿Fue útil?

Solución

SP.ListOperation.Selection.getSelectedItems() method returns the list of objects that being selected. The object contains two attributes, id and fsObjType, so it is not SP.ListItem object.

The following example demonstrates how to return selected SP.ListItem collection

Example:

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


});  

Otros consejos

You need to call load and executeQueryAsync on the the items returned by getSelectedItems and in the load method you need to pass the internal name of the fields which you want to retrieve. See example below:

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 bajo: CC-BY-SA con atribución
scroll top