Uso de GetSelectectems para obtener un valor de campo en lugar de ID
-
10-12-2019 - |
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.
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());
}