在 Jira 的 ScriptRunner Listener 中,我收到此错误....
2023-11-27 08:52:23.844 信息 - 将对象序列化为“接口 java.util.List” 2023-11-27 08:52:23.915 INFO - GET /rest/api/2/field asObject 请求持续时间:955ms 2023-11-27 08:52:24.116 错误 - 无法在第 25 行的空对象上获取属性“accountId” 2023-11-27 08:52:24.120 错误 - 类:com.adaptavist.sr.cloud.events.WebhookExecution,配置:null
我的脚本看起来像这样......
def customFields = get("/rest/api/2/field")
.asObject(List)
.body
.findAll { (it as Map).custom } as List<Map>
//to check the listener is only applied to the correct project and issue type
def projectKey = "SIG"
if (issue == null || ((Map) issue.fields.project).key != projectKey || issue.fields.issuetype.name != 'Service Request with Approvals') {
logger.info("Wrong Project ${issue.fields.project.key} or not a SR with Approvals")
return
}
def ADManagerCfId = customFields.find { it.name == 'AD Manager' }?.id
def ApproversCfId = customFields.find { it.name == 'Approvers' }?.id
//get the values from your issues
def ADManager = issue.fields[ADManagerCfId] as Map
def ApproversName = issue.fields[ApproversCfId] as Map
//update the issue with the new approver
put("/rest/api/2/issue/${issue.key}")
.header("Content-Type", "application/json")
.body([
fields: [
"${ApproversCfId}": [ //You need here to interpolate ApproversCfId as a String
['accountId': ADManager.accountId]
]
]
])
.asString()
logger.info ("Updated Approver with ${ADManager.accountId}")
期望是...
在 Jira 中创建问题记录后,脚本应该将 AD Manager 字段的值复制到
批准者字段。
我做错了什么?我该如何修复该错误?
问候,
重要的错误行是:
Cannot get property 'accountId' on null object on line 25
意思是在你的代码第25行,看起来就是那个:
['accountId': ADManager.accountId]
错误消息指出它无法从变量中访问/获取名为
accountId
的属性,因为它是 null
(该变量中没有存储任何值)。
因此,我们需要检查
ADManager
变量在哪里以及为什么会变成 null
。
该变量是在该行中引入的:
def ADManager = issue.fields[ADManagerCfId] as Map
假设
ADManagerCfId
具有正确的值,我看到的只是该字段在该问题上根本没有设置的情况。结果是从 null
获取 issue.fields[ADManagerCfId]
值并将其存储在 ADManager
变量中。
让我们检查依赖的
ADManagerCfId
变量以及它是否可以获得错误的值。该变量是在该行中引入的:
def ADManagerCfId = customFields.find { it.name == 'AD Manager' }?.id
对于这个,我看到的只是一种场景,它找不到具有指定名称的自定义字段
AD Manager
。您可能需要仔细检查该字段的名称是否正确。此外,我建议不要使用字段名称,而是直接使用字段 ID。当有人重命名字段时,会更改字段名称,但不会更改字段 ID。因此,对于脚本来说,使用字段 id 更安全。
通过直接使用字段 id,您最终还可以节省自己的请求调用并节省运行时间。因此,双重建议使用字段 ID 而不是字段名称。 ;)
根据所提供的信息,我能看到和说出的就是这些。 :)