Olá Pessoal,
Gostaria de compartilhar uma necessidade que tivemos aqui na empresa para exibir o percentual de evolução do épico.
Um agilista precisava montar um board UpStream e apresentar no card a evolução do épico. Criamos esse calculo a partir do APP ScriptRunner na opção Custom Script Fields, esse campo calculado pode ser utilizado em relatórios nativos do Jira, boards e dashboards.
Segue abaixo o código que utilizamos nesse campo calculado:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import java.text.DecimalFormat
import java.text.NumberFormat
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchService = ComponentAccessor.getComponent(SearchService)
def issueManager = ComponentAccessor.getIssueManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
DecimalFormat df = (DecimalFormat)nf
df.applyPattern("###,##0.00")
// edit this query to suit
def query = jqlQueryParser.parseQuery("issueFunction in linkedIssuesOf(\"issuekey=" + issue.key + "\",\"Is Epic Of\")")
def search = searchService.search(user, query, PagerFilter.getUnlimitedFilter())
log.debug("Total issues: ${search.total}")
def Progresso = 0
def StatusFinalizado = 0
def Total = 0
def textoCategoria = ""
search.results.each { documentIssue ->
log.debug(documentIssue.key)
// if you need a mutable issue you can do:
def issueJira = issueManager.getIssueObject(documentIssue.id)
//ajuste para não entrar os itens removed
if (!issueJira.issueType.isSubTask() && issueJira.issueType.name != "Epic" && issueJira.getStatus().name != "Removed")
{
/// textoCategoria = textoCategoria + " - " + issueJira.issueType.name
if(issueJira.getStatus().getStatusCategory().name == "Complete" &&issueJira.getStatus().getStatusCategory().name != "Removed" ) {
(StatusFinalizado++)
textoCategoria = textoCategoria + " - " + issueJira.issueType.name
}
(Total++ )
}
}
if (Total > 0){
//Total de Features em Andamento ou finalizado
Progresso = (((int)StatusFinalizado) / (int)Total) * 100;
}
return df.format(Progresso) + "%"
Oi @Daiane Conte ,
Ótimo exemplo!
Tenho uma observação, esse script vai acontecer toda vez que a issue for carregada. Já que esse script utiliza JQL é necessário ter o cuidado de verificar se o Index esta disponível para ser usado.
Recomendo adicionar uma condição para verificar se o index esta disponível para ser utilizado, seguindo a documentação abaixo:
Isso vai evitar lentidão durante o full reindex.