GLPI 10 REST API创建工单时预设日期字段失效问题
GLPI 10 REST API创建工单自定义日期字段被覆盖问题
问题原因
这是GLPI 10版本的正式逻辑变更,不是接口bug:
- GLPI 9版本没有对ITIL类对象(工单、问题、变更)的日期字段做写入限制,API传入的日期值可以直接写入数据库
- GLPI 10新增了ITIL对象日期自动计算逻辑,普通请求下
date_creation、solvedate、closedate、date_mod这类字段都属于受保护的自动填充字段,创建时会优先取date参数值,没传date就取当前请求时间覆盖所有自定义传入的日期值,避免非合规的日期数据写入。
解决方案
方案1:传参时加跳过校验标识(推荐,无需修改系统配置)
在请求的input结构中新增_skip_ticket_date_auto_calc参数,值设为true即可绕过自动日期覆盖逻辑,系统会原样保留你传入的所有日期字段值。
注意同步匹配工单状态,否则日期会被状态流转逻辑重置:
- 传入
solvedate时,status字段需设为已解决状态对应的ID(默认为5) - 传入
closedate时,status字段需设为已关闭状态对应的ID(默认为6)
修正后的请求参数示例:
{ "input": { "_users_id_requester": 12, "_skip_ticket_date_auto_calc": true, "_no_rule_matches": true, "date_creation": "2022-05-11 08:01:20", "closedate": "2022-05-12 08:03:09", "solvedate": "2022-05-13 08:03:09", "date_mod": "2022-05-14 08:03:09", "date": "2022-05-17 08:01:20", "content": "Ticket test GLPI10 pbm date", "users_id": 12, "itilcategories_id": 25, "name": "Test de pre set date", "type": 1, "status": 6 } }
额外加的
_no_rule_matches参数可以同步跳过系统业务规则匹配,避免迁移过程中规则自动修改工单字段,适合存量数据批量迁移场景。
方案2:全局开启历史日期写入权限
如果当前GLPI 10是早期小版本(10.0.0~10.0.3),上述参数不生效的话,可以通过后台配置放开限制:
- 登录GLPI后台,进入
设置 > 系统 > 接口配置 - 找到允许API写入ITIL对象历史日期选项,设置为启用
- 存量数据迁移完成后建议关闭该选项,避免日常使用中出现非法日期数据
注意事项
- 所有传入的日期必须严格遵循
Y-m-d H:i:s格式,不要带时区标识、毫秒后缀,否则会被识别为无效日期自动替换为当前时间 - 用于调用API的账号需要拥有工单的创建/编辑权限,否则受保护字段依然无法正常写入
内容的提问来源于stack exchange,提问作者Hugo Kremer
相关产品推荐
相关产品推荐

