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

能否从多个UE脚本访问NetSuite的Script Parameters?配置共享咨询

跨UE脚本共享配置设置的解决方案

这个问题我之前碰过好多次,Acumatica的Script Parameters确实是绑定单个脚本的,跨脚本用就得重复创建,既麻烦还容易出现配置不一致的情况。给你两个最靠谱的解决思路,按需选就行:

方案一:扩展系统公司偏好字段(最简便)

直接在Setup/Company/General Preferences里加一个自定义字段,把共享配置存在这里,所有UE脚本都能读取这个值,完全不用重复维护参数。

步骤1:扩展Company DAC

在自定义项目里添加对Company DAC的扩展,新增你的共享配置字段:

public class CompanyExt : PXCacheExtension<PX.Objects.CR.Company>
{
    #region UsrSharedConfigSetting
    [PXString(100)] // 根据实际需求调整字段类型和长度
    [PXUIField(DisplayName = "全局共享配置")]
    public virtual string UsrSharedConfigSetting { get; set; }
    public abstract class usrSharedConfigSetting : PX.Data.BQL.BqlString.Field<usrSharedConfigSetting> { }
    #endregion
}

步骤2:在界面上添加配置控件

打开CompanyMaint的ASPX页面(Setup/Company/General Preferences对应的屏幕),在合适的位置(比如General标签页)添加这个自定义字段的输入控件:

<px:PXTextEdit ID="edUsrSharedConfigSetting" runat="server" DataField="UsrSharedConfigSetting" />

步骤3:在任意UE脚本中读取值

不管是哪个记录的UE脚本,都可以通过以下方式获取这个全局配置:

public class SalesOrderUEScript : PXGraphExtension<SOOrderEntry>
{
    protected void _(Events.RowSelected<SOOrder> e)
    {
        if (e.Row == null) return;
        
        // 获取当前公司的配置值
        Company currentCompany = Base.Company.Current;
        if (currentCompany != null)
        {
            var sharedSetting = currentCompany.GetExtension<CompanyExt>().UsrSharedConfigSetting;
            // 这里就可以用这个配置值做逻辑处理了
            PXTrace.WriteInformation($"当前全局配置值:{sharedSetting}");
        }
    }
}

方案二:创建独立的共享配置屏幕(适合多配置场景)

如果你的共享配置不止一个,或者不想把自定义字段加到Company DAC里,可以单独做一个配置维护屏幕,专门存储跨脚本的共享设置。

步骤1:创建共享配置DAC

新建一个专门存储共享设置的DAC:

[Serializable]
public class GlobalSharedSettings : IBqlTable
{
    #region SettingID
    [PXDBIdentity(IsKey = true)]
    public virtual int? SettingID { get; set; }
    public abstract class settingID : PX.Data.BQL.BqlInt.Field<settingID> { }
    #endregion

    #region UsrOrderAutoApprovalThreshold
    [PXDecimal]
    [PXUIField(DisplayName = "订单自动审批阈值")]
    public virtual decimal? UsrOrderAutoApprovalThreshold { get; set; }
    public abstract class usrOrderAutoApprovalThreshold : PX.Data.BQL.BqlDecimal.Field<usrOrderAutoApprovalThreshold> { }
    #endregion

    #region UsrEmailNotificationEnabled
    [PXBool]
    [PXUIField(DisplayName = "启用邮件通知")]
    public virtual bool? UsrEmailNotificationEnabled { get; set; }
    public abstract class usrEmailNotificationEnabled : PX.Data.BQL.BqlBool.Field<usrEmailNotificationEnabled> { }
    #endregion
}

步骤2:创建配置维护图

新建一个简单的维护图,让用户可以在后台编辑这些配置:

public class GlobalSharedSettingsMaint : PXGraph<GlobalSharedSettingsMaint>
{
    // 因为是全局配置,一般只需要一条记录,所以用SelectSingle
    public PXSelectSingle<GlobalSharedSettings> SharedSettings;

    // 可以加个初始化逻辑,如果没有记录就自动创建一条
    protected override void Initialize()
    {
        base.Initialize();
        if (SharedSettings.Current == null)
        {
            SharedSettings.Insert(new GlobalSharedSettings());
        }
    }
}

步骤3:在UE脚本中读取配置

在任意脚本里直接查询这个配置DAC的记录即可:

public class PurchaseOrderUEScript : PXGraphExtension<POOrderEntry>
{
    protected void _(Events.RowInserted<POOrder> e)
    {
        if (e.Row == null) return;
        
        // 获取全局配置
        GlobalSharedSettings settings = PXSelectSingle<GlobalSharedSettings>.Select(Base);
        if (settings != null)
        {
            bool enableNotify = settings.UsrEmailNotificationEnabled ?? false;
            decimal approvalThreshold = settings.UsrOrderAutoApprovalThreshold ?? 0;
            
            // 根据配置执行逻辑
            if (enableNotify && e.Row.OrderTotal > approvalThreshold)
            {
                // 发送审批通知的逻辑
            }
        }
    }
}

两种方案对比

方案优点适用场景
扩展Company字段配置入口直观(用户熟悉的系统偏好页面),代码量少少量跨脚本共享配置
独立配置屏幕配置集中管理,不污染系统原有DAC,扩展性强多个共享配置、需要分类管理的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:03:05