将Jira时间戳字段同步至ServiceNow请求项遇字段未更新问题
Jira时间戳同步ServiceNow请求项无更新问题排查与解决
问题背景
此前已成功实现Jira自定义时间戳字段到ServiceNow问题模块的同步,现在尝试将同一字段同步至ServiceNow请求项(Request Item)时,执行代码无报错,但目标字段u_event_timestamp未得到更新。使用的同步代码如下:
if(replica.customFields.eventTimestamp && replica.customFields.eventTimestamp.value){ // Define timestamps def timestamps = replica.customFields.'eventTimestamp'.value // Set a date using the timestamp def date = new Date(timestamps.time) // Create a date format as desired SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-mm-dd hh:mm:ss") requestItem.u_event_timestamp = dateFormat.format(date) }
排查与解决步骤
1. 确认requestItem对象引用正确性
- 部分ServiceNow集成场景中,请求项的对象标识可能不是
requestItem,比如用ritm或需要从父请求关联获取。添加日志验证对象是否存在:log.info("Request Item object: ${requestItem}") log.info("Request Item sys_id: ${requestItem?.sys_id}") - 如果
requestItem为空,调整对象获取逻辑,例如从父请求中关联:def ritm = request.request_items?.first() if(ritm && replica.customFields.eventTimestamp?.value){ ritm.u_event_timestamp = new Date(replica.customFields.eventTimestamp.value.time) }
2. 验证Jira字段读取准确性
- 添加日志确认自定义字段的实际值,排查字段键名是否匹配(需用Jira自定义字段的内部键,而非显示名称):
log.info("Jira event timestamp value: ${replica.customFields.eventTimestamp?.value}") log.info("Timestamp time value: ${replica.customFields.eventTimestamp?.value?.time}")
3. 匹配ServiceNow字段类型
- 若
u_event_timestamp是ServiceNow日期时间类型字段,无需格式化字符串,直接传入Date对象:if(replica.customFields.eventTimestamp?.value){ requestItem.u_event_timestamp = new Date(replica.customFields.eventTimestamp.value.time) } - 若字段为字符串类型,修正日期格式(注意月份用大写
MM,24小时制小时用大写HH,避免格式不匹配):SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
4. 检查权限与字段可写性
- 确认集成使用的ServiceNow账号拥有请求项
u_event_timestamp字段的写入权限,且该字段未被设置为只读。
5. 查看详细同步日志
- 检查集成工具(如Exalate、JSM集成)的完整同步日志,确认代码块是否执行,是否存在隐性的字段约束或权限报错。
内容的提问来源于stack exchange,提问作者Francis Martens
相关产品推荐
相关产品推荐

