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

Acumatica:如何校验SOSetup扩展自定义字段非空以限制销售订单表单使用

实现SOSetup扩展字段非空前置校验方案

你不需要修改现有SOSetup DAC扩展的基础逻辑,只要配合主图扩展加一段前置校验逻辑,就能实现「销售订单表单打开前检查自定义配置项是否为空,为空则引导跳转配置页」的预期效果。

核心逻辑说明

你之前接触的*PXPrimaryGraphAttribute*确实是实现这类前置跳转校验的正确手段,但它不能直接加在SOSetup的DAC扩展上——因为这个属性的作用是定义「打开某类表单时的前置图跳转规则」,我们要拦截的是打开销售订单(SOOrderEntry)表单的流程,所以校验逻辑需要绑定在销售订单对应的主图扩展上,而不是SOSetup的DAC上。

具体实现步骤

1. 保留现有SOSetup扩展不变

你当前编写的SOSetup扩展代码无需修改,其中的Required = true属性会在销售订单参数配置表单上自动做字段必填校验,是整套逻辑的基础:

public sealed class SOSetupExt : PXCacheExtension<SOSetup>
{
    [SalesPerson(DisplayName = "Enabled Default Salesperson", Required = true)]
    public int? UsrEnabledDefaultSalesperson { get; set; }
    public abstract class usrEnabledDefaultSalesperson : PX.Data.BQL.BqlInt.Field<usrEnabledDefaultSalesperson> { }
}

2. 新增销售订单主图扩展做前置校验

新建SOOrderEntry(销售订单表单对应的主图)的扩展类,用PXPrimaryGraphAttribute挂载自定义的前置检查方法:

public class SOOrderEntryFormExt : PXGraphExtension<SOOrderEntry>
{
    // 打开销售订单表单前的前置校验规则
    [PXPrimaryGraph(typeof(SOOrderEntry))]
    public static void ValidateSetupBeforeOpen(PXCache cache, SOSetup currentSetup, ref Type targetGraph, ref Dictionary<string, object> navParams)
    {
        // 读取SOSetup的扩展字段值
        var setupExt = PXCache<SOSetup>.GetExtension<SOSetupExt>(currentSetup);
        // 若自定义字段为空,触发内置的配置缺失提示,自动跳转销售订单参数配置页
        if (setupExt?.UsrEnabledDefaultSalesperson == null)
        {
            targetGraph = typeof(SOSetupMaint);
            throw new PXSetupIsRequiredException("Enabled Default Salesperson");
        }
    }
}

效果说明

  • 当配置项为空时,打开销售订单表单会直接弹出原生风格的配置缺失提示框,点击确认后自动跳转到销售订单参数配置页,和你预期的提示效果完全一致。
  • 当配置项已填值时,校验逻辑自动放行,正常进入销售订单表单。

注意事项

  • 这套逻辑不需要手动写查询SOSetup的代码,因为SOSetup是单例配置表,Acumatica会自动把当前系统里的配置行传入校验方法。
  • 内置的*PXSetupIsRequiredException*就是Acumatica原生用来做配置缺失提示的异常类,不需要自己写弹窗逻辑,直接抛出就能生成和系统原生一致的交互效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 09:06:09