2012-10-08 81 views
10

PHPとJira REST APIを使用してアプリケーションを作成しています.Jira REST APIは、特定のプロジェクトで人が過ごした時間を積算して特定の期間レポートを生成する必要があります。Jira REST APIから一定期間、すべての作業ログを取得する方法は?

このためには、このようなことをする必要があります。

例えば:、開始日後の更新の問題を取得し、再び期間によって、各問題の作業ログをフィルタリングするFor the period 01/01/2012 - 31/01/2012 give me the worklogs for project X.

私がこれまでに見つかった方法でした。

もっと良い選択肢はありますか?

+4

それだJIRAはAPIを介して、このような基本的な機能をサポートしていません恥。 –

+0

私はちょうどあなたの方法は動作しませんが、実際に実行可能な解決策(実行可能ではない歴史のすべての問題を横断から離れているようです)を実現しました。問題は、あなたのソリューションがあなたのTO_DATEになったときにのみ機能するということです。過去の期間にこのメソッドを使用することはできません。なぜなら、TO_DATE後に更新された問題は、ワークログを持つ可能性があるにもかかわらずカウントされないからです。もう1つの問題は、Jiraが現在と異なる日付に作業時間を入力できることです。指定した期間に更新されたタスクをフィルタするクエリーは機能しません。 –

答えて

3

あなたはあなたが尋ねてきたもの、私はあなた以外の他の三つの解決策を考えることができない、すぐに使える機能が見つからない場合は、次の

  1. Query the DB directlyので、あなたは可能性があり1つのクエリを使用して作業ログを取得します。 DBを直接挿入/削除/更新しないでください。ただし、照会するためにのみ使用してください。
  2. ディスクのどこかに作業ログを書き込むスクリプトを追加するには、Jira Scripting SuiteまたはBehaviours Pluginのようなものを使用します。次に、別のアプリを使用してディスクから書き込まれた情報を読み取り、ユーザーに表示します。
  3. Tempo plugin
+4

Jira APIを使用してワークログを直接クエリする方法はないことに注意してください。期待はずれの。 –

0

私は個人的にアプリケーションの同じ種類のために使用されてきたアプローチは、週ごとにJIRAからすべてのレコードを取得し、それらが格納されているデータベースからレポートを生成することである。

必要になります。この方法主要なJIRAクラッシュが発生した場合にもデータを利用できます。私たちの会社は、RAIDアレイが焼損し、ほとんどのデータが回復できなかったときに、OnDemandインスタンスでこのような問題を抱えていました。

+0

使用されているJiraはホストされているJiraです。ですから、特定の時間だけワークログデータを取得し、問題やフィルタでクエリを実行する必要はありません。 – Himeshi

3

として多くを使用して直接的な方法はありません、と述べています。ただし、検索スペースを効率的に絞り込むと、それほど悪くはありません。次の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); 
?> 
+0

MS-HTAsを使って同じアイデアを出していただけで、私は多くのドキュメントを読んでくれました。 –

+1

このスクリプトの1つの問題は、ユーザーが作業していた問題の一部が既に他のユーザーに割り当てられている可能性があり、その結果に含まれないことです。 – Sebastian

2

をのJIRAクエリーは、あなたがに接続するフィールドを指定することができます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

関連する問題