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

关于Acumatica中Current Company ID变量及自定义编程获取的技术问询

Acumatica中当前公司ID的变量及自定义编程获取方法

嘿,这个问题我太熟悉了!在Acumatica里,和当前公司ID相关的核心标识以及自定义代码里的获取方式,我给你梳理清楚:

核心变量说明

在Acumatica的框架中,当前登录用户所属公司的唯一ID对应的是Accessinfo.CompanyID——这是框架全局维护的关键属性,类型为int?(可空整数)。如果需要的是公司的显示代码(比如界面上的缩写标识),对应的则是Accessinfo.CompanyCD(字符串类型)。

自定义编程中获取当前公司ID的几种场景

1. 在自定义Graph类中直接获取

如果你是在继承自PXGraph的自定义业务逻辑类里开发,直接通过Base.Accessinfo就能拿到,示例代码:

public class MyCustomBusinessGraph : PXGraph<MyCustomBusinessGraph>
{
    public void ProcessCompanyRelatedData()
    {
        // 获取当前公司ID
        int? currentCompanyID = Base.Accessinfo.CompanyID;
        // 获取当前公司代码
        string currentCompanyCode = Base.Accessinfo.CompanyCD;

        // 后续业务逻辑...
        if (currentCompanyID.HasValue)
        {
            // 基于公司ID做数据筛选或操作
        }
    }
}

2. 在非Graph类的通用工具代码中获取

如果你的代码不在Graph类里(比如独立的工具类、通用逻辑类),可以通过PXContext静态类来获取当前的访问上下文信息,示例:

public static class CompanyHelper
{
    public static int? GetCurrentCompanyId()
    {
        // 注意空值判断,避免空引用
        return PXContext.Accessinfo?.CompanyID;
    }

    public static string GetCurrentCompanyCode()
    {
        return PXContext.Accessinfo?.CompanyCD;
    }
}

3. 在DAC字段的属性或事件中获取

如果需要在数据访问类(DAC)的字段默认值、验证逻辑里用到公司ID,有两种方式:

  • 直接用BQL表达式设置默认值:
public class MyCustomDAC : IBqlTable
{
    [PXDBInt]
    // 直接将当前公司ID设为字段默认值
    [PXDefault(typeof(AccessInfo.companyID))]
    public virtual int? CompanyID { get; set; }
    public abstract class companyID : PX.Data.BQL.BqlInt.Field<companyID> { }
}
  • 在字段事件中手动获取:
protected virtual void _(Events.FieldDefaulting<MyCustomDAC.companyID> e)
{
    if (!e.ExistingValue.HasValue)
    {
        // 通过缓存关联的Graph获取公司ID
        e.NewValue = e.Cache.Graph.Accessinfo.CompanyID;
    }
}

最后提醒一句:因为CompanyID是可空类型,在使用前务必做空值判断,避免出现空引用异常哦!

内容的提问来源于stack exchange,提问作者David Eichner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:02:53