Jira-Scripte/Postfunctions/[CoE] Copy ADF field to linked CSD ticket.groovy

63 lines
1.9 KiB
Groovy

import utils.LinkedIssueTransitions
import utils.FieldCopy
final String LINK_TYPE_NAME = "is cloned by"
final String TARGET_PROJECT_KEY = "CSD"
final String SOURCE_FIELD_ID = "customfield_11501" // ADF
final String TARGET_FIELD_ID = "customfield_11501"
final String LOG_PREFIX = "[CopyField->LinkedIssue]"
def sourceKey = issue?.key?.toString()
if (!sourceKey) {
logger.warn("${LOG_PREFIX} Kein issue.key im Kontext. Abbruch.")
return
}
// Source laden: Links + Feld
def issueResp = get("/rest/api/3/issue/${sourceKey}")
.queryString("fields", "issuelinks,${SOURCE_FIELD_ID}")
.asObject(Map)
if (issueResp.status != 200) {
logger.warn("${LOG_PREFIX} Konnte ${sourceKey} nicht laden (${issueResp.status}). Body=${issueResp.body}")
return
}
def sourceJson = issueResp.body
// Ziel ermitteln
def targetKey = LinkedIssueTransitions.findSingleLinkedTargetKey(
sourceJson,
LINK_TYPE_NAME,
TARGET_PROJECT_KEY
)
if (!targetKey) {
logger.warn("${LOG_PREFIX} Kein eindeutiges Ziel-Ticket gefunden (erwartet genau 1 Link ins Projekt ${TARGET_PROJECT_KEY}). Abbruch.")
return
}
// Feldwert lesen (ADF)
def value = FieldCopy.getFieldValue(sourceJson, SOURCE_FIELD_ID)
// Falls leer: Ziel unverändert lassen
if (value == null) {
logger.warn("${LOG_PREFIX} Source-Feld ${SOURCE_FIELD_ID} ist null/leer in ${sourceKey}. Zielfeld bleibt unverändert.")
return
}
logger.info("${LOG_PREFIX} Kopiere ${SOURCE_FIELD_ID} von ${sourceKey} nach ${targetKey}")
def body = FieldCopy.buildSingleFieldUpdateBody(TARGET_FIELD_ID, value)
def putResp = put("/rest/api/3/issue/${targetKey}")
.header("Content-Type", "application/json")
.body(body)
.asObject(Map)
if (putResp.status == 204) {
logger.info("${LOG_PREFIX} OK: Feld ${TARGET_FIELD_ID} in ${targetKey} aktualisiert.")
} else {
logger.warn("${LOG_PREFIX} Feld-Update fehlgeschlagen: status=${putResp.status}, body=${putResp.body}")
}