Dear community,
Question: How do I get the data of the current issue, for with an event fired in a Scriptrunner listener?
Background: I am developing a little groovy script to send issue-data to a sharepoint list. I did the development in the "Groovy Console" of the "JIRA MISC WORKFLOW EXTENSIONS"-App. This console is very handy, as one can test the script against an existing issue.
My code is working perfectly fine in the JMWE-environment.
Unfortunately, I need to use a Scriptrunner listener, because I want to run my script on certain events. Scriptrunner handles things slightly different and I am struggling at the very beginning: how do I get the data of the current issue, for witch an event fired? What do I need to "import" to have access on the current issue?
My code:
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.RESTClient
import java.time.LocalDateTime
def issueKey = issue.getAsString("issuekey")
def issueStatus = issue.getAsString("status")
def issueTitle = issue.get("summary")
def issueDescription = issue.get('description')
def issueComment = issue.getAsString("comment")
def issueStartDate = issue.getAsString("customfield_10705")
def issueResolutionDate = issue.get("resolutiondate")
//log.info "${issueKey} --- ${issueStatus} --- ${issueTitle} --- ${issueDescription} --- ${issueStartDate} --- ${issueResolutionDate}"
//log.info "${issueComment}"
...
Any help or link to the documentation is very much appreciated.
Hi @Christian Schneider ,
you need to retrieve your issue first and then any field associated. Try the following code :
Issue issue = event.getIssue()
def issueKey = issue.getKey()
def issueStatus = issue.getStatus().getName()
def issueTitle = issue.getSummary()
def issueDescription = issue.getDescription()
def issueResolutionDate = issue.getResolutionDate()
Please take a look to the following API in order to get available methods https://docs.atlassian.com/software/jira/docs/api/8.5.1/index.html?com/atlassian/jira/issue/Issue.html
For comments, you need the following API https://docs.atlassian.com/software/jira/docs/api/8.5.3/com/atlassian/jira/issue/comments/CommentManager.html
Hope this helps,
Fabio
Dear @Fabio Racobaldo _Herzum_
thank you very much for your quick input. This works perfectly fine to get the Issue and field associated.
Regarding comments:
I did not yet fully understand the documentation under the provided link. Do I have to add this?
import com.atlassian.jira.issue.comments.CommentManager
def issueComment = issue.getComments()
Does not seem to work, as no matching method can be found.
Regarding custom fields for my issueStartDate-field:
Same question: this is not correct, is it?
import com.atlassian.jira.issue.customfields
def issueStartDate = issue.getValue("customfield_10705")
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Christian Schneider ,
for comments and your field value, try the following code :
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.comments.Comment;
import com.atlassian.jira.issue.comments.CommentManager;
import com.atlassian.jira.issue.fields.CustomField;
Issue issue = event.getIssue()
def issueKey = issue.getKey()
def issueStatus = issue.getStatus().getName()
def issueTitle = issue.getSummary()
def issueDescription = issue.getDescription()
def issueResolutionDate = issue.getResolutionDate()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
CustomField myField = customFieldManager.getCustomFieldObjectByName("YOUR_CF_NAME_HERE");
def myFieldValue = issue.getCustomFieldValue(myField)!=null?issue.getCustomFieldValue(myField).toString():null;
CommentManager commentManager = ComponentAccessor.getCommentManager();
List<Comment> comments = commentManager.getComments(issue);
Hope this helps, Fabio
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thank you very much. The thing with the customField did not work out. I changed it from "...byName" to the one, where I have to put in the CustomField-Number. Nevertheless, it did not work either. perhaps, because it's a date? Anyway, I decided to use the "created"-date. Should do for now.
regarding the comments:
I get the list of the comment-IDs, but not the text itself.
[com.atlassian.jira.issue.comments.CommentImpl@b90a0cf0, com.atlassian.jira.issue.comments.CommentImpl@e94800f7, com.atlassian.jira.issue.comments.CommentImpl@787f731, com.atlassian.jira.issue.comments.CommentImpl@153873f5, com.atlassian.jira.issue.comments.CommentImpl@5108e309, com.atlassian.jira.issue.comments.CommentImpl@9bf5d073, com.atlassian.jira.issue.comments.CommentImpl@b27add91, com.atlassian.jira.issue.comments.CommentImpl@57290461, com.atlassian.jira.issue.comments.CommentImpl@19396fd5, com.atlassian.jira.issue.comments.CommentImpl@86582134, com.atlassian.jira.issue.comments.CommentImpl@76fc0550]
I am struggling the get the comment as a string. Any idea?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Christian Schneider ,
here the code with your custom field id and comments management.
Each comment can be retrieved ussing method .getBody
Here new code :
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.comments.Comment;
import com.atlassian.jira.issue.comments.CommentManager;
import com.atlassian.jira.issue.fields.CustomField;
Issue issue = event.getIssue()
def issueKey = issue.getKey()
def issueStatus = issue.getStatus().getName()
def issueTitle = issue.getSummary()
def issueDescription = issue.getDescription()
def issueResolutionDate = issue.getResolutionDate()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
CustomField myField = customFieldManager.getCustomFieldObject(10705L);
def myFieldValue = issue.getCustomFieldValue(myField)!=null?issue.getCustomFieldValue(myField).toString():null;
CommentManager commentManager = ComponentAccessor.getCommentManager();
List<Comment> comments = commentManager.getComments(issue);
for(Comment comment : comments){
YOUR_VARIABLE_HERE = comment.getBody();
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
thank you very much. Your example only provides the last comment. I guess, while running through the for-loop, the variable "YOUR_VARIABLE_HERE" is overwritten everytime? So only the last comment is provided to the rest of the script?
I changed the script into this:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.comments.Comment
import com.atlassian.jira.issue.comments.CommentManager
import com.atlassian.jira.issue.fields.CustomField
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.RESTClient
import java.time.LocalDateTime
Issue issue = event.getIssue()
def issueKey = issue.getKey()
def issueStatus = issue.getStatus().getName()
def issueTitle = issue.getSummary()
def issueDescription = issue.getDescription()
def issueStartDate = ( issue.getCreated() != null ? issue.getCreated().format( 'yyyy-MM-dd HH:mm' ) : null )
def issueResolutionDate = ( issue.getResolutionDate() != null ? issue.getResolutionDate().format( 'yyyy-MM-dd HH:mm' ) : null )
def commentManager = ComponentAccessor.commentManager
def comments = commentManager.getComments(issue)
def issueComments = []
comments.each { comment ->
issueComments.add(comment.getCreated().format("dd.MM.yy HH:mm") + ": " + comment.getBody() + System.getProperty("line.separator") + System.getProperty("line.separator"))
}
log.warn "Issue Key: ${issueKey}"
log.warn "Status: ${issueStatus}"
log.warn "Title: ${issueTitle}"
log.warn "Issue Description: ${issueDescription}"
log.warn "Startdate: ${issueStartDate}"
log.warn "Enddate: ${issueResolutionDate}"
log.warn "Comments: ${issueComments}"
Log:
2022-02-03 14:23:11,693 WARN [runner.ScriptBindingsManager]: Issue Key: ICTPRM-19
2022-02-03 14:23:11,694 WARN [runner.ScriptBindingsManager]: Status: Open
2022-02-03 14:23:11,694 WARN [runner.ScriptBindingsManager]: Title: Test Scriptrunner Listener to Sharepoint
2022-02-03 14:23:11,694 WARN [runner.ScriptBindingsManager]: Issue Description: sdfff
2022-02-03 14:23:11,694 WARN [runner.ScriptBindingsManager]: Startdate: 2022-02-02 12:31
2022-02-03 14:23:11,694 WARN [runner.ScriptBindingsManager]: Enddate: null
2022-02-03 14:23:11,694 WARN [runner.ScriptBindingsManager]: Comments: [02.02.22 16:27: Test
, 02.02.22 16:31: test2
, 02.02.22 16:39: Test3
, 02.02.22 16:42: Test4
, 02.02.22 16:48: Test 5
, 02.02.22 16:55: Test 6
, 02.02.22 16:59: Test 7
, 02.02.22 17:02: Test 8
, 02.02.22 17:04: Test 9
, 02.02.22 17:12: Test 10
, 02.02.22 17:17: Test11
, 03.02.22 13:28: Test 12 Kommentare abrufen
, 03.02.22 13:33: Test 13
, 03.02.22 14:23: Test 14
]
Now, all the comments are written into a List. I will use this variable to transfer all the text as a string with a RESTClient to a sharepoint list.
Thank you very much for help and effort. You definietely pointed me into the right directions. :-)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You're welcome @Christian Schneider . Please mark my answer as accepted ;)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Update
I found a nicer way to bring all comments into one variable:
def commentManager = ComponentAccessor.commentManager
def comments = commentManager.getComments(issue)
def issueComments = []
comments.each { comment ->
issueComments.add(comment.getCreated().format("dd.MM.yy HH:mm") + ": " + comment.getBody())
}
def issueCommentsString = issueComments.join('- --- --- --- -')
when transfered via RESTClient/JSON to a sharepoint list, all carriage return/linefeed are lost. This makes short comments almost unreadable.
I did not yet figure out, how to circumvent this. Must be something in the receiving engine of sharepoint, which removes all CRLF from the input...
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Spend the day sharpening your skills in Atlassian Cloud Organization Admin or Jira Administration, then take the exam onsite. Already ready? Take one - or more - of 12 different certification exams while you’re in Anaheim at Team' 25.
Learn more
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.