Script Fields in Jira Service Management
Add your ScriptRunner script fields to a Service Management customer portal request form.
Scripting Service Management
Here are some limited examples for scripting Jira Service Management.
Getting comment visibility levels
Service Management uses entity properties for whether the comment is internal or not, amongst other things.
This is fortunate as it means we don't need to use the JSD API directly.
From a workflow function
The following code will get the visibility of a comment this transition, and is suitable to be used for the condition field of validators and post-function built-in scripts (such as Sending a Custom Email):
import groovy.json.JsonParserType
import groovy.json.JsonSlurper
def commentProperties = transientVars["commentProperty"] as String[]
def isInternalComment = false
if (commentProperties) {
def commentProperty = commentProperties.first()
def props = new JsonSlurper().setType(JsonParserType.LAX).parseText(commentProperty)
isInternalComment = props.find { it.key == "sd.public.comment" }?.get("value")?.get("internal")
}
isInternalComment.toBoolean()From an event listener
Given an event listener listening for the Issue Commented event, the following code will yield the visibility level of the comment just added:
import com.atlassian.jira.bc.issue.comment.property.CommentPropertyService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.comments.Comment
import groovy.json.JsonSlurper
final SD_PUBLIC_COMMENT = "sd.public.comment"
def user = event.getUser()
def comment = event.getComment()
def commentPropertyService = ComponentAccessor.getComponent(CommentPropertyService)
def isInternal = { Comment c ->
def commentProperty = commentPropertyService.getProperty(user, c.id, SD_PUBLIC_COMMENT)
.getEntityProperty().getOrNull()
if (commentProperty) {
def props = new JsonSlurper().parseText(commentProperty.getValue())
(props['internal'] as String).toBoolean()
} else {
null
}
}
if (comment) {
return isInternal(comment)
}
falseReusing this isInternal closure above, you can find all internal/external comments etc:
// Example: find all _external_ comments on issue
log.debug issue.comments.findAll { it.isPublic() }
// iterate comments and check external property
issue.comments.each {
log.debug("Comment on issue ${issue.key}, id: ${it.id}, is public: ${it.isPublic()}")
}See Adding comments in Jira Service Management for information on creating internal comments and checking the visibility of comments.