为何无法实现与账单及调整屏幕一致的货币选择器?需补充哪些配置?
问题排查:Task屏幕自定义货币字段样式与Bills and Adjustments不一致
以下是可能的错误点及需要补充的配置,帮你对齐系统原生货币字段的样式与功能:
1. 数据视图(DataView)关联错误
Bills and Adjustments中PXCurrencyRate控件依赖的_Currency_是系统预设的关联视图,你当前的Graph配置存在视图名称不匹配的问题:
- 你在ASPX中指定
DataMember="_Currency_",但Graph中只定义了currencyinfo视图,缺少同名的_Currency_视图 - 修正后的Graph视图代码:
// 与ASPX的DataMember="_Currency_"对应 public PXSelect<CurrencyInfo, Where<CurrencyInfo.curyInfoID, Equal<Current<CRActivity.UsrCuryInfoID>>>> _Currency_; // 与ASPX的RateTypeView="currencyinfo"对应(注意视图名称大小写敏感) public PXSelect<CurrencyInfo, Where<CurrencyInfo.curyInfoID, Equal<Current<CRActivity.UsrCuryInfoID>>>> currencyinfo;
2. DAC字段属性与联动逻辑缺失
确保CRActivity上的自定义字段配置符合系统标准,同时补充货币选择时的联动逻辑:
DAC字段配置
[PXDBString(5, IsUnicode = true)] [PXUIField(DisplayName = "Currency")] [PXSelector(typeof(Currency.curyID), typeof(Currency.curyDescription), DescriptionField = typeof(Currency.curyDescription))] public virtual string UsrCuryID { get; set; } public abstract class usrCuryID : PX.Data.BQL.BqlString.Field<usrCuryID> { } [PXDBInt] [PXUIField(DisplayName = "Currency Info ID", Visible = false)] public virtual int? UsrCuryInfoID { get; set; } public abstract class usrCuryInfoID : PX.Data.BQL.BqlInt.Field<usrCuryInfoID> { }
Graph联动事件
添加字段更新事件,确保选择UsrCuryID时自动填充UsrCuryInfoID:
protected virtual void CRActivity_UsrCuryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) { CRActivity row = e.Row as CRActivity; if (row?.UsrCuryID == null) return; Currency currency = PXSelect<Currency, Where<Currency.curyID, Equal<Required<Currency.curyID>>>>.Select(Base, row.UsrCuryID); if (currency != null) { CurrencyInfo info = PXSelect<CurrencyInfo, Where<CurrencyInfo.curyID, Equal<Required<CurrencyInfo.curyID>>>>.Select(Base, currency.CuryID); if (info != null) { row.UsrCuryInfoID = info.CuryInfoID; } } }
3. ASPX布局结构不匹配
系统原生货币字段的样式依赖特定的布局容器,检查你的ASPX代码是否放在正确的容器内:
- 确保
PXCurrencyRate控件嵌套在PXFormView的模板中,且遵循系统的布局规则:<px:PXFormView ID="formCRActivity" runat="server" DataSourceID="ds" DataMember="Current"> <Template> <px:PXLayoutRule ID="PXLayoutRule1" runat="server" StartRow="True" /> <pxa:PXCurrencyRate ID="edUsrCury" DataField="UsrCuryID" runat="server" RateTypeView="currencyinfo" DataMember="_Currency_" DataSourceID="ds" /> </Template> </px:PXFormView> - 不需要额外添加
PXDSCallbackCommand,PXCurrencyRate控件会自动处理货币信息的回调刷新
4. 缓存权限配置补充
在Graph扩展的Initialize方法中添加缓存权限设置,确保货币信息视图只读:
public override void Initialize() { base.Initialize(); PXCache currencyInfoCache = Base.Caches[typeof(CurrencyInfo)]; currencyInfoCache.AllowInsert = false; currencyInfoCache.AllowUpdate = false; currencyInfoCache.AllowDelete = false; }
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

