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

Acumatica问题:无法隐藏项目模块摘要标签页字段

问题:Acumatica项目模块摘要标签页字段隐藏失效问题

我正在尝试隐藏Acumatica项目模块摘要标签页的所有字段,大部分字段可通过以下代码实现隐藏:

protected void PMProject_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
    PXUIFieldAttribute.SetVisible<PMProject.automaticReleaseAR>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PMProject.retainageMode>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PMProject.includeCO>(cache, row, false);
    PXUIFieldAttribute.SetVisible<CN.CacheExtensions.ContractExt.allowNonProjectAccountGroups>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PX.Objects.CT.ContractExt.usrBond>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PX.Objects.CT.ContractExt.usrLastDateOnJob>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PX.Objects.CT.ContractExt.usrBilledCompleteDate>(cache, row, false);
}

但以下代码在其他场景可正常运行,在此处却无法生效:

// 计费与分配设置
Base.Billing.AllowSelect = false;
Base.Billing.Cache.AllowSelect = false;
Base.Caches[typeof(ContractBillingSchedule)].AllowSelect = false;

PXUIFieldAttribute.SetVisible<PX.Objects.CT.ContractBillingSchedule.type>(cache, row, false);
PXUIFieldAttribute.SetVisible<ContractBillingSchedule.nextDate>(cache, row, false);
PXUIFieldAttribute.SetVisible<ContractBillingSchedule.lastDate>(cache, row, false);
PXUIFieldAttribute.SetVisible<PMProjectExtension.payrollWorkLocationID>(cache, row, false);

// 保留金
Base.ProjectRevenueTotals.Cache.AllowSelect = false;
PXUIFieldAttribute.SetVisible<PMProjectRevenueTotal.curyRevisedAmount>(cache, row, false);
PXUIFieldAttribute.SetVisible<PMProjectRevenueTotal.contractCompletedWithCOPct>(cache, row, false);
PXUIFieldAttribute.SetVisible<PMProjectRevenueTotal.curyTotalRetainedAmount>(cache, row, false);
}

(附:项目摘要标签页截图)

解决方案

1. 处理Billing与ContractBillingSchedule相关内容

ContractBillingSchedule是子数据视图,无法直接通过PMProject的缓存设置字段可见性,需单独为其编写RowSelected事件逻辑:

protected void ContractBillingSchedule_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
    var row = e.Row as ContractBillingSchedule;
    if (row == null) return;
    
    PXUIFieldAttribute.SetVisible<ContractBillingSchedule.type>(cache, row, false);
    PXUIFieldAttribute.SetVisible<ContractBillingSchedule.nextDate>(cache, row, false);
    PXUIFieldAttribute.SetVisible<ContractBillingSchedule.lastDate>(cache, row, false);
}

要隐藏整个Billing视图,在PMProject_RowSelected中补充以下设置:

// 原有生效代码...

// 隐藏Billing视图
Base.Billing.AllowSelect = false;
Base.Billing.AllowInsert = false;
Base.Billing.AllowUpdate = false;
Base.Billing.AllowDelete = false;
PXUIFieldAttribute.SetVisible(Base.Billing.Cache, null, false);

2. 处理ProjectRevenueTotals相关内容

PMProjectRevenueTotal属于汇总数据视图,需单独编写其RowSelected事件:

protected void PMProjectRevenueTotal_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
    var row = e.Row as PMProjectRevenueTotal;
    if (row == null) return;
    
    PXUIFieldAttribute.SetVisible<PMProjectRevenueTotal.curyRevisedAmount>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PMProjectRevenueTotal.contractCompletedWithCOPct>(cache, row, false);
    PXUIFieldAttribute.SetVisible<PMProjectRevenueTotal.curyTotalRetainedAmount>(cache, row, false);
}

同时在PMProject_RowSelected中隐藏整个汇总视图:

// 原有生效代码...

Base.ProjectRevenueTotals.AllowSelect = false;
PXUIFieldAttribute.SetVisible(Base.ProjectRevenueTotals.Cache, null, false);

3. 处理PMProjectExtension自定义字段

确认PMProjectExtension是PMProject的缓存扩展类,若直接设置无效,可通过缓存获取扩展实例后操作:

var ext = cache.GetExtension<PMProjectExtension>(row);
PXUIFieldAttribute.SetVisible<PMProjectExtension.payrollWorkLocationID>(cache, ext, false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:43:31