Class to write to CSV file(script runner )

Moses Thomas
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
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

0 votes
Answer accepted
Moses Thomas
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
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 Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
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 Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
January 8, 2021

@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