This article shows how to synchronize comments.
You can handle comments in different ways:
- merge local and received comments (this is a default behavior)
- filter comments
- format received comments
Source side
Outgoing sync
You can decide which comments to share:
Synchronize comments that have no group or role level assign
replica.comments = commentHelper.filterLocal(issue.comments)
Service Desk: Synchronize only public comments
replica.comments = issue.comments.findAll{!it.internal}
Make sure customer request type is assigned on the issue that you are synchronizing
Send only comments created by a certain user
//send only Luke Skywalker's comments replica.comments = issue.comments.findAll { comment -> comment.author.displayName == "Luke Skywalker" }
Destination side
Incoming sync
You can perform the following actions on comments locally:
- merge local and remote comments
- add remote comments
- filter: add comments created by a specific user
- format comments using custom formatting
You can add new comments and keep the existing comments updated using the mergeComments comment helper. This method would prepend the comment content with the author of the original comment. This is the default behavior.
issue.comments = commentHelper.mergeComments(issue, replica)
Apply received comments without custom formatting
The comment is added just with the body from the original comment, without the author of the original comment.
issue.comments = commentHelper.mergeComments(issue, replica, {it})
Create received comments as internal
issue.comments = commentHelper.mergeComments(issue, replica, {it.internal = true})
Add comments every time the comment on the remote side was edited
This is an example of the case, where comments editing is disabled, but you still want to get updates every time the remote comment was updated
issue.comments += replica.addedComments
Manipulate the comments via helper methods
With the help of commentHelper methods you can manipulate comments and define how to apply received comments on the local issue.
// Format each remote comment - add the author issue.comments = commentHelper.mergeComments(issue, replica, { comment -> comment.body = "[" + comment.author.displayName + "| email: " + comment.author.email + "]" + " commented: \n" + comment.body + "\n" } )
Gather statistic from comments
This is an example of groovy collection methods usage. It helps to get better control over the collection contents.
def numberOfCommentsPerAuthors = issue.comments.inject([:]) { result, comment -> def numberOfCommentsPerAuthor = result[comment.author.key] numberOfCommentsPerAuthor = numberOfCommentsPerAuthor ?: 0 result[comment.author.key] = numberOfCommentsPerAuthor + 1 result }
[
[ author:[key:"luke.skywalker"], body:"I'm a jedi knight, like my father before me" ],
[ author:[key:"darth.vader"], body:"I am your father!" ],
[ author:[key:"luke.skywalker"], body:"Noooooooooo!" ]
]
numberOfCommentsPerAuthors would be ["luke.skywalker" : 2,"darth.vader" : 1]