Acumatica自定义库存处理屏幕发布时出现编译错误,撤销变更后问题依旧
解决Acumatica自定义处理屏幕编译错误:找不到InventoryRawAttribute等类型
我碰到过好几次类似的问题,大概率是命名空间缺失或者Acumatica的动态缓存搞的鬼,给你几个具体的排查步骤:
1. 检查代码文件的命名空间引用
错误提示的IsKey、DisplayName、InventoryRawAttribute这些类型,分别属于Acumatica核心框架和库存模块的命名空间。你需要确保SOBackorderProcess.cs文件顶部添加了必要的using指令:
using PX.Data; // 包含IsKey、DisplayName等基础属性 using PX.Objects.IN; // 包含InventoryRawAttribute等库存相关属性
如果之前没加这些,哪怕你撤销了InventoryID列的变更,只要代码里有依赖这些属性的定义(比如编辑器自动生成的残留代码),编译器就会报错。
2. 清理Acumatica动态缓存(最关键的一步)
Acumatica的动态编译缓存经常会“记住”旧的错误代码,哪怕你已经撤销了变更。按以下步骤彻底清理:
- 重启对应Acumatica网站的IIS应用池
- 删除Acumatica网站根目录下的
App_Cache文件夹 - 删除
App_RuntimeCode\bin文件夹(如果存在) - 重新发布你的自定义项目
这一步能解决绝大多数“撤销变更后仍报错”的缓存残留问题。
3. 检查代码文件的残留内容
虽然你说撤销了添加InventoryID的变更,但还是要打开SOBackorderProcess.cs第28行附近仔细看看:有没有不小心留下的[InventoryRaw]、[IsKey]之类的属性标记?有时候可视化编辑器操作时会自动添加一些代码,可能没完全撤销干净。
4. 验证ASPX页面的数据源配置
确认ASPX页面里PXDataSource的TypeName属性是否正确指向你的处理类:
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="Plyler.SOBackorderProcess" PrimaryView="Processing" >
如果这里的类名或命名空间拼写错误,也可能触发编译时的关联错误。
5. 检查web.config的程序集引用
确保web.config里正确引用了Acumatica的核心和库存模块程序集,版本号要和你使用的Acumatica版本完全匹配:
<compilation debug="true" strict="false" explicit="true" targetFramework="4.7.2"> <assemblies> <add assembly="PX.Data, Version=你的Acumatica版本号, Culture=neutral, PublicKeyToken=null"/> <add assembly="PX.Objects.IN, Version=你的Acumatica版本号, Culture=neutral, PublicKeyToken=null"/> </assemblies> </compilation>
按照这个顺序排查,应该能快速解决你的编译错误。
内容的提问来源于stack exchange,提问作者MarkJoel60
相关产品推荐
相关产品推荐

