【问题标题】:How do I access A Subscription within a SubscriptionCollection without a loop in Javascript如何在没有 Javascript 循环的情况下访问 SubscriptionCollection 中的订阅
【发布时间】:2017-12-19 15:31:24
【问题描述】:

我有以下有效的代码:

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_0 的东西,因为在迁移中我认为它可能会改变。

对于任何信息不足,我提前道歉。

【问题讨论】:

    标签: javascript arrays rest sharepoint sharepoint-workflow


    【解决方案1】:

    SP.Workflow.WorkflowAssociation class(在您的示例中为workflowAssociations)派生自SP.ClientObjectCollection class,除了getEnumerator() method 还包含some additional methods 用于访问集合数据,例如:

    • 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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 2011-03-13
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多