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

为何无法实现与账单及调整屏幕一致的货币选择器?需补充哪些配置?

问题排查: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:01:27