Jira Service Management云版:Groovy脚本实现CSV附件邮件订阅
Jira Service Management云版+Script Runner实现JQL结果CSV附件邮件订阅
你的思路完全正确,核心就是JQL查询结果转CSV + 发送带附件的订阅邮件两步。导入语句错误几乎都是因为混淆了Jira Server/Data Center和Cloud版的API类——Script Runner云版仅支持Atlassian官方Cloud REST API或自身提供的绑定类,不能直接引用服务器版com.atlassian.jira包下的专属类。
一、JQL结果转CSV的Groovy实现
以下是适配云版的脚本,用Script Runner自带的工具类完成查询与CSV生成:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.bc.issue.search.SearchService import com.atlassian.jira.user.ApplicationUser import com.atlassian.jira.bc.issue.search.PagerFilter import com.opencsv.CSVWriter // 1. 获取执行查询的用户(可替换为指定订阅用户) ApplicationUser currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser // 2. 定义目标JQL语句 String targetJql = "project = '你的项目键' AND status IN (Open, 'In Progress')" // 替换为你的JQL // 3. 解析并执行JQL查询 SearchService searchService = ComponentAccessor.getComponent(SearchService) SearchService.ParseResult parseResult = searchService.parseQuery(currentUser, targetJql) if (!parseResult.isValid()) { throw new IllegalArgumentException("JQL格式错误: " + parseResult.getErrors().toString()) } def issueResults = searchService.search(currentUser, parseResult.getQuery(), PagerFilter.getUnlimitedFilter()) // 4. 定义CSV导出字段(按需调整) List<String> exportFields = ["Issue Key", "Summary", "Status", "Assignee", "Created Date"] // 5. 生成CSV内容 StringWriter csvWriter = new StringWriter() CSVWriter writer = new CSVWriter(csvWriter) // 写入表头 writer.writeNext(exportFields.toArray(new String[0])) // 遍历结果写入数据行 issueResults.getIssues().each { issue -> List<String> rowData = [] rowData.add(issue.getKey()) rowData.add(issue.getSummary()) rowData.add(issue.getStatus().getName()) rowData.add(issue.getAssignee() ? issue.getAssignee().getDisplayName() : "未分配") rowData.add(issue.getCreated().format("yyyy-MM-dd HH:mm")) writer.writeNext(rowData.toArray(new String[0])) } writer.close() String csvContent = csvWriter.toString()
二、发送带CSV附件的订阅邮件
结合Jira云版的邮件服务API,实现带附件的邮件发送:
import com.atlassian.mail.server.MailServerManager import com.atlassian.mail.Email import javax.mail.internet.MimeBodyPart import javax.mail.internet.MimeMultipart import java.text.SimpleDateFormat // 1. 获取默认SMTP服务器 MailServerManager mailServerManager = ComponentAccessor.getComponent(MailServerManager) def smtpServer = mailServerManager.getDefaultSMTPMailServer() if (!smtpServer) { throw new IllegalStateException("Jira未配置默认SMTP邮件服务器") } // 2. 构建邮件 Email subscriptionEmail = new Email("订阅用户邮箱@example.com") // 替换为目标邮箱 subscriptionEmail.setSubject("JQL查询结果导出_${new SimpleDateFormat("yyyyMMdd").format(new Date())}") subscriptionEmail.setFrom(smtpServer.getDefaultFromAddress()) // 3. 构建多部件邮件内容(正文+附件) MimeMultipart multipartContent = new MimeMultipart() // 添加邮件正文 MimeBodyPart textBody = new MimeBodyPart() textBody.setText("这是您订阅的JQL查询结果,附件为CSV格式文件。") multipartContent.addBodyPart(textBody) // 添加CSV附件 MimeBodyPart csvAttachment = new MimeBodyPart() csvAttachment.setContent(csvContent, "text/csv; charset=utf-8") csvAttachment.setFileName("JQL_Results_${new SimpleDateFormat("yyyyMMdd").format(new Date())}.csv") multipartContent.addBodyPart(csvAttachment) subscriptionEmail.setMultipart(multipartContent) // 4. 发送邮件 smtpServer.send(subscriptionEmail)
导入错误排查要点
- 禁用服务器版类导入:不要尝试导入
com.atlassian.jira.web.bean.PagerFilter等服务器专属类,云版对应类为com.atlassian.jira.bc.issue.search.PagerFilter - 依赖Script Runner自带工具:
com.opencsv.CSVWriter是Script Runner云版内置的,无需额外安装插件 - 利用编辑器自动补全:在Script Runner脚本编辑器中,输入类名时的自动补全提示是判断类是否可用的标准,无提示的类请勿使用
内容的提问来源于stack exchange,提问作者Udara Manupriya
相关产品推荐
相关产品推荐

