My description field do not preserve line breaks

tapraj April 27, 2021

I made a scriptrunner mail handler to create issues when sent to mail. My client requested to replace the * in desciption to "¤" character so before setting the description of the issue I just  used String x=MailUtils.getBody(message).replace('*', '¤') and passed  x in issueobject.setDescription(x). Now the stars are getting replaced with ¤ but the line breaks are not preserved . How to get the line breaks and replace the character at the same time.

Thanks in advance. 

1 answer

0 votes
Ram Kumar Aravindakshan _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 5, 2021

Hi @tapraj

Where exactly do you want the line breakers?

Could you share a dummy message where you want to modify the asterisk to the ¤ symbol?

Thank you and Kind regards,

Ram

tapraj May 5, 2021

Hi Ram,

Thank You for responding. The issue got resolved. 

one of the two resolved the issue I am not sure which one exactly though.

1. I was previously using Outlook Web to send the mails to the mail handler 

switching to Outlook Desktop application resolved the problem

2. I was using replaceAll(regex,string) to convert * to ¤ symbol

Switched to replace('*','¤ ')

Expected:

**********************************
*SYSTEMFEHLER-000022: BATCH-MODUL*
**********************************
...ZEITSTEMPEL:...... 19102020211141

...INT.OPERATION:.... U103-DATEI-NACH-DS
F050 Fehler in Datei: S00524019390110004447070059247
*****************************************
*****ENDE.DES.SYSTEMFEHLERPROTOKOLLS*****
*****************************************

 

Generated:


¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤                                              ¤SYSTEMFEHLER-000011: BATCH-MODUL¤                                              ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤                                              ...ZEITSTEMPEL:...... 19042021094915                                            ...MODULHOSTNAME:.... S1617066                 ZEILE-5:.. ..........................................................F7AG     Das ausgewählte Freigabeobjekt kann nicht mehr bearbeitet werden.      ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤                        ¤¤¤¤¤ENDE.DES.SYSTEMFEHLERPROTOKOLLS¤¤¤¤¤                        ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤                

was generating the description like this :

 

Regards,

Tejasvini

Ram Kumar Aravindakshan _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 5, 2021

Hi @tapraj,

I have tested out the dummy mail with this code below, and it seems to be working.

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.exception.CreateException
import com.atlassian.jira.service.util.ServiceUtils
import com.atlassian.jira.service.util.handler.MessageHandlerContext
import com.atlassian.jira.service.util.handler.MessageUserProcessor
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.mail.MailUtils

import javax.mail.Message
import javax.mail.internet.InternetAddress

final targetProjectKey = "SAM"
final defaultReporterName = "admin"
final defaultIssueType = "Story"

def messageUserProcessor = ComponentAccessor.getComponent(MessageUserProcessor) as MessageUserProcessor
def userManager = ComponentAccessor.userManager
def projectManager = ComponentAccessor.projectManager
def issueFactory = ComponentAccessor.issueFactory

def subject = message.subject as String

def issue = ServiceUtils.findIssueObjectInString(subject)

if (issue) {
return
}

def project = projectManager.getProjectObjByKey(targetProjectKey)

def user = userManager.getUserByName(defaultReporterName)

def reporterUser = messageUserProcessor.getAuthorFromSender(message) ?: user

def allCcRecipients = message.getRecipients(Message.RecipientType.CC) as List<InternetAddress>

def firstValidUser = allCcRecipients.findResult {
messageUserProcessor.findUserByEmail(it.address)
}

def messageBody = MailUtils.getBody(message).replace("*","¤")

def issueObject = issueFactory.issue
issueObject.setProjectObject(project)
issueObject.setSummary(subject)
issueObject.setDescription(messageBody)
issueObject.setIssueTypeId(project.issueTypes.find { it.name == defaultIssueType }.id)
issueObject.setReporter(reporterUser)

firstValidUser ? issueObject.setAssignee(firstValidUser as ApplicationUser) : log.error ("Unable to retrieve valid user from message CC list, issue will be created without assignee")

try {
(messageHandlerContext as MessageHandlerContext).createIssue(user, issueObject)
} catch (CreateException e) {
log.error "Error creating issue: ", e
}

In my sample code, I am using:-

def messageBody = MailUtils.getBody(message).replace("*","¤")

and it seems to be working.

Below is the output it produced:-

mailbody.png

I hope this helps to answer your question. :)


Thank you and Kind Regards,

Ram

Suggest an answer

Log in or Sign up to answer