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

0 votes
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

@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