PWA发布项目文件遇Decimal溢出错误,求助定位问题字段
解决方案:定位PWA保存时Decimal溢出的自定义字段
从错误堆栈可以明确,问题是自定义字段的公式计算结果超出了Decimal类型的取值范围(Decimal支持的范围是±79,228,162,514,264,337,593,543,950,335),导致在序列化项目数据时触发System.OverflowException。以下是定位具体字段的方法:
1. 查看ULS日志获取精确字段信息
错误中包含作业唯一标识uid='9c3411fb-afa1-ef11-bd96-00155d88b404',在Project Server的ULS日志中搜索该GUID,会找到更详细的错误上下文,其中通常会包含触发溢出的自定义字段ID或名称。
2. 使用PowerShell批量排查自定义字段
通过PowerShell脚本可以导出项目中所有带公式的自定义字段,结合字段的公式逻辑初步筛选高风险字段:
# 加载Project Server模块 Import-Module Microsoft.ProjectServer.PowerShell -ErrorAction Stop # 连接到PWA站点 $pwaSiteUrl = "http://your-pwa-site-url" Connect-PSServiceApplication -Url $pwaSiteUrl # 获取目标项目 $projectName = "Your Project Name" $project = Get-SPProject -Name $projectName # 获取项目中的自定义字段 $customFields = Get-SPProjectCustomField | Where-Object { $_.Formula -ne $null } # 输出带公式的自定义字段信息 $customFields | Select-Object Name, Id, Formula, TypeName | Format-Table -AutoSize
重点关注那些包含大数运算、累加/累乘大量数值、除法产生极小值的公式字段。
3. 逐步禁用排查法
- 先在PWA中禁用所有带公式的自定义字段,尝试保存项目,确认错误消失。
- 然后逐个重新启用字段,每次保存项目,直到错误再次触发,此时启用的字段就是问题字段。
- 若项目在Project Desktop中可打开,也可以在桌面端逐个检查自定义字段的计算值,直接查看是否有超出Decimal范围的数值。
4. 检查字段数据类型匹配
确保自定义字段的数据类型与公式返回值匹配:
- 如果公式返回的是浮点型大数,避免使用Decimal类型字段,改用Number类型(但注意Number类型的精度限制)。
- 调整公式逻辑,增加数值范围校验(比如用
ROUND函数限制小数位数,或添加条件判断避免超出范围)。
内容的提问来源于stack exchange,提问作者Feffo
相关产品推荐
相关产品推荐

