如何在Acumatica屏幕内有条件地隐藏PXTabItem?

时间:2017-09-21 20:21:53

标签: acumatica acumatica-kb

我想隐藏销售订单行佣金标签,但我只想隐藏特定角色的标签。这可能吗?

1 个答案:

答案 0 :(得分:1)

选项#1:使用PXTabItem VisibleExp属性

这种方法非常适用于相当简单的声明性条件,它使用来自特定容器的输入控制值( PXForm 最常用于此场景)。

例如,要隐藏 TR 类型订单的“销售订单佣金”标签,您应该按如下方式撰写 VisibleExp

<px:PXTabItem Text="Commissions"
              VisibleExp="DataControls[&quot;edOrderType&quot;].Value!=TR" 
              BindingContext="form" 
              RepaintOnDemand="false">

上面代码段中使用的3个 PXTabItem 属性的快速概述:

  • BindingContext :用于计算PXTabItem可见属性的容器控件托管输入控件的ID
  • VisibleExp :计算PXTabItem可见属性的表达式
  • RepaintOnDemand :控制PXTab控件的初始化。设置为True(默认值)时,仅当用户选择Tab时才会初始化PXTabItem,否则,它将在每次回发时初始化。

选项#2:在代码中隐藏放置在PXTabItem

中的所有控件

毫无疑问,与 PXTabItem VisibleExp 属性相比,此方法在灵活性方面向前迈进了一步。它允许您在业务逻辑中构建更复杂的条件,而不依赖于网页。

要隐藏“销售订单佣金”标签,您应订阅SOOrder的RowSelected处理程序,如下所示:

public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
    public void SOOrder_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        SOOrder order = (SOOrder)e.Row;
        if (order == null) return;

        bool financeRoleMember = System.Web.Security.Roles.IsUserInRole("FINANCE");
        Base.SalesPerTran.AllowSelect = financeRoleMember;
        PXUIFieldAttribute.SetVisible<SOOrder.salesPersonID>(Base.Document.Cache, null, financeRoleMember);
    }
}

AllowSelect 属性设置为false时, SalesPerTran 数据视图会自动隐藏 DataGmber 的每个 PXGrid property设置为 SalesPerTran 。由于“销售订单佣金”选项卡还包含“默认销售员”查找,因此我们还需要为 PXUIFieldAttribute PXUIFieldAttribute false 设置可见属性strong>装饰SOOrder SalesPersonID字段。 PXTabItem 会在不包含任何可见控件时自动隐藏。

请注意,与 PXTabItem VisibleExp 属性类似,为了使此方法正常运行,您必须始终将 RepaintOnDemand 设置为 false您有条件地隐藏 PXTabItem 。对于此特定示例,我们可以跳过此步骤,因为在原 SO301000.aspx RepaintOnDemand 设置为 false >文件由Acumatica分发。