Haufe x360环境下自定义字段API调用返回数据类型不匹配问题求助
解决Acumatica(Haufe x360)API返回自定义Int字段显示文本而非数值的问题
问题分析
你的自定义字段UsrKundengruppe(API中映射为Kundengruppe)在数据类里定义为PXDBInt并绑定了PXIntList提供下拉选项,但API返回的是下拉控件的显示文本(比如bis 25.000,- 0,00%),而非数据库存储的Int数值(比如1)。这是Acumatica REST API的默认行为:对于带选项列表的字段,默认返回用户可见的显示值,而非底层存储的原始值。
方法1:通过端点编辑器修改配置(无需代码)
这是最适合你的方案,完全不需要编写C#代码:
- 登录Acumatica系统,进入Customization > Endpoints(自定义 > 端点)
- 找到你正在使用的端点(包括你新建的专属端点),点击Edit进入编辑界面
- 在左侧实体列表中,定位到包含
UsrKundengruppe字段的业务实体(比如Customer或对应的数据实体) - 在右侧字段列表里找到
UsrKundengruppe(API中显示为Kundengruppe),点击字段的Settings按钮 - 在弹出的设置窗口中,找到
Return Display Value选项,将其设置为False,点击OK保存 - 保存整个端点配置,必要时重新发布端点
- 再次测试API调用,此时
Kundengruppe字段应该返回存储的Int数值(如{"value": "1"})
方法2:代码层面调整(如果方法1无效)
如果方法1没解决问题,你可以通过少量代码强制API返回存储值。按照以下步骤操作即可:
- 打开你的自定义项目(没有的话先创建一个)
- 找到定义
UsrKundengruppe字段的数据类文件 - 在字段属性上方添加
PXRestApiDisplayValue(false)属性,修改后的代码如下:
[PXRestApiDisplayValue(false)] // 新增该属性,强制API返回存储的数值 [PXDBInt] [PXIntList(new int[] {0,1,2,3,4,5,6,7,8}, new string[] {"bis 25.000,- 0,00%", "25.001,- bis 50.000,- 3,75%", "50.001,- bis 100.000,- 7,50%", "100.001,- bis 200.000,- 10,00%", "200.001,- bis 300.000,- 12,00%", "300.001,- bis 500.000,- 14,50%", "500.001,- bis 750.000,- 16,50%", "750.001,- bis 1.000.000,- 18,50%", "ab 1.000.000,- 20,00%"})] [PXUIField(DisplayName="Kundengruppe Jahresumsatz von - bis Rabatt")] public virtual int? UsrKundengruppe { get; set; } public abstract class usrKundengruppe : PX.Data.BQL.BqlInt.Field<usrKundengruppe> { }
- 保存代码并发布自定义项目
- 重新测试API调用,此时字段会返回你预期的Int数值
验证结果
修改完成后,API返回的Kundengruppe字段应该和你预期的格式一致:
{ "id": "4b2758c6-8d86-4357-871e-70621d09719d", "rowNumber": 3, "note": null, "Kundengruppe": { "value": "1" }, "UUID": {}, "custom": {} }
内容的提问来源于stack exchange,提问作者Ilham AR
相关产品推荐
相关产品推荐

