Come leggere da un file CSV allegato ad una Issue

Se vogliamo leggere il contenuto di un file CSV allegato ad una issue possiamo utilizzare queste poche righe di codice sfruttando la libreria già presente in jira “com.mindprod.csv.CSVReader”. Questa libreria contiene anche la parte delle routines di scrittura di un file CSV. In presenza di più files allegati basta aggiungere un “if” che scarti i files con estensione differente o con un nome file predefinito.

import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.util.AttachmentUtils
import com.atlassian.jira.util.PathUtils
import com.mindprod.csv.CSVReader
 
def issueManager = ComponentAccessor.getIssueManager()
MutableIssue issue = issueManager.getIssueObject("FFF-5")
 
def pathManager = ComponentAccessor.getAttachmentPathManager()
def attachmentManager = ComponentAccessor.getAttachmentManager()
 
attachmentManager.getAttachments(issue).each { attachment ->
    def filePath = PathUtils.joinPaths(pathManager.attachmentPath,
        issue.projectObject.key, issue.key, attachment.id.toString())
        log.info(attachment.filename)
    atFile = new File(filePath)
    File atFile = AttachmentUtils.getAttachmentFile(attachment);
    CSVReader reader = new CSVReader(new BufferedReader( new FileReader( atFile ) ));
    try {
        while(true) {
            String[] fields = reader.getAllFieldsInLine();
        }
    } catch ( EOFException e ) {
        reader.close();
    }
}

 

Come modificare il contenuto di un campo Select

Utilizzando i “Behaviours” è possibile modificare in tempo reale il contenuto di un campo select che potrebbe contenere opzioni che vanno eliminate o aggiunte a in particolari condizioni. Il seguente codice confronta i valori esistenti con un array di valori permessi e crea una variabile che contiene i solo i valori permessi e sovrascrive i valori del campo select. La riga contenente il “findAll” filtra il contenuto attuale e restituisce solo i valori che ne rispettano le condizioni.

import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.jira.groovy.user.FieldBehaviours
import com.onresolve.jira.groovy.user.FormField
import com.atlassian.jira.component.ComponentAccessor
 
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def optionsManager = ComponentAccessor.getOptionsManager()
 
// Get a pointer to my select list field
def selectList = getFieldById("customfield_10304")
 
// Get access to the required custom field and options managers
def customField = customFieldManager.getCustomFieldObject(selectList.getFieldId())
def config = customField.getRelevantConfig(getIssueContext())
def options = optionsManager.getOptions(config)
def optionsMap = options.findAll {
  it.value in ["Complexity 1", "Complexity 2", "E"] // list of options you want to show
}.collectEntries {
  [
    (it.optionId.toString()): it.value
  ]
}
selectList.setFieldOptions(optionsMap)