如何从VendorBalanceSummary DAC获取余额值并在Checks and Payments界面展示
解决"Invalid Object Name VendorBalanceSummary"错误的步骤
1. 确认DAC引用与命名空间
确保代码中正确引入VendorBalanceSummary所在的命名空间,该DAC属于应付模块核心类:
using PX.Objects.AP;
未正确引用会导致编译器无法识别DAC,进而在数据库查询阶段触发对象不存在的错误。
2. 不要直接把选择器绑定到VendorBalanceSummary
VendorBalanceSummary是基于APVendorBalance视图构建的汇总型DAC,并非物理数据表,不适合直接作为选择器数据源。推荐两种正确获取余额的方式:
- 字段更新事件中查询余额:在Checks and Payments(APCheck)的图中,通过VendorID直接查询余额并赋值到界面字段:
public virtual void APCheck_VendorID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) { APCheck row = e.Row as APCheck; if (row?.VendorID == null) return; VendorBalanceSummary balance = VendorBalanceSummary.PK.Find(Base, row.VendorID); if (balance != null) { // 将余额赋值到自定义字段(需提前在APCheckExt中定义usrVendorBalance) cache.SetValueExt<APCheckExt.usrVendorBalance>(row, balance.CuryBalance); } }
- 选择器关联展示余额:将选择器绑定到Vendor主DAC,通过关联查询在选择器中附带余额字段:
[PXSelector( typeof(Search<Vendor.bAccountID>), typeof(Vendor.acctCD), typeof(Vendor.acctName), typeof(VendorBalanceSummary.curyBalance), SubstituteKey = typeof(Vendor.acctCD), DescriptionField = typeof(Vendor.acctName) )] [PXUIField(DisplayName = "Vendor")] public virtual int? VendorID { get; set; }
3. 验证底层视图存在
检查Acumatica数据库中是否存在APVendorBalance视图(VendorBalanceSummary对应的底层数据库对象)。若视图缺失,需重新发布Acumatica系统的数据库脚本,或通过实例维护工具修复数据库结构。
4. 清除缓存并重新发布
- 进入系统Maintenance页面,执行Clear Cache操作清除应用程序缓存
- 重新发布自定义项目,确保DAC元数据正确同步到数据库
5. 检查权限配置
确认当前操作的用户角色拥有APVendorBalance视图的Read权限,可在Security Roles的权限设置中添加对应视图的访问权限。
内容的提问来源于stack exchange,提问作者AcumaticaZ
相关产品推荐
相关产品推荐

