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

业务账户(CR303000)主联系人邮箱验证实现技术问询

在Acumatica CR303000(业务账户页面)的RowPersisting事件中验证主联系人邮箱

别用你之前尝试的Base.GetExtension<PrimaryContactGraphExt>().PrimaryContactCurrent,这个自定义图扩展可能未正确部署、引用,或者并非全局可用。正确的做法是直接通过业务账户(BAccount)DAC的标准关联字段获取主联系人记录,以下是具体实现步骤:

实现代码

创建BusinessAccountMaint图的扩展类,重写BAccount的RowPersisting事件:

public class BusinessAccountMaintExt : PXGraphExtension<BusinessAccountMaint>
{
    protected virtual void _(Events.RowPersisting<BAccount> e)
    {
        if (e.Row == null) return;

        // 获取业务账户关联的主联系人ID
        int? primaryContactId = e.Row.PrimaryContactID;
        if (!primaryContactId.HasValue)
        {
            throw new PXException("请先设置业务账户的主联系人");
        }

        // 查询主联系人的完整记录
        Contact primaryContact = PXSelect<Contact, 
            Where<Contact.contactID, Equal<Required<Contact.contactID>>>>
            .Select(Base, primaryContactId);

        if (primaryContact == null)
        {
            throw new PXException("关联的主联系人记录不存在,请检查数据有效性");
        }

        // 验证邮箱是否已填写
        if (string.IsNullOrWhiteSpace(primaryContact.Email))
        {
            // 抛出字段级错误,错误提示会关联到主联系人的邮箱字段(若页面有显示)
            throw new PXSetPropertyException<Contact.email>("主联系人必须填写邮箱地址", PXErrorLevel.Error);
        }
    }
}

关键说明

  • 标准关联查询:通过BAccount.PrimaryContactID直接关联Contact DAC,这是Acumatica内置的业务关系,无需依赖自定义扩展,稳定性更高。
  • 错误类型选择:使用PXSetPropertyException会将错误定位到Contact.Email字段(如果页面上主联系人面板包含邮箱控件),用户体验更友好;若只需全局提示,可改用PXException。
  • 触发时机:RowPersisting事件会在记录保存到数据库前触发,确保验证逻辑在数据持久化前执行。

内容的提问来源于stack exchange,提问作者Kyle S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:25:58