Verwenden von getSelectedItems, um einen Feldwert anstelle einer ID abzurufen
-
10-12-2019 - |
Frage
Ich konnte verwenden getSelectedItems()
ohne Probleme, damit ich Vorgänge ausführen kann, aber nach meinem (hoffentlich falschen) Verständnis ist der einzige andere Wert, der zurückgegeben wird, der Typ des ausgewählten Elements (objtype)?Ich bin mir nicht sicher, wie ich etwas mit getSelectedItems(ctx) ausführen soll, um beispielsweise den Wert in „Name“ (z. B. SamplePhoto.jpg) abzurufen.Ich denke, ich muss eine andere Methode verwenden, um die IDs mit etwas zu vergleichen, das alle Feldinformationen für jede Datei enthält, und dann die Namenswerte abzurufen, deren IDs mit denen in getSelectedItems(ctx).id übereinstimmen
bearbeiten:Die bisher bereitgestellten Antworten helfen nicht weiter, da es den Anschein hat, als sei die Rückgabe oder das Auffüllen globaler Variablen nicht möglich.
Lösung
SP.ListOperation.Selection.getSelectedItems()-Methode Gibt die Liste der ausgewählten Objekte zurück.Das Objekt enthält zwei Attribute: id
Und fsObjType
, also ist es nicht SP.ListItem
Objekt.
Das folgende Beispiel zeigt, wie eine ausgewählte SP.ListItem-Sammlung zurückgegeben wird
Beispiel:
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'));
}
});
Andere Tipps
Sie müssen anrufen load
Und executeQueryAsync
auf die von Ihnen zurückgegebenen Artikel getSelectedItems
und in der Lademethode müssen Sie den internen Namen der Felder übergeben, die Sie abrufen möchten.Siehe Beispiel unten:
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());
}