Как я могу получить доступ к подписке в рамках коллекции SubscriptionCollection без цикла в Javascript

У меня есть следующий код, который работает:

ctx.load(workflowAssociations);

//below works but loops through all available workflows, it seems sub may contain the array that needs to be accessed

ctx.executeQueryAsync(function (sender, args) {

    var subsEnum = workflowAssociations.getEnumerator();

    while (subsEnum.moveNext()) {

        var sub = subsEnum.get_current();

        alert(sub);

        console.log('Web: ' + web.get_url() + ', Subscription: ' + 
          sub.get_name() + ', id: ' + sub.get_id());

        var initiationParams = {};
        workflowServicesManager.getWorkflowInstanceService().startWorkflowOnListItem(
          sub, items.getItemAtIndex(0).get_id(), initiationParams);

        ctx.executeQueryAsync(function (sender, args) {
            console.log('Workflow started.');
        }, errFunc);

    }

}, errFunc);


function errFunc(sender, args) {
alert("Error occured! " + args.get_message() + 
         '\r\nStack trace: ' + args.get_stackTrace());
}

Я пытаюсь упростить этот цикл и получить доступ только к одному объекту в коллекции без цикла while. Я пробовал следующее:

//var subsEnum = workflowAssociations.getEnumerator();
console.dir(subsEnum);
console.dir(workflowAssociations[2]);
console.log(subsEnum[2]);
var sub = subsEnum.get_current(0);
console.dir(sub);
console.dir(subsEnum);

Тем не менее, большинство из них не определены. Вот изображение того, на что это похоже, когда я исследую объект, используя умение смотреть выражение в chrome. Я не хочу использовать эту вещь за 2 $, потому что в миграции я предполагаю, что она может измениться.

Я заранее прошу прощения за отсутствие информации.

введите описание изображения здесь

1 ответ

SP.Workflow.WorkflowAssociation класс (workflowAssociations в вашем примере) происходит от SP.ClientObjectCollection класс, который в дополнение к getEnumerator() Метод содержит несколько дополнительных методов для доступа к данным сбора, таких как:

  • getItemAtIndex - получает элемент по указанному индексу SP.ClientObjectCollection учебный класс.
  • getData - превращает ClientObjectCollection объект в обычный массив JavaScript

Примеры

Перечислите коллекцию

var e = workflowAssociations.getEnumerator();
while(e.moveNext()){
    console.log(e.get_current().get_name()); //print Name of current WorkflowAssociation object     
}

Получить товар по указанному индексу

 var item = workflowAssociations.getItemAtIndex(0); //get first item
 console.log(item.get_name()); //print Name of WorkflowAssociation object

Преобразовать в массив

var items = workflowAssociations.get_data();
console.log(items[0].get_name()); //print Name of first WorkflowAssociation object 
Другие вопросы по тегам