JQLクエリに苦労しています。
テキストフィールドである「BuildReported」というカスタムフィールドがあります。「4.7.323H」、「5.1.123L」、「3.1.456E」などの値があります。
ユーザー指定のバージョンの後に報告されたすべての問題を取得する簡単なクエリを作成する必要があります。
JQL関数プロトタイプ:searchIssues('Build Integrated'、'>'、 '4.7.323B')
これを行うには、すべての問題についてビルドレポートを取得するJQLクエリを実行します。次に、各問題を繰り返し処理し、文字ごとの比較を実行して、現在の問題のビルドレポートバージョンがより大きいかどうかを判断します。ユーザーが指定したもの。jiraデータベースからすべての問題を取得する必要があるため、これを実行するには時間がかかりすぎるようです。
これを達成するためのより速い方法はありますか?これが私がこれまでに持っているものです:
// Get all the arguments
java.util.List args = operand.getArgs();
CustomField cf = customFieldManager.getCustomFieldObjectByName((String)args.get(0));
Long cfID = cf.getIdAsLong();
String operator = (String)args.get(1);
String userVersion = (String)args.get(2);
String jiraVersion = "";
java.util.List issues;
Iterator issuesIterator;
Issue issue;
issues = getAllIssues(user, interestedInVersion, cfID);
issuesIterator = issues.iterator();
// Iterate over all the issues
while(issuesIterator.hasNext())
{
issue = (Issue)issuesIterator.next();
// Get the Build reported value
jiraVersion = (String)issue.getCustomFieldValue(cf);
if(jiraVersion != null &&
!jiraVersion.equals(""))
{
// Compare user-specified version to the one retrieved from database
if(compareVersions(jiraVersion, userVersion, operator))
{
// Add the issue to the result set
literals.add(new QueryLiteral(operand, issue.getId()));
}
}
}
// cfID is the ID for the custom field Build Reported
private java.util.List getAllIssues(User user, Long cfID) throws SearchException, ParseException
{
JqlQueryBuilder builder = JqlQueryBuilder.newBuilder();
builder.where().project("SDEV").and().customField(cfID).isNotEmpty();
Query query = builder.buildQuery();
SearchResults results = searchService.search(user, query, PagerFilter.getUnlimitedFilter());
return results.getIssues();
}
結果セットのサイズを縮小するためにJQLクエリビルダーに使用できるフィルターは他にないことに注意してください。