2015-07-24 12 views
0

Я создаю скрипт для моего hubot, который должен распечатать все элементы столбца в документе Smartsheet. К сожалению, нельзя просто напечатать все элементы столбца, поскольку ячейки в основном хранятся в строках. Чтобы ссылаться на ячейку в API, нужно позвонить в https://api.smartsheet.com/2.0/sheets/[SHEET-ID]/rows/[ROW-ID]/columns/[COLUMN-ID]. Идентификаторы строк и столбцов - это не просто их размещение на листе, но они имеют уникальные многозначные идентификаторы.Как ссылаться на массив из запроса HTTP GET?

Мой план печати элементов столбца состоял в том, чтобы собрать все идентификаторы строк из данного документа в массиве rowNums; получите нужный идентификатор столбца (цель состоит в том, чтобы напечатать список имен, поэтому мы ищем столбец под названием «Имя») и храним его в colNum; то для каждого элемента rowNums сделайте запрос HTTP GET в ячейку с элементом из rowNums и colNum и сохраните это в массиве, который я бы распечатал для пользователя.

Последняя часть кода кажется прекрасной, но у меня возникают проблемы с просто ссылкой на элементы из массива «rows» из документа Smartsheet. У меня есть код ниже как в CoffeeScript (в котором должен быть скрипт), так и в JavaScript (скомпилирован с использованием «coffee -c», так что это немного грязно). Что я делаю не так?

CoffeeScript

robot.http(url) 
    .headers(Authorization: auth, Accept: 'application/json') 
    .get() (err, res, body) -> 
    data = JSON.parse(body) 
    if res.statusCode isnt 200 
     msg.send "An error occurred when processing your request: 
       #{res.statusCode}. The list of error codes can be found at 
       http://bit.ly/ss-errors. Talk to the nearest code nerd for 
       assistance." 
    else 
     # Populate 'rows' with all rowId's from default sheet. 
     rowNums = (row.id for row in data.rows) 
     # Parses 'columns' for column titled 'Name'. Stops when it finds it. 
     for column in data.columns 
     if column.title.toLowerCase() == "name" 
      colNum = column.id 
      break 
     else 
      return undefined 

JAVASCRIPT

robot.http(url).headers({ 
    Authorization: auth, 
    Accept: 'application/json' 
}).get()(function(err, res, body) { 
    var column, data, i, len, ref, row; 
    data = JSON.parse(body); 
    if (res.statusCode !== 200) { 
    return msg.send("An error occurred when processing your request: " + res.statusCode + ". The list of error codes can be found at http://bit.ly/ss-errors. Talk to the nearest code nerd for assistance."); 
    } else { 
    rowNums = (function() { 
     var i, len, ref, results; 
     ref = data.rows; 
     results = []; 
     for (i = 0, len = ref.length; i < len; i++) { 
     row = ref[i]; 
     results.push(row.id); 
     } 
     return results; 
    })(); 
    ref = data.columns; 
    for (i = 0, len = ref.length; i < len; i++) { 
     column = ref[i]; 
     if (column.title.toLowerCase() === "name") { 
     colNum = column.id; 
     break; 
     } else { 
     return void 0; 
     } 
    } 
    } 
}); 

Кроме того, как я избавиться от 'возвращается тщетным 0' строки из моего CoffeeScript? Он существует с или без строк «else> return undefined».

ответ

0

, когда я скомпилировать код с кофе -c test.coffee (без возврата еще не определено), я получаю это:

// Generated by CoffeeScript 1.9.3 
(function() { 
    robot.http(url).headers({ 
    Authorization: auth, 
    Accept: 'application/json' 
    }).get()(function(err, res, body) { 
    var colNum, column, data, i, len, ref, results, row, rowNums; 
    data = JSON.parse(body); 
    if (res.statusCode !== 200) { 
     return msg.send("An error occurred when processing your request: " + res.statusCode + ". The list of error codes can be found at http://bit.ly/ss-errors. Talk to the nearest code nerd for assistance 
    } else { 
     rowNums = (function() { 
     var i, len, ref, results; 
     ref = data.rows; 
     results = []; 
     for (i = 0, len = ref.length; i < len; i++) { 
      row = ref[i]; 
      results.push(row.id); 
     } 
     return results; 
     })(); 
     ref = data.columns; 
     results = []; 
     for (i = 0, len = ref.length; i < len; i++) { 
     column = ref[i]; 
     if (column.title.toLowerCase() === "name") { 
      colNum = column.id; 
      break; 
     } else { 
      results.push(void 0); 
     } 
     } 
     return results; 
    } 
    }); 

}).call(this); 
Смежные вопросы