You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jira 8.20.7 createmeta接口及Python Jira库无法返回全部自定义字段

解决方案:Jira 8.20.7 获取特定项目-工单类型完整字段映射

1. 先排查屏幕配置问题

createmeta接口默认仅返回对应工单类型创建屏幕上的字段。如果缺失的自定义字段(含ServiceDesk字段)未添加到Task类型的创建屏幕,肯定不会出现在返回结果里:

  • 进入项目配置字段页(/plugins/servlet/project-config/<PROJ>/fields)
  • 找到Task工单类型对应的屏幕方案,检查创建屏幕是否包含缺失字段
  • 若未添加,补充后重新调用createmeta接口即可获取这些字段

2. 单独获取ServiceDesk专属字段

ServiceDesk请求类型的专属字段不会出现在普通createmeta接口中,必须用ServiceDesk专属API获取:

步骤1:获取项目对应的ServiceDesk ID

GET /rest/servicedeskapi/servicedesk?projectKey=<PROJ>

从返回结果中提取id字段,即该项目的ServiceDesk ID。

步骤2:获取关联Task的请求类型ID

GET /rest/servicedeskapi/servicedesk/{serviceDeskId}/requesttype

找到与Task工单类型绑定的请求类型,提取其id(requestTypeId)。

步骤3:拉取该请求类型的所有字段

GET /rest/servicedeskapi/requesttype/{requestTypeId}/field

返回结果中每个字段包含唯一id和name,这就是SD专属的字段列表。

3. 合并字段映射并处理重复名称

将普通createmeta和ServiceDesk API的结果合并,按字段ID去重(ID全局唯一,不受名称重复影响):

Python示例代码

import requests

# 基础配置
jira_base = "https://your-jira-domain.com"
auth = ("your-username", "your-api-token")
proj_key = "<PROJ>"
issuetype_id = "<N>"

# 1. 获取普通createmeta字段映射
createmeta_url = f"{jira_base}/rest/api/2/issue/createmeta/{proj_key}/issuetype/{issuetype_id}?expand=projects.issuetypes.fields&includeAllFields=true"
createmeta_res = requests.get(createmeta_url, auth=auth).json()
createmeta_fields = createmeta_res["projects"][0]["issuetypes"][0]["fields"]
meta_mapping = {f["id"]: f["name"] for f in createmeta_fields.values()}

# 2. 获取ServiceDesk字段映射
# 2.1 拿ServiceDesk ID
sd_proj_url = f"{jira_base}/rest/servicedeskapi/servicedesk?projectKey={proj_key}"
sd_proj_res = requests.get(sd_proj_url, auth=auth).json()
sd_id = sd_proj_res[0]["id"]

# 2.2 拿关联Task的请求类型ID(自行匹配实际请求类型名称)
rt_url = f"{jira_base}/rest/servicedeskapi/servicedesk/{sd_id}/requesttype"
rt_res = requests.get(rt_url, auth=auth).json()
rt_id = [item["id"] for item in rt_res if item["name"] == "Task请求类型"][0]

# 2.3 拿SD字段
sd_fields_url = f"{jira_base}/rest/servicedeskapi/requesttype/{rt_id}/field"
sd_fields_res = requests.get(sd_fields_url, auth=auth).json()
sd_mapping = {f["id"]: f["name"] for f in sd_fields_res}

# 3. 合并完整映射
full_mapping = {**meta_mapping, **sd_mapping}

# 若需按名称分组(处理重复名称)
name_to_ids = {}
for fid, fname in full_mapping.items():
    name_to_ids[fname] = name_to_ids.get(fname, []) + [fid]

4. 权限注意事项

调用ServiceDesk API的账号必须拥有Service Desk Agent权限,否则会返回权限错误。

内容的提问来源于stack exchange,提问作者Phantom of Krankor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:36:23