Hi,
My script was ran in 6.x version after upgrading to 7.2.6 then not working. This use to send attachment when issue resolve.
Here is the code that I used.
////Values getting from workflow transition screen c.
def changeItems = transientVars["changeItems"]
def uploadChanges = changeItems.findAll { item -> item.getField() == "Attachment" && item.getFieldType() == "jira" }
uploadChanges.each { uploadChange ->
def Attachment attachment = attachmentManager.getAttachment(uploadChange.getTo()?.toLong())Getting errors as below
2. item.getField() - Cannot find matching method. please check if the declared type is right and if the method exist
3. item.getFieldType() - Cannot find matching method. please check if the declared type is right and if the method exist
4. attachmentManager.getAttachment(uploadChange.getTo()?.toLong()) Same error as 2,3
Can anyone suggest me what is the change in new JIRA version 7.2 ? How I can fix this?
The first issue causes the others. Is this a workflow function? transientVars should work fine. Can you add a screenshot of the function config.
@Jamie Echlin (Adaptavist) Here is the screenshot of the workflow post function
wk-flowpostfunction.JPG
Script is
package com.custom
import com.atlassian.jira.event.issue.AbstractIssueEventListener
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.AttachmentManager;
import com.atlassian.jira.issue.attachment.Attachment;
import com.atlassian.mail.queue.SingleMailQueueItem
import com.atlassian.mail.Email
import com.atlassian.mail.server.MailServerManager
import com.atlassian.mail.server.SMTPMailServer
import org.apache.log4j.Category
import java.sql.Timestamp
import com.atlassian.jira.util.AttachmentUtils;
import com.atlassian.jira.util.PathUtils
import javax.mail.Multipart
import javax.mail.internet.MimeMultipart
import javax.mail.BodyPart
import javax.mail.internet.MimeBodyPart
import javax.activation.FileDataSource
import javax.activation.DataHandler
ComponentManager componentManager = ComponentManager.getInstance()
CustomFieldManager customFieldManager = componentManager.getCustomFieldManager()
MailServerManager mailServerManager = componentManager.getMailServerManager()
SMTPMailServer mailServer = mailServerManager.getDefaultSMTPMailServer()
AttachmentManager attachmentManager = componentManager.getAttachmentManager()
pathManager = componentManager.getAttachmentPathManager()
// Get the related Application
def cfRelAppID = ComponentAccessor.customFieldManager.getCustomFieldObjectByName("Related Application ID")
def cfRelAppIDVal = "" + issue.getCustomFieldValue(cfRelAppID)?.value
def cfrelAppSupportEmailVal
if (cfRelAppIDVal != null ){
MutableIssue relAppObj = componentManager.getIssueManager().getIssueObject(cfRelAppIDVal)
def cfrelAppSupportEmail = customFieldManager.getCustomFieldObjectByName("Support Email")
cfrelAppSupportEmailVal = relAppObj.getCustomFieldValue(cfrelAppSupportEmail)?.value
// log.debug ("App email is ${cfrelAppSupportEmailVal}")
def cfrelAppSupportEmailSig = customFieldManager.getCustomFieldObjectByName("Support Email Signature")
cfrelAppSupportEmailSigVal = relAppObj.getCustomFieldValue(cfrelAppSupportEmailSig)?.value
}
if (mailServer) {
//TO: Email Address//
///////TO: Email Address////////
def cfcust = customFieldManager.getCustomFieldObjectByName("Customer Email")
def cfcustVal = "" + issue.getCustomFieldValue(cfcust)?.value
Email email = new Email(cfcustVal)
///////FROM: Email Address////////
if (cfrelAppSupportEmailVal != null ){
email.setFrom("" + cfrelAppSupportEmailVal)
}
///////CC: Email Address////////
CCEmailID = customFieldManager.getCustomFieldObjectByName("CC Address Emails")
def CCEmailAddr = issue.getCustomFieldValue(CCEmailID)
if (CCEmailAddr != null ){
email.setCc("" + CCEmailAddr)
}
///////Email Subject////////
email.setSubject("($issue.key) - $issue.summary")
// email.setSubject("Hello Testing Attachment");
///////Set the Email Mime Type/////
email.setMimeType("text/Plain");
///////Email Body////////
String content
if ( issue.status.name == "Waiting For Triage"){
content = "TECH Help Desk Ticket $issue.key has been created"
}else if( issue.status.name == "Waiting on Customer"){
content = "TECH Help Desk Ticket $issue.key Needs More Information."
}else if( issue.status.name == "Resolved"){
content = "TECH Help Desk Ticket $issue.key has been resolved."
}
content = content +
"\n\nShort Description: $issue.summary\n\n" +
"\nCustomer: ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Customer"))?.value}" +
"\nRelated Provider: ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Related Provider"))?.value}" +
"\nRelated Application: ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Related Application"))?.value}" +
"\nService Request Type: ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Service Request Type"))?.value}" +
"\nRequest Source Type: ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Request Source Type"))?.value}" +
"\nRequest Received Time: ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Request Received Time")).format('MM/dd/yyyy hh:mm a')}" +
"\nCreated: ${issue.getCreated().format('MM/dd/yyyy hh:mm a')}"
if( issue.status.name == "Waiting For Triage"){
content = content +
"\n\nDescription:\n\n$issue.description"
}else if( issue.status.name == "Waiting on Customer"){
////Checking for attachment.
Multipart multipart = new MimeMultipart("mixed");
////Values getting from workflow transition screen c.
def changeItems = transientVars["changeItems"]
def uploadChanges = changeItems.findAll { item -> item.getField() == "Attachment" && item.getFieldType() == "jira" }
uploadChanges.each { uploadChange ->
def Attachment attachment = attachmentManager.getAttachment(uploadChange.getTo()?.toLong())
if (attachment) {
addAttachmentsToMessage(multipart,attachment);
}
}
email.setMultipart(multipart);
content = content +
"\n\nPlease provide more information:\n\n${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Customer Comment"))?.value}"
}else if( issue.status.name == "Resolved"){
////Checking for attachment.
Multipart multipart = new MimeMultipart("mixed");
////Values getting from workflow transition screen for attachment field.
def changeItems = transientVars["changeItems"]
def uploadChanges = changeItems.findAll { item -> item.getField() == "Attachment" && item.getFieldType() == "jira" }
uploadChanges.each { uploadChange ->
def Attachment attachment = attachmentManager.getAttachment(uploadChange.getTo()?.toLong())
if (attachment) {
addAttachmentsToMessage(multipart,attachment);
}
}
email.setMultipart(multipart);
content = content +
"\nResolved: ${issue.resolutionDate.format('MM/dd/yyyy hh:mm a')}" +
"\nResolution: $issue.resolution.name" +
"\n\nResolved Comment - : ${issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Customer Comment"))?.value}"
}
if (cfrelAppSupportEmailSigVal != null ){
content = content + "\n\n" + cfrelAppSupportEmailSigVal
}
//email.setBody(attachFileName + "total added attachments" + NumOfAttachedfiles);
email.setBody(content)
///////SEND Email ////////
SingleMailQueueItem item = new SingleMailQueueItem(email);
ComponentAccessor.getMailQueue().addItem(item);
}else {
log.error "No SMTP mail server defined"
}
private void addAttachmentsToMessage(Multipart multipart, Attachment attachment){
BodyPart attachBody = new MimeBodyPart();
def attachedFile = AttachmentUtils.getAttachmentFile(attachment);
FileDataSource source = new FileDataSource(attachedFile);
attachBody.setDataHandler(new DataHandler(source));
attachBody.setFileName(attachment.filename);
multipart.addBodyPart(attachBody);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I got the error at this point.
def changeItems = transientVars["changeItems"] def uploadChanges = changeItems.findAll { item -> item.getField() == "Attachment" && item.getFieldType() == "jira" } uploadChanges.each { uploadChange -> def Attachment attachment = attachmentManager.getAttachment(uploadChange.getTo()?.toLong())
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You can't use eg componentManager.getCustomFieldManager in JIRA 7.
When you've fixed those probably everything else will work.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.