2

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

4

1 回答 1

2

选项 #1:使用 PXTabItem VisibleExp 属性

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

例如,要隐藏TR类型订单的销售订单佣金选项卡,您应该按如下方式编写 VisibleExp :

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

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

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

选项 #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数据视图将自动隐藏每个PXGrid,其DataMember属性设置为SalesPerTran。由于 Sales Order Commissions 选项卡还包含 Default Salesperson 查找,因此我们需要另外将PXUIFieldAttribute装饰SOOrder SalesPersonID 字段的Visible属性设置为false 。PXTabItem在不包含可见控件时会自动隐藏。

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

于 2017-09-21T20:21:52.980 回答