我正在写使用PHP和需要产生的时间与一个人在一个特定的项目花了几个小时的积累特定期间的报告中吉拉REST API的应用程序。
为此,我需要一个电话,这将给这样的事情。
例如: For the period 01/01/2012 - 31/01/2012 give me the worklogs for project X.
我迄今发现的方法,是让开始日期后更新的问题,并在期间再次筛选每个问题的worklogs。
有没有更好的选择?
我正在写使用PHP和需要产生的时间与一个人在一个特定的项目花了几个小时的积累特定期间的报告中吉拉REST API的应用程序。
为此,我需要一个电话,这将给这样的事情。
例如: For the period 01/01/2012 - 31/01/2012 give me the worklogs for project X.
我迄今发现的方法,是让开始日期后更新的问题,并在期间再次筛选每个问题的worklogs。
有没有更好的选择?
如果你不能找到一个彻头彻尾的现成功能,做你问什么,我能想到的比你的其他三个其他的解决方案:
正如许多人所说,有没有直接的方法。 但是,如果有效地缩小搜索空间,它不是那么糟糕。 下面的PHP代码运行在我的设置相当快的,但当然,你的里程可能会有所不同:
<?php
$server = 'jira.myserver.com';
$fromDate = '2012-01-01';
$toDate = '2012-01-31';
$project = 'X';
$assignee = 'bob';
$username = 'my_name';
$password = 'my_password';
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
# Give me up to 1000 search results with the Key, where
# assignee = $assignee AND project = $project
# AND created < $toDate AND updated > $fromDate
# AND timespent > 0
curl_setopt($curl, CURLOPT_URL,
"https://$server/rest/api/2/search?startIndex=0&jql=".
"assignee+%3D+$assignee+and+project+%3D+$project+".
"and+created+%3C+$toDate+and+updated+%3E+$fromDate+".
"and+timespent+%3E+0&fields=key&maxResults=1000");
$issues = json_decode(curl_exec($curl), true);
foreach ($issues['issues'] as $issue) {
$key = $issue['key'];
# for each issue in result, give me the full worklog for that issue
curl_setopt($curl, CURLOPT_URL,
"https://$server/rest/api/2/issue/$key/worklog");
$worklog = json_decode(curl_exec($curl), true);
foreach ($worklog['worklogs'] as $entry) {
$shortDate = substr($entry['started'], 0, 10);
# keep a worklog entry on $key item,
# iff within the search time period
if ($shortDate >= $fromDate && $shortDate <= $toDate)
$periodLog[$key][] = $entry;
}
}
# Show Result:
# echo json_encode($periodLog);
# var_dump($periodLog);
?>
值得指出的是,吉拉查询有一个expand
选项,允许你指定你想连接到你的搜索哪些字段:
// Javascript
$jql = 'project = MyProject and updated > 2016-02-01 and updated < 2016-03-01';
// note this definition
$fields = 'key,summary,worklog';
$query = "https://{server}/rest/api/2/search?maxResults=100&fields={fields}&jql={jql}"
.replace(/{server}/g,$server)
.replace(/{jql}/g,encodeURIComponent($jql))
.replace(/{fields}/g,$fields)
;
返回的JSON对象返回,将机票的列表,以及每张机票将有工作项目的集合连接(可能为零长度)。
使用Javascript而非PHP,但同样的想法认为:
function getJql(params){
$.ajax({
url: getJiraUrl()
+ "/rest/api/2/search?startIndex=0&fields=worklog,assignee,status,key,summary&maxResults=1000&jql="
+ encodeURI(params.jql),
success: function (resp) {
resp.issues.forEach(function(issue) {
issue.fields.worklog.worklogs.forEach(function(work){
alert(JSON.stringify(work));
db.AddWork(work);
});
});
}
});
}
张贴在GitLab: https://gitlab.com/jefferey-cave/ProductivityBlockers/blob/5c4cb33276e8403443d4d766fc94ab2f92292da6/plugin-data-jira.js
我个人使用同一种应用程序的方法是获得每周从JIRA的所有记录,然后生成他们存储在数据库中的报表。
这样,您也将有发生重大JIRA崩溃可用数据。 公司通过与OnDemand实例这样的问题去当一个RAID阵列烧毁,大部分数据是无法恢复的。