2012-07-25 174 views
1

我在寫一個自定義的Jql函數來執行一個高級查詢,而這個查詢對於普通的Jql是不可能的。我需要找到所有問題與多個組件或(正好一個組件和一個給定的自定義字段不爲空)。如何在Jira插件中進行數據庫查詢?

我可以在我的插件中注入哪些Manager類,以便我可以發出SQL,Hibernate或其他類型的數據庫查詢?

目標是讓我的自定義函數返回匹配問題的列表,以便它可以在Jira的Jql搜索中使用。

回答

-1

嘗試檢查出來的JIRA API參考: http://docs.atlassian.com/jira/4.1/com/atlassian/jira/jql/builder/JqlClauseBuilder.htmlhttp://docs.atlassian.com/jira/4.1/com/atlassian/jira/jql/builder/ConditionBuilder.html

你總是可以創造你的插件類的方法,它看起來像這樣:

public class MyPlugin 
{ 
    JiraAuthenticationContext authenticationContext; 
    SearchProvider searchProvider; 
    public MyPlugin(JiraAuthenticationContext authenticationContext, SearchProvider searchProvider){ 
     this.authenticationContext = authenticationContext; 
     this.searchProvider = searchProvider; 
    } 

    public List<Issue> getIssues(CustomField your_cf) throws SearchException{ 
     User user = authenticationContext.getLoggedInUser(); 

     JqlClauseBuilder jqb = JqlQueryBuilder.newBuilder().where(); 
     jqb = jqb.not().componentIsEmpty(); 
     Query query = jqb.endWhere().buildQuery(); 

     List<Issue> issues = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter()).getIssues(); 

     List<Issue> result = new ArrayList<Issue>(); 
     for(Issue issue : issues){ 
       Collection<GenericValue> components = issue.getComponents(); 
       //component size already > 0 from query 
       if(components.size() > 1 || (issue.getCustomFieldValue(your_cf) != null)) 
         result.add(issue); 
     } 
     return result; 
    } 
} 
+0

沒有,我相信我的查詢這更復雜,並且不能用JQL表達(雖然我可能是錯的)。我在我的問題中添加了括號,以澄清問題所在。 如果可以使用Jql API表示,那麼我只需要在Jira中將其寫入JQL。相反,我想我可以編寫一個自定義函數插件來執行一些自定義SQL,但是我無法從插件訪問數據庫層。 – Tobia 2012-08-10 13:48:58

+0

問題是Jql允許表達「沒有組件」或「至少有一個組件」,但不是「完全是一個組件」,也不是「多於一個組件」,除非我錯了。 – Tobia 2012-08-10 13:53:23

+0

對不起,我的錯。我誤解了你的情況。因爲你我沒有找到JQL條件,所以我在插件類中找到了問題。 – 2012-08-16 11:44:52

相關問題