¿Cómo extraer los datos de la hoja de tiempo utilizando la API de Rally WS?
Pregunta
Quiero todas las entradas de tiempo entre dos fechas específicas, independientemente de la hora en que se ingresaron.Debo consultar los elementos de entrada de tiempo, luego obtenga el valor _REF para los valores en solicitudes separadas.
¿Hay una forma más eficiente de llegar a las horas? Tal vez un ejemplo de código?
Solución
Si elige comenzar con un TimeEntryIdem y Traverse a TimeEntryValues, o al revés, depende del problema que está intentando resolver.Si, por ejemplo, le gustaría agregar tiempo, puede elegir el artículo -> Dirección de valores.
Aquí hay dos ejemplos escritos con Rally Resto Tallit para el nodo :
var rally = require('rally'),
queryUtils = rally.util.query,
restApi = rally({
user: 'user@co.com',
pass: 'secret',
apiVersion: 'v2.0',
server: 'https://rally1.rallydev.com',
requestOptions: {
headers: {
'X-RallyIntegrationName': 'Timesheet data: from TEItem to TEValue',
'X-RallyIntegrationVendor': 'Rally',
'X-RallyIntegrationVersion': '1.0'
},
}
});
function getTimeEntryValues(result) {
for(var i = 0, length = result.Results.length; i < length; i++){
console.log(result.Results[i].Values._ref);
getValue(result.Results[i].Values._ref);
}
}
function getValue(ref){
restApi.query({
ref: ref,
fetch: ['Hours', 'DateVal']
},
function(error, result){
if(error) {
onError(error);
} else {
console.log('Success!', result)
}
});
}
function getTimeEntryItems(callback) {
var query = queryUtils.where('WeekStartDate', '>=','2014-01-01T00:00:00.000Z' );
query = query.and('WeekStartDate', '<=','2014-02-01T00:00:00.000Z' );
restApi.query({
type: 'TimeEntryItem',
start: 1,
limit: Infinity,
fetch: ['Values', 'TaskDisplayString', 'WorkProductDisplayString'],
scope: {
workspace: '/workspace/12352608129',
up: false,
down: false
},
query: query
}, function(error, result) {
if(error) {
onError(error);
} else {
callback(result);
}
});
}
function onSuccess(result) {
console.log('Success!', result);
}
function onError(errors) {
console.log('Failure!', errors);
}
getTimeEntryItems(getTimeEntryValues);
Aquí hay un segundo ejemplo que consulta en TimeEntryValues primero y luego consultas en TimeEntryItems:
var rally = require('rally'),
queryUtils = rally.util.query,
restApi = rally({
user: 'user@co.com',
pass: 'secret',
apiVersion: 'v2.0',
server: 'https://rally1.rallydev.com',
requestOptions: {
headers: {
'X-RallyIntegrationName': 'Timesheet data node.js program',
'X-RallyIntegrationVendor': 'Rally',
'X-RallyIntegrationVersion': '1.0'
},
}
});
function getTimeEntryValues() {
var query = queryUtils.where('DateVal', '>=','2014-01-08T00:00:00.000Z' );
query = query.and('DateVal', '<=','2014-01-10T00:00:00.000Z' );
return restApi.query({
type: 'TimeEntryValues',
start: 1,
limit: Infinity,
fetch: ['TimeEntryItem', 'Hours'],
scope: {
workspace: '/workspace/12352608129',
up: false,
down: false
},
query: query
});
}
function getTimeEntryItems(result) {
var timeEntryItems = [];
for(var i = 0, length = result.Results.length; i < length; i++){
console.log(result.Results[i].TimeEntryItem._ref.split("/").pop());
timeEntryItems.push(result.Results[i].TimeEntryItem._ref.split("/").pop()); //get ObjectID from _ref, since _ref is not queriable
}
console.log('object ids of time entry items: ', timeEntryItems);
var query = queryUtils.where('ObjectID', '=',timeEntryItems[0]);
for (var i = 1, length = timeEntryItems.length; i < length; i++) {
query = query.or('ObjectID', '=',timeEntryItems[i]);
}
return restApi.query({
type: 'TimeEntryItem',
fetch: ['TaskDisplayString', 'WorkProductDisplayString', 'WeekStartDate'],
query: query,
});
}
function onSuccess(result) {
console.log('Success!', result);
}
function onError(errors) {
console.log('Failure!', errors);
}
getTimeEntryValues()
.then(getTimeEntryItems)
.then(onSuccess)
.fail(onError);