You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Acumatica:自动化定制屏幕供应商字段时出错

解决从SO30300触发自动化时获取Bills and Adjustments供应商字段的报错问题

我之前也碰到过类似的上下文权限问题,结合你的描述——只有从发票界面(SO30300)触发操作时才会抛出“Vendor cannot be found in the system...”的错误,大概率是权限上下文、数据源引用或者界面会话冲突导致的,给你几个具体的排查和解决方向:

1. 确认权限的上下文一致性

当你从SO30300触发自动化时,系统默认会沿用当前发票界面的会话权限,而不是自动切换到Bills and Adjustments模块的权限。你需要:

  • 检查执行自动化的用户,是否同时拥有**SO30300(发票管理)和AP301000(账单与调整)**的模块访问权限,特别是供应商记录的查看权限(比如角色里要包含AP Vendor Inquiry权限)。
  • 如果是用自定义角色,确保角色权限里没有遗漏AP供应商的访问权限,有时候单独给了发票权限,但忘了关联AP模块的权限。

2. 检查供应商字段的引用逻辑

很多时候自动化脚本里的字段引用在不同界面上下文下会失效:

  • 别直接引用界面控件的ID,要通过DAC(数据访问类)来获取,比如用APInvoice.VendorID这种方式,而不是硬编码界面上的控件名称。
  • 如果是自定义屏幕,确认数据源绑定的是APInvoice的完整数据集,而不是依赖SO30300里的临时关联数据——毕竟发票界面的供应商数据和账单模块的可能不是同一个数据源。

3. 排查触发时的数据源传递问题

从SO30300触发时,可能没有正确传递或加载对应的账单数据:

  • 在自动化操作的开头,显式用PX查询加载对应的AP账单记录,比如:
    var apInvoice = PXSelect<APInvoice, Where<APInvoice.refNbr, Equal<Current<SOOrder.refNbr>>>>.Select(Base);
    
    确保能获取到完整的供应商关联信息,而不是依赖界面的临时数据。
  • 检查传递的关联参数(比如发票对应的账单编号)是否正确,有没有出现参数为空或者匹配错误的情况——如果参数错了,自然找不到对应的供应商。

4. 避免界面会话的上下文冲突

有时候SO30300的图表上下文会影响AP模块的数据加载:

  • 在自动化代码里,创建独立的AP图表实例,而不是复用当前SO界面的上下文,比如:
    var apGraph = PXGraph.CreateInstance<APInvoiceEntry>();
    var apDoc = apGraph.Document.Search<APInvoice.refNbr>(yourRefNbr);
    
    这样能确保用AP模块的独立会话来获取数据,避免权限或缓存冲突。
  • 尝试在操作前清除会话缓存,比如调用PXCache<APInvoice>.Clear(),有时候缓存的旧数据会导致权限判断异常。

5. 做个简单的权限验证测试

快速定位问题的方法:

  • 用同一个用户直接打开AP301000界面,找到对应的账单,查看供应商字段是否能正常显示。如果直接访问没问题,那肯定是自动化操作的上下文权限问题。
  • 在自动化代码里加个权限检查的逻辑,提前捕获问题:
    if (!PXAccess.HasPermission(typeof(APVendor), PXAccessRights.Select))
    {
        throw new PXException("当前用户没有供应商访问权限");
    }
    

内容的提问来源于stack exchange,提问作者joemar villaluna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:10:14