如何获取超过 50 个 Jira 问题?
How to fetch more than 50 Jira issues?
我正在尝试使用 API 从 Jirà 获取所有任务。
我找到了 working code:
public class CustomJiraRestClient {
private static final String JIRA_URL = "http://jira-dev:8080";
private static final String JIRA_ADMIN_USERNAME = "admin";
private static final String JIRA_ADMIN_PASSWORD = "admin";
public static void main(String[] args) throws Exception {
// Construct the JRJC client
System.out.println(String.format("Logging in to %s with username '%s' and password '%s'", JIRA_URL, JIRA_ADMIN_USERNAME, JIRA_ADMIN_PASSWORD));
JiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
URI uri = new URI(JIRA_URL);
JiraRestClient client = factory.createWithBasicHttpAuthentication(uri, JIRA_ADMIN_USERNAME, JIRA_ADMIN_PASSWORD);
// Invoke the JRJC Client
Promise<User> promise = client.getUserClient().getUser("admin");
User user = promise.claim();
Promise<SearchResult> searchJqlPromise = client.getSearchClient().searchJql("project = MYPURRJECT AND status in (Closed, Completed, Resolved) ORDER BY assignee, resolutiondate");
for (Issue issue : searchJqlPromise.claim().getIssues()) {
System.out.println(issue.getSummary());
}
// Done
System.out.println("Example complete. Now exiting.");
System.exit(0);
}
}
但是有一个问题:
- 仅显示前 50 个条目。
与通常的图形界面一样 - 一个包含 50 个条目的页面。
请帮助我,我如何一次获得或所有记录?或者如何指定所需的页面或项目。
我找到了方法:
searchResult.getMaxResults();
- 所有记录数(n)
searchResult.getTotal();
每页条目数 (50)
searchResult.getStartIndex();
- 第一个元素的个数(0)
但我不能把它们放在任何地方使用。我能认出他们,但没有任何意义。
以下是我使用的软件版本:
- Jira 版本:7.2.13
- atlassian-image-consumer (com.atlassian.image:atlassian-image-consumer:1.0.1:jar)
- 颂歌 (颂歌:颂歌:1.5.2:jar)
- 卡罗尔属性(卡罗尔:卡罗尔属性:1.5.2:罐子)
- 数据文件(数据文件:数据文件:1.3.3:jar)
- 休眠(休眠:休眠:2.1.8-atlassian:jar)
- image4j (org.jclarion:image4j:0.7:jar)
- JCaptcha (com.octo.captcha:jcaptcha-api:2.0-alpha-1:jar)
- JCaptcha (com.octo.captcha:jcaptcha:2.0-alpha-1:jar)
- jcommon (jfree:jcommon:1.0.8:jar)
- jfreechart (jfree:jfreechart:1.0.13:jar)
- JS 日历 (1.0)
- jStyleParser (net.sf.cssbox:jstyleparser:1.16-atlassian-1:jar)
- 为 XML 流式传输 API (javax.xml.stream:stax-api:1.0-2:jar)
- TinyMCE-TinyMCE (4.4.0)
- xapool (xapool:xapool:1.3.1:jar)
快速浏览 API 文档,我会说您需要使用重载 searchJql(String jql, int maxResults, int startAt)
并指定 maxResults
参数。
我使用这个简单的循环进行分页。
List<Issue> issues = new ArrayList<>();
SearchRestClient searchClient = restClient.getSearchClient();
Set<String> set = new HashSet<String>();
set.add("*all"); /* you can use simply null set if you dont need all values */
int start = 0;
int maxPerPage = 25; /* batch size (max 50) */
int total = 0;
do {
SearchResult result = searchClient.searchJql(JQL, maxPerPage, start, set)
.claim();
total = result.getTotal();
start += maxPerPage;
result.getIssues().iterator().forEachRemaining(issues::add);
} while (total > start );
所有问题现在都在 issues
列表中。
我建议使用以下功能。
public List<Issue> getIssuesList(String query) {
boolean flag = false;
int start = 0, end=Constants.MAX_RESULTS_PER_PAGE, totalResults = 0;
List<Issue> issueList = new ArrayList<Issue>();
SearchResult searchResult;
do {
Promise<SearchResult> searchJqlPromise = client.getSearchClient().searchJql(query,end,start, null);
searchResult = searchJqlPromise.claim();
if(flag==false) {
totalResults = searchResult.getTotal();
flag=true;
};
List<Issue> res = (List<Issue>) searchResult.getIssues();
issueList.addAll(res);
start = start + Constants.MAX_RESULTS_PER_PAGE;
totalResults -= Constants.MAX_RESULTS_PER_PAGE;
} while(totalResults>0);
return issueList;
}
我正在尝试使用 API 从 Jirà 获取所有任务。 我找到了 working code:
public class CustomJiraRestClient {
private static final String JIRA_URL = "http://jira-dev:8080";
private static final String JIRA_ADMIN_USERNAME = "admin";
private static final String JIRA_ADMIN_PASSWORD = "admin";
public static void main(String[] args) throws Exception {
// Construct the JRJC client
System.out.println(String.format("Logging in to %s with username '%s' and password '%s'", JIRA_URL, JIRA_ADMIN_USERNAME, JIRA_ADMIN_PASSWORD));
JiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
URI uri = new URI(JIRA_URL);
JiraRestClient client = factory.createWithBasicHttpAuthentication(uri, JIRA_ADMIN_USERNAME, JIRA_ADMIN_PASSWORD);
// Invoke the JRJC Client
Promise<User> promise = client.getUserClient().getUser("admin");
User user = promise.claim();
Promise<SearchResult> searchJqlPromise = client.getSearchClient().searchJql("project = MYPURRJECT AND status in (Closed, Completed, Resolved) ORDER BY assignee, resolutiondate");
for (Issue issue : searchJqlPromise.claim().getIssues()) {
System.out.println(issue.getSummary());
}
// Done
System.out.println("Example complete. Now exiting.");
System.exit(0);
}
}
但是有一个问题: - 仅显示前 50 个条目。 与通常的图形界面一样 - 一个包含 50 个条目的页面。 请帮助我,我如何一次获得或所有记录?或者如何指定所需的页面或项目。
我找到了方法:
searchResult.getMaxResults();
- 所有记录数(n)searchResult.getTotal();
每页条目数 (50)searchResult.getStartIndex();
- 第一个元素的个数(0)
但我不能把它们放在任何地方使用。我能认出他们,但没有任何意义。
以下是我使用的软件版本:
- Jira 版本:7.2.13
- atlassian-image-consumer (com.atlassian.image:atlassian-image-consumer:1.0.1:jar)
- 颂歌 (颂歌:颂歌:1.5.2:jar)
- 卡罗尔属性(卡罗尔:卡罗尔属性:1.5.2:罐子)
- 数据文件(数据文件:数据文件:1.3.3:jar)
- 休眠(休眠:休眠:2.1.8-atlassian:jar)
- image4j (org.jclarion:image4j:0.7:jar)
- JCaptcha (com.octo.captcha:jcaptcha-api:2.0-alpha-1:jar)
- JCaptcha (com.octo.captcha:jcaptcha:2.0-alpha-1:jar)
- jcommon (jfree:jcommon:1.0.8:jar)
- jfreechart (jfree:jfreechart:1.0.13:jar)
- JS 日历 (1.0)
- jStyleParser (net.sf.cssbox:jstyleparser:1.16-atlassian-1:jar)
- 为 XML 流式传输 API (javax.xml.stream:stax-api:1.0-2:jar)
- TinyMCE-TinyMCE (4.4.0)
- xapool (xapool:xapool:1.3.1:jar)
快速浏览 API 文档,我会说您需要使用重载 searchJql(String jql, int maxResults, int startAt)
并指定 maxResults
参数。
我使用这个简单的循环进行分页。
List<Issue> issues = new ArrayList<>();
SearchRestClient searchClient = restClient.getSearchClient();
Set<String> set = new HashSet<String>();
set.add("*all"); /* you can use simply null set if you dont need all values */
int start = 0;
int maxPerPage = 25; /* batch size (max 50) */
int total = 0;
do {
SearchResult result = searchClient.searchJql(JQL, maxPerPage, start, set)
.claim();
total = result.getTotal();
start += maxPerPage;
result.getIssues().iterator().forEachRemaining(issues::add);
} while (total > start );
所有问题现在都在 issues
列表中。
我建议使用以下功能。
public List<Issue> getIssuesList(String query) {
boolean flag = false;
int start = 0, end=Constants.MAX_RESULTS_PER_PAGE, totalResults = 0;
List<Issue> issueList = new ArrayList<Issue>();
SearchResult searchResult;
do {
Promise<SearchResult> searchJqlPromise = client.getSearchClient().searchJql(query,end,start, null);
searchResult = searchJqlPromise.claim();
if(flag==false) {
totalResults = searchResult.getTotal();
flag=true;
};
List<Issue> res = (List<Issue>) searchResult.getIssues();
issueList.addAll(res);
start = start + Constants.MAX_RESULTS_PER_PAGE;
totalResults -= Constants.MAX_RESULTS_PER_PAGE;
} while(totalResults>0);
return issueList;
}