docs: function(args, connectionInfo, processPagedResults) {
    // args.consignmentIds.value MUST already be set
    args.page = {value: 1};
    args.pageSize = {value: 200};
    args.consignmentIdIndex = {value: 0};
    args.consignmentId = {value: args.consignmentIds.value[args.consignmentIdIndex.value]};
    args.getArray = function(){
      return this.consignmentIds.value;
    };
    args.getArrayIndex = function(){
      return this.consignmentIdIndex.value;
    };
  
    // iterate serially through a promise chain for all args.consignmentIds.value
    return utils.processPromisesSerially(
      args.consignmentIds.value,
      args.consignmentIdIndex.value,
      args,
      function mergeStrategy(newData, previousData){
        log.debug('inside mergeStrategy()');
        //log.silly('newData ', newData);
        //log.silly('previousData ', previousData);
        if (previousData && previousData.length>0) {
          if (newData.length>0) {
            log.debug('previousData.length: ', previousData.length);
            newData = newData.concat(previousData);
            log.debug('combinedData.length: ', newData.length);
          }
          else {
            newData = previousData;
          }
        }
        //log.silly('finalData ', newData);
        log.debug('finalData.length ', newData.length);
        return Promise.resolve(newData); // why do we need a promise?
      },
      function setupNext(updateArgs){
        updateArgs.consignmentIdIndex.value = updateArgs.consignmentIdIndex.value + 1;
        if (updateArgs.consignmentIdIndex.value < updateArgs.consignmentIds.value.length) {
          updateArgs.consignmentId.value = updateArgs.consignmentIds.value[updateArgs.consignmentIdIndex.value];
          log.debug('next is consignmentId: ' + updateArgs.consignmentId.value);
        }
        else {
          updateArgs.consignmentId.value = null;
          log.debug('finished iterating through all the consignmentIds');
        }
        return updateArgs;
      },
      function executeNext(updatedArgs){
        log.debug('executing for consignmentId: ' + updatedArgs.consignmentId.value);
        //log.silly('updatedArgs: ', updatedArgs);
        return fetchAllProductsByConsignment(updatedArgs, connectionInfo, processPagedResults);
      }
    );
  }