/// <summary> /// Search for issues, with a JQL (e.g. from a filter) /// See: https://docs.atlassian.com/jira/REST/latest/#d2e2713 /// </summary> /// <param name="jiraClient">IIssueDomain to bind the extension method to</param> /// <param name="jql">Jira Query Language, like SQL, for the search</param> /// <param name="page">Page with paging information, default this starts at the beginning with a maxResults of 20</param> /// <param name="fields">Jira fields to include, if null the defaults from the JiraConfig.SearchFields are taken</param> /// <param name="cancellationToken">CancellationToken</param> /// <returns>SearchIssuesResult</returns> public static Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, string jql, Page page = null, IEnumerable <string> fields = null, CancellationToken cancellationToken = default(CancellationToken)) { if (jql == null) { throw new ArgumentNullException(nameof(jql)); } var search = new JqlIssueSearch { Jql = jql, ValidateQuery = true, MaxResults = page?.MaxResults ?? 20, StartAt = page?.StartAt ?? 0, Fields = fields ?? new List <string>(JiraConfig.SearchFields) }; return(jiraClient.SearchAsync(search, cancellationToken)); }
/// <summary> /// Search for issues, with a JQL (e.g. from a filter) /// See: https://docs.atlassian.com/jira/REST/latest/#d2e2713 /// </summary> /// <param name="jiraClient">IIssueDomain to bind the extension method to</param> /// <param name="search">The search arguments</param> /// <param name="cancellationToken">CancellationToken</param> /// <returns>SearchIssuesResult</returns> public static async Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, JqlIssueSearch search, CancellationToken cancellationToken = default) { if (search == null) { throw new ArgumentNullException(nameof(search)); } Log.Debug().WriteLine("Searching via JQL: {0}", search.Jql); jiraClient.Behaviour.MakeCurrent(); var searchUri = jiraClient.JiraRestUri.AppendSegments("search"); var response = await searchUri .PostAsync <HttpResponse <SearchIssuesResult <Issue, JqlIssueSearch>, Error> >(search, cancellationToken) .ConfigureAwait(false); var result = response.HandleErrors(); // Store the original search parameter result.SearchParameter = search; return(result); }
/// <summary> /// Search for issues, with a JQL (e.g. from a filter) /// See: https://docs.atlassian.com/jira/REST/latest/#d2e2713 /// </summary> /// <param name="jiraClient">IIssueDomain to bind the extension method to</param> /// <param name="search">Search information, with Jira Query Language, like SQL, for the search</param> /// <param name="page">Page with paging information, overwriting the page info in the search.</param> /// <param name="fields">Jira fields to include, if null the defaults from the JiraConfig.SearchFields are taken</param> /// <param name="cancellationToken">CancellationToken</param> /// <returns>SearchIssuesResult</returns> public static Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, JqlIssueSearch search, Page page = null, IEnumerable <string> fields = null, CancellationToken cancellationToken = default) { if (search == null) { throw new ArgumentNullException(nameof(search)); } if (page != null) { search.MaxResults = page.MaxResults ?? 20; search.StartAt = page.StartAt ?? 0; } return(jiraClient.SearchAsync(search, cancellationToken)); }
/// <summary> /// Search for issues, with a JQL (e.g. from a filter) /// See: https://docs.atlassian.com/jira/REST/latest/#d2e2713 /// </summary> /// <param name="jiraClient">IIssueDomain to bind the extension method to</param> /// <param name="search">The search arguments</param> /// <param name="cancellationToken">CancellationToken</param> /// <returns>SearchIssuesResult</returns> public static async Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, JqlIssueSearch search, CancellationToken cancellationToken = default(CancellationToken)) { if (search == null) { throw new ArgumentNullException(nameof(search)); } Log.Debug().WriteLine("Searching via JQL: {0}", search.Jql); jiraClient.Behaviour.MakeCurrent(); var searchUri = jiraClient.JiraRestUri.AppendSegments("search"); // Add the configurable expand values, if the value is not null or empty if (JiraConfig.ExpandSearch?.Length > 0) { searchUri = searchUri.ExtendQuery("expand", string.Join(",", JiraConfig.ExpandSearch)); } var response = await searchUri.PostAsync <HttpResponse <SearchIssuesResult <Issue, JqlIssueSearch>, Error> >(search, cancellationToken).ConfigureAwait(false); var result = response.HandleErrors(); // Store the original search parameter result.SearchParameter = search; return(result); }