2015-12-03 2 views
0

Мне было предложено посмотреть на создание отчета, который будет вытаскивать данные о времени для списка проектов. Дайте имя/id проекта, получите сумму всего времени, потраченного на него, и сумму часов с прошлой недели.Basecamp API - время получения

Но я не вижу, где в новом API ничего, что даст мне записи времени, по крайней мере, процесс поиска не содержится в документации Basecamp.

Я смотрел на эту страницу, которая описывает API:

https://github.com/basecamp/bcx-api

ответ

-1

То, что мы видели до сих пор не существует простой способ, чтобы получить фактическое время, затраченное на любой проект. Вы можете сделать что-то простое, например, со дня создания проекта до его закрытия/удаления.

Способы ставок, которые мы видим, делают это, глядя на каждый список дел, а затем на-dos под ним. Узнайте о накопленном времени, затрачиваемом на каждый занятие в каждом списке дел для этого проекта, и это будет фактическое (максимально возможное точное время) время, потраченное на проект.

Вы можете использовать API, чтобы получить эту информацию о деталях, и это сделает трюк.

Если у кого-то есть лучший вариант, дайте нам знать также :) Мы делаем это на сегодняшний день.

+0

Не знаю, почему вы упали. Ну что ж. См. Мой ответ выше, есть способ получить информацию. – CargoMeister

0

Оказывается, что вы можете получить от своего старого API:

https://mystuff.basecamphq.com/projects/#project_id#/time_entries.xml

Это даст вам время записи в формате XML, который является боль. Он также разбивает страницы на результаты. В заголовке, что вы получите обратно два поля, которые говорят вам, сколько записей есть в общей сложности, и сколько страниц:

var pageCount = headers["X-Pages"]; 
var recCount = headers["X-Records"]; 

Вы можете обрабатывать записи, которые возвращаются следующим образом:

function processRecords(response) 
{ 
    var respObj = 
    { 
     totalHours: 0, 
     thisWeekHours: 0 
    } 

    var doc = null; 

    if (response.getContentText) 
    { 
     doc = Xml.parse(response.getContentText(), true); 
    } 
    else if (response.getElements) 
    { 
     doc = response; 
    } 
    else 
    { 
     var name = typeof response; 
     if (response.constructor) name = response.constructor.name; 
     throw new Exception("Incompatible type: " + name); 
    } 

    var root = doc.getElement(); 

    var records = root.getElements("time-entry"); 

    if (records.length > 0) 
    { 
     for (i = 0;i < records.length; i++) 
     { 
      var hours = Number(records[i].hours.getText()); 
      var recordDate = records[i].date.getText(); 
      if (recordDate >= previousSunday && recordDate <= previousSaturday) 
      { 
       respObj.thisWeekHours = respObj.thisWeekHours + hours; 
      } 

      respObj.totalHours = respObj.totalHours + hours; 
     } 
    } 

    return respObj; 
}