如何获取缺陷字段真实数据类型及允许值,解决pyral返回与UI不一致问题
pyral 1.4.2 字段类型与UI不一致的解决方案
类型不一致的原因
pyral的typedef()方法返回的是Rally REST API底层的存储属性类型,并非UI层的渲染控件类型,因此会出现下拉字段返回Rating/String而非DROP_DOWN的情况,二者属于不同层级的定义,不存在接口返回错误的问题。
从现有响应中映射UI显示的真实类型
你可以直接通过typedef()或schema接口返回的字段属性,自行映射得到和UI一致的类型,映射规则如下:
- 字段存在非空
AllowedValues属性,且AttributeType为STRING/RATING→ 对应UI的DROP_DOWN - 字段存在非空
AllowedValues属性,且AttributeType为COLLECTION→ 对应UI的MULTI_SELECT_DROP_DOWN AttributeType为BOOLEAN→ 对应UI的CHECKBOXAttributeType为DATE→ 对应UI的DATE_PICKERAttributeType为TEXT→ 对应UI的MULTI_LINE_TEXT- 其他基础类型直接用
AttributeType的值即可,和UI显示一致
获取缺陷全量字段、类型、允许值的方法
直接使用pyral内置的getSchema()方法即可,返回内容比typedef()更完整,包含所有属性的元数据,示例代码如下:
from pyral import Rally # 初始化Rally连接,替换为你自己的连接参数 rally = Rally( server="你的Rally服务地址", apikey="你的API密钥", workspace="你的工作区名称", project="你的项目名称" ) # 获取缺陷类型的完整schema defect_schema = rally.getSchema("Defect") for field in defect_schema.Attributes: # 字段显示名 field_label = field.DisplayName # 字段存储名 field_name = field.ElementName # 映射UI类型 ui_type = "" if hasattr(field, "AllowedValues") and len(field.AllowedValues) > 0: if field.AttributeType == "COLLECTION": ui_type = "MULTI_SELECT_DROP_DOWN" else: ui_type = "DROP_DOWN" elif field.AttributeType == "BOOLEAN": ui_type = "CHECKBOX" elif field.AttributeType == "DATE": ui_type = "DATE_PICKER" elif field.AttributeType == "TEXT": ui_type = "MULTI_LINE_TEXT" else: ui_type = field.AttributeType # 获取允许值,过滤已弃用的选项 allowed_values = [] if hasattr(field, "AllowedValues"): allowed_values = [val.StringValue for val in field.AllowedValues if not val.Deprecated] # 可根据需求处理输出或存储 print(f"字段显示名:{field_label},字段存储名:{field_name},UI类型:{ui_type},允许值:{allowed_values}")
注意事项
- 上述逻辑对系统字段和自定义字段都生效,自定义下拉、多选字段均可正确识别
- 关联类型字段(如用户、工作项关联)的
AttributeType为OBJECT,允许值可通过对应对象的schema二次查询获取
内容的提问来源于stack exchange,提问作者A622
相关产品推荐
相关产品推荐

