能否从多个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
相关产品推荐
相关产品推荐

