Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Class to write to CSV file(script runner )

Moses Thomas
Community Champion
January 5, 2021

Hello Adaptavist,

I have been looking for the class to use so that i can write results obtain from my script to CSV. but the script runner console does not recognize the class  mentioned here

https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVPrinter.html

does  any one  knows the right class ? script runner version(5.8.0-p5)

import org.apache.commons.csv.CSVPrinter

the above is not recognized by script runner ;/

 

Kind regards,

Moses

2 answers

1 accepted

1 vote
Answer accepted
Moses Thomas
Community Champion
January 18, 2021

@Leo   This  solution perfectly works in my case, i thought i could share,  the java.io.FileWriter   library was just hard to find, but i found it.

 

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 com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import java.io.FileWriter // already available for use no need to import

FileWriter attFds = new FileWriter("/sbclocal/apps/jira_home/export/Item.csv")

def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchService = ComponentAccessor.getComponent(SearchService)
def issueManager = ComponentAccessor.getIssueManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def query = jqlQueryParser.parseQuery("Project = XYZ")
def search = searchService.search(user, query,PagerFilter.getUnlimitedFilter())

attFds.write("IssueKeys,IT,Summary")
attFds.write("\n")

for (item in search.results)
{
def issue = issueManager.getIssueObject(item.id)

CustomField cf10977 = ComponentAccessor.getCustomFieldManager().getCustomFieldObject("customfield_10977")
String cf10977Value = issue.getCustomFieldValue(cf10977)
CustomField cf10911 = ComponentAccessor.getCustomFieldManager().getCustomFieldObject("customfield_10911")
String cf10911Value = issue.getCustomFieldValue(cf10911)
String summary = issue.getSummary()

if( cf10977Value == cf10911Value) {

attFds.write("$issue,$cf10977Value,$summary")
attFds.write("\n")


}

}
1 vote
Leo
Community Champion
January 5, 2021

Hi @Moses Thomas,

I never tried but you can refer below articles for more details

http://mindprod.com/application/csv.manual.html#CSVWRITER

// This is the CSV library Atlassian has built into Jira
// See https://wush.net/svn/mindprod/com/mindprod/csv/CSVWriter.java

import com.mindprod.csv.CSVWriter

// Convert a list of maps to a CSV string
def mapsToCSV(mapList) {

// Get keys from all maps and build a header row
def headerSet = new LinkedHashSet()
mapList.each { headerSet.addAll(it.keySet()) }
def headers = headerSet.toArray()

def sw = new StringWriter()
def csv = new CSVWriter(sw)

// Add header row
headers.each {csv.put(it.toString())}
csv.nl()

// Add rows - put in empty string if a header key doesn't exist in a row
mapList.each { row ->
headers.each {
csv.put(row.get(it)?.toString() ?: '')
}
csv.nl()
}
csv.close()
return sw.toString()
}

 

BR,

Leo

Moses Thomas
Community Champion
January 8, 2021 edited

@Leo   Thanks for the reply,  This  is not solution in my  case , i don't  need  to map lists / linked hash set. I just need to  write to csv  file  of some out put,  but i found  another way  and  i  need to  test it on the server and i  will give feed back once it worked.

 

Kind regards,

Moses

Damien Davis October 17, 2022

@Moses Thomas Can you add the solution to your case here?

Like • Eleonora Cattalini likes this

Suggest an answer

Log in or Sign up to answer
TAGS
atlassian, team ’25 europe, early bird extension, conference discount, barcelona, hybrid event, AI teamwork, early bird pass, digital access, collaboration conference, atlassian events, register now, developer conference

1 week left to save on your Team '25 Europe pass

Still thinking about joining us for Team '25 Europe? Early bird has been extended for just one week! Now’s the time to lock in your lowest rate. Use code TEU25COMM-20 to save 20% at checkout. Hurry, this only lasts for 1 more week.

Learn more
AUG Leaders

Atlassian Community Events