This article shows examples of syncing Insight custom fields.
Exalate can sync custom fields created in Insight.
Syncing an Insight Custom Field
In this example, we sync an Assets custom field.
Source Side
Outgoing sync
// SETTINGS
final def insightCustomFieldName = "Assets"
// END SETTINGS
replica.customKeys.
"My Custom Field values as Strings" = issue.customFields[insightCustomFieldName]?.value?.collect{
v ->
def cfm = com.atlassian.jira.component.ComponentAccessor.getCustomFieldManager()
def cf = cfm.getCustomFieldObject(issue.customFields[insightCustomFieldName].id)
def cft = cf.getCustomFieldType()
def vStr = cft.getStringFromSingularObject(v)
vStr
}Destination Side
Incoming sync
// SETTINGS
final def insightCustomFieldName = "Assets"
// END SETTINGS
issue.customFields[insightCustomFieldName].value = replica.customKeys.
"My Custom Field values as Strings".collect {
String vStr ->
def cfm = com.atlassian.jira.component.ComponentAccessor.getCustomFieldManager()
def cf = cfm.getCustomFieldObject(issue.customFields[insightCustomFieldName].id)
def cft = cf.getCustomFieldType()
def v = cft.getSingularObjectFromString(vStr)
v
}Syncing Multiple Insight Custom Fields
In this example, we show how to synchronize 5 Insight custom fields:
CMDB CustomerCMDB SLAContractCMDB SimulatorCMDB SiteCMDB User
Source Side
Outgoing sync
// Insight Custom Fields to replicate
final def insightCMDBCustomer = "CMDB Customer"
final def insightCMDBSLAContract = "CMDB SLAContract"
final def insightCMDBSimulator = "CMDB Simulator"
final def insightCMDBSite = "CMDB Site"
final def insightCMDBUser = "CMDB User"
final def insightFields = [insightCMDBCustomer, insightCMDBSLAContract, insightCMDBSimulator, insightCMDBSite, insightCMDBUser]
// General Data
replica.key = issue.key
replica.type = issue.type
replica.assignee = issue.assignee
replica.reporter = issue.reporter
replica.summary = issue.summary
replica.description = issue.description
replica.labels = issue.labels
replica.comments = issue.comments
replica.resolution = issue.resolution
replica.status = issue.status
replica.parentId = issue.parentId
replica.priority = issue.priority
replica.attachments = issue.attachments
replica.project = issue.project
replica.components = issue.components
//log.warn("Insight: ${issue.customFields[insightCMDBCustomer]?.value?.getValue()}")
insightFields.forEach() { insf ->
//log.warn(insf)
replica.customKeys."${insf}" = issue.customFields[insf]?.value?.collect { v ->
//log.warn("""Insight: Field "${insf}", Value "${v?.getName()}" """)
v?.getName()
}
}Destination Side
Incoming sync
if(firstSync){
// If it's the first sync for an issue (local issue does not exist yet)
// Set project key from source issue, if not found set a default
issue.projectKey = "L3HSUPPORTM"
// Set type name from source issue, if not found set a default
//issue.typeName = "Service Request"
issue.typeName = nodeHelper.getIssueType(replica.type?.name, issue.projectKey)?.name ?: "Service Request"
}
issue.summary = replica.summary
issue.description = replica.description
issue.labels = replica.labels
// Comments
//issue.comments = commentHelper.mergeComments(issue, replica)
replica.addedComments.each { it.executor = nodeHelper.getUserByUsername(it.author?.username) }
replica.changedComments.each { it.executor = nodeHelper.getUserByUsername(it.updateAuthor?.username) }
issue.comments = commentHelper.mergeComments(issue, replica, { it })
// issue.comments = commentHelper.mergeComments(issue, replica)
// Attachments
issue.attachments = attachmentHelper.mergeAttachments(issue, replica)
// Components
issue.components = replica.components.collect{
nodeHelper.createComponent(
issue,
it.name,
it.description,
it.leadKey,
it.assigneeType.name()
)
}
// Insight Custom Fields to replicate
final def insightCMDBCustomer = "CMDB Customer"
final def insightCMDBSLAContract = "CMDB SLAContract"
final def insightCMDBSimulator = "CMDB Simulator"
final def insightCMDBSite = "CMDB Site"
final def insightCMDBUser = "CMDB User"
final def insightFields = [insightCMDBCustomer, insightCMDBSLAContract, insightCMDBSimulator, insightCMDBSite, insightCMDBUser]
final def sdCMDBDetails = "SD CMDB Details"
//log.warn("""Insight: ${replica.customKeys."${insightCMDBCustomer}"?.value.join("\n")} """)
issue.customFields[sdCMDBDetails].value = """
||CMDB Customer |${replica.customKeys."${insightCMDBCustomer}"?.value?.join("\n") ?: " " }|
||CMDB SLAContract|${replica.customKeys."${insightCMDBSLAContract}"?.value?.join("\n") ?: " " }|
||CMDB Simulator |${replica.customKeys."${insightCMDBSimulator}"?.value?.join("\n") ?: " " }|
||CMDB Site |${replica.customKeys."${insightCMDBSite}"?.value?.join("\n") ?: " " }|
||CMDB User |${replica.customKeys."${insightCMDBUser}"?.value?.join("\n") ?: " " }|
"""