2012-10-08 20 views
10

मैं PHP और जिरा रीस्ट एपीआई का उपयोग कर एक एप्लीकेशन लिख रहा हूं जिसे किसी विशेष परियोजना पर किसी व्यक्ति द्वारा बिताए गए घंटों के संचय के साथ एक विशेष अवधि के लिए रिपोर्ट तैयार करने की आवश्यकता होती है।जिरा रीस्ट एपीआई से कुछ समय के लिए सभी कार्य लॉग कैसे प्राप्त करें?

इसके लिए मुझे एक कॉल की आवश्यकता होगी जो इस तरह कुछ देगी।

उदाहरण के लिए: For the period 01/01/2012 - 31/01/2012 give me the worklogs for project X.

विधि मैं अब तक मिल गया है, आरंभ तिथि के बाद अद्यतन प्राप्त करने और फिर अवधि के द्वारा प्रत्येक अंक के लिए worklogs फिल्टर करने के लिए किया गया था।

क्या कोई बेहतर विकल्प है?

+4

यह एक शर्म की बात है Jira एपीआई के माध्यम से इस तरह के बुनियादी सुविधा का समर्थन नहीं करता। –

+0

मुझे अभी एहसास हुआ कि आपकी विधि काम नहीं करेगी और वास्तव में कोई व्यावहारिक समाधान नहीं है (इतिहास में सभी मुद्दों को पार करने के अलावा जो व्यवहार्य नहीं है)। समस्या यह है कि आपका समाधान केवल तभी काम करेगा जब आपका TO_DATE अब हो। आप अतीत की अवधि के लिए इस विधि का उपयोग नहीं कर सकते हैं क्योंकि आपके TO_DATE के बाद अद्यतन किए गए मुद्दों को अलंकृत नहीं माना जाएगा, उनके पास वर्कॉगॉग हो सकते हैं।एक और समस्या यह है कि जिरा अब से अलग तिथियों में काम करने का समय दर्ज करने की अनुमति देता है, दी गई अवधि में अपडेट किए गए फ़िल्टर को फ़िल्टर करने के लिए क्वेरी तब काम नहीं करेगी। –

उत्तर

3

आप करता है कि आप क्या, के लिए मैं तीन अन्य तुम्हारा के अलावा अन्य समाधान के बारे में सोच सकते पूछा है एक बाहर के बॉक्स समारोह नहीं मिलती है तो:

  1. Query the DB directly ताकि आप कर सकते थे एक प्रश्न का उपयोग कर कार्य लॉग प्राप्त करें। सुनिश्चित करें कि डीबी को सीधे डालने/हटाने/अपडेट न करें, लेकिन केवल इसे पूछने के लिए।
  2. डिस्क पर कहीं भी कार्य-लॉग लिखने वाली स्क्रिप्ट जोड़ने के लिए Jira Scripting Suite या Behaviours Plugin जैसे कुछ का उपयोग करें। फिर डिस्क से लिखित जानकारी पढ़ने के लिए और इसे उपयोगकर्ताओं को प्रदर्शित करने के लिए एक और ऐप का उपयोग करें।
  3. उपयोग Tempo plugin
+4

फ़िल्टर करें, ध्यान दें कि जिरा एपीआई का उपयोग करके कार्यप्रवाहों के लिए सीधे पूछताछ करने का कोई तरीका नहीं है। बहुत निराशाजनक। –

0

दृष्टिकोण मैं व्यक्तिगत रूप से एक आवेदन पत्र का एक ही प्रकार के लिए उपयोग किया है इस तरह आप होगा एक साप्ताहिक आधार पर JIRA से सभी रिकॉर्ड और फिर डेटाबेस वे में संग्रहित कर रहे हैं से रिपोर्ट उत्पन्न करने की है।

यदि एक प्रमुख जेआईआरए दुर्घटना होती है तो डेटा भी उपलब्ध है। हमारी कंपनी एक ऑनडेमांड उदाहरण के साथ ऐसी समस्या से गुज़र गई जब एक RAID ऐरे जला दिया गया और अधिकांश डेटा अप्राप्य था।

+0

उपयोग किया जा रहा जिरा एक मेजबान है। तो मेरी दिलचस्पी है कि रिपोर्टिंग के लिए केवल एक विशेष समय के लिए वर्कलॉग डेटा प्राप्त करें और उन्हें मुद्दों से पूछताछ न करें और – 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

एमएस-एचटीए का उपयोग करके बहुत अधिक विचार था ... आपने मुझे बहुत सारे दस्तावेज पढ़ने को बचाया। –

+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 ऑब्जेक्ट लौटे टिकट की एक सूची हो जाएगा, और एक टिकट काम आइटम का संग्रह संलग्न (संभावित शून्य लम्बाई) होगा।

जावास्क्रिप्ट बजाय पीएचपी, लेकिन एक ही विचार रखती है:

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

संबंधित मुद्दे