2012-10-08 14 views
10

Belirli bir proje için bir kişi tarafından harcanan saatlerin birikimi ile belirli bir süre için rapor üretmek için gerekli olan PHP ve Jira REST API'sini kullanarak bir uygulama yazıyorum.Jira REST API'sından tüm çalışma günlüklerini nasıl alabilirsiniz?

Bunun için böyle bir şey verecek bir araca ihtiyacım olacak.

örn:, başlangıç ​​tarihinden sonra güncellenmiş sorunları almak ve yine döneme göre her bir sayının worklogs filtrelemek için For the period 01/01/2012 - 31/01/2012 give me the worklogs for project X.

Ben bugüne kadar bulunmuş yöntem oldu.

Daha iyi bir alternatif var mı?

+4

O var JIRA API üzerinden bu tür temel özelliği desteklemeyen bir utanç. –

+0

Ben sadece sizin yönteminizin işe yaramayacağını fark ettim ve gerçekte uygulanabilir bir çözüm olmadığı görülüyor (tarihte TÜMÜ'nün yaşayamayacağı konulardan başka bir şey değil). Sorun, çözümünüzün yalnızca TO_DATE değeriniz şimdi olduğunda çalışacak olmasıdır. Bu yöntemi, geçmişte, TO_DATE değeriniz iş günlüğüne sahip olabileceğinden emin olmayacak şekilde güncellenen sorunlar olarak kullanamazsınız.Başka bir sorun ise, Jira'nın çalışma zamanını ŞİMDİ'den farklı tarihlere girmesine izin vermesi, verilen süre içinde güncellenen filtre görevlerinin sorgulanmaması o zaman işe yaramayacaktır. –

cevap

3

ben seninkinden daha başka üç diğer çözümlerin düşünebiliriz için Sorduğunuz yapar o bir out-of-the-box işlevini bulamazsa:

  1. Query the DB directly böylece yaparsın Bir sorgu kullanarak iş günlüklerini alın. DB'yi doğrudan eklediğinizde/sildiğinizde/güncellediğinizden emin olun, sadece sorgulamak için.
  2. İş kayıtlarını diskte bir yere yazacak komut dosyaları eklemek için Jira Scripting Suite veya Behaviours Plugin gibi bir şey kullanın. Ardından, yazılı bilgileri diskten okumak ve kullanıcılara göstermek için başka bir uygulama kullanın.
  3. Kullanım söylediler Tempo plugin
+4

Jira API'yi kullanarak iş akışlarını doğrudan sorgulamanın bir yolu yoktur. Çok hayal kırıklığı. –

0

Ben şahsen bir uygulamanın aynı tür kullandım yaklaşım haftalık olarak JIRA TÜM kayıtları, sonrada gelecekteki depolanırlar veritabanından raporları üretmektir.

olacak Bu şekilde Ayrıca, büyük bir JIRA çökmesi meydana gelirse veriler de kullanılabilir. RAID Dizisi yandığında ve verilerin çoğunun kurtarılamadığı durumlarda şirketimiz OnDemand örneğinde böyle bir sorun yaşadı.

+0

Kullanılmakta olan Jira barındırılan bir tanesidir. Benim ilgi alanım, yalnızca raporlama için belirli bir süre için iş dosyası verilerinin alınması ve sorunların filtrelenmesi ve filtrelenmesi gerekmemesidir. – Himeshi

3

Birçok, doğrudan bir yolu yoktur. Ancak, arama alanını verimli bir şekilde daraltırsanız, o kadar da kötü değildir. Aşağıdaki PHP kodu benim kurulum oldukça hızlı çalışır, ama tabii ki, kilometre değişebilir:

<?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-HTA'ları kullanarak hemen hemen aynı düşünceye sahip olsaydınız ... bana çok fazla doküman okumayı kaydettiniz. –

+1

Bu komut dosyasının bir sorunu, kullanıcının üzerinde çalıştığı bazı sorunların zaten başka kullanıcılara yeniden atanmış olabileceğidir ve bu nedenle sonuca dahil edilmeyecektir. – Sebastian

2

O JIRA sorguları size bağlı istediğiniz hangi alanların belirtmesine olanak sağlayan bir expand seçeneğine sahip olduğunu işaret değer arama:

// 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) 
    ; 

biletlerini liste olacak döndürülen dönen JSON nesnesi ve her bilet çalışma öğeleri bir koleksiyon (potansiyel olarak sıfır uzunluk) bağlı olacaktır.

JavaScript ziyade PHP, ama aynı fikri tutar:

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 yayınlanan: https://gitlab.com/jefferey-cave/ProductivityBlockers/blob/5c4cb33276e8403443d4d766fc94ab2f92292da6/plugin-data-jira.js

İlgili konular