数据视图上的 AllowSelect 属性

与 Aspx 中定义的 VisibleExp 属性不同,你通过 BLC 或 BLC 扩展代码操作数据视图的 AllowSelect 属性。该 AllowSelect 特性使得我们可以使用更复杂的布尔表达式(相较于 VisibleExp 属性),如果有必要,检索网页上没有可用的数据库或其他来源的额外信息。

以下是使用 AllowSelect 属性的 3 种最常见方案 :

  • **** 顶级实体的 RowSelected 事件处理程序,用于隐藏现金销售现金返还类型发票的“ 应用程序” 选项卡 : ****** ******

     public class SOInvoiceEntry : ARInvoiceEntry
     {
         ...
         protected override void ARInvoice_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
         {
             ...
    
             Adjustments.AllowSelect =
                 doc.DocType != ARDocType.CashSale &&
                 doc.DocType != ARDocType.CashReturn;
         }
         ...
     }
    
  • BLC 构造函数仅在激活“ 库存补货” 和“ 库存子项” 功能时才显示 “ 项目仓库详细信息” 屏幕上的“子项补货信息” 选项卡 : **** ** **

     public class INItemSiteMaint : PXGraph<INItemSiteMaint, INItemSite>
     {
         ...
         public INItemSiteMaint()
         {
             ...        
    
             bool enableSubItemReplenishment = PXAccess.FeatureInstalled<FeaturesSet.replenishment>() && PXAccess.FeatureInstalled<FeaturesSet.subItem>();
             subitemrecords.AllowSelect = enableSubItemReplenishment;
         }
         ...
     }
    
  • **** 用于隐藏折旧历史选项卡的顶级实体的 RowSelected 处理程序,除非当前资产可折旧且折旧历史记录视图在固定资产首选项中设置为并排

     public class AssetMaint : PXGraph<AssetMaint, FixedAsset>
     {
         ...
         protected virtual void FixedAsset_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
         {
             ...
    
             AssetHistory.AllowSelect = asset.Depreciable == true && fasetup.Current.DeprHistoryView == FASetup.deprHistoryView.SideBySide;
         }
         ...
     }
    

每次使用 AllowSelect 属性通过 BLC 或 BLC 扩展代码有条件地更改选项卡可见性时,必须在 Aspx 中为相应的 PXTab 容器将 RepaintOnDemand 属性设置为 false

<px:PXTabItem Text="Depreciation History" RepaintOnDemand="false">

默认情况下, RepaintOnDemand 属性为 true 。此属性控制 PXTab 容器的初始化:当设置为 true 时,PXTab 将不会被初始化,直到用户选择它为止。显然,你需要将 RepaintOnDemand 设置为 false 以保证给定 PXTab 容器的正确行为,无论它是否被选中。

隐藏无法出售的库存项目的交叉引用选项卡

要从 “ 库存项目” 屏幕(IN.20.25.00) 隐藏“ 无销售” 状态的项目的“ 交叉引用” 选项卡,请执行以下操作: **** ******

  1. 如果 Item Status 设置为 No Sales ,则在 InventoryItemMaint BLC 扩展中实现 InventoryItem_RowSelected 处理程序,以便为 itemxrefrecords 数据视图将 AllowSelect 属性设置为 false : **** ******

    public class InventoryItemMaintExt : PXGraphExtension<InventoryItemMaint>
    {
        protected void InventoryItem_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
        {
            InventoryItem item = (InventoryItem)e.Row;
            if (item == null) return;
    
            Base.itemxrefrecords.AllowSelect = (item.ItemStatus != InventoryItemStatus.NoSales);
        }
    }
    
  2. 在定制经理,设置 RepaintOnDemand 属性为交叉引用选项卡并发布定制: StackOverflow 文档

完成上述 2 个非常简单的步骤后,对于没有销售状态的库存项目,不应访问 “ 交叉引用” 选项卡 : ******

StackOverflow 文档

隐藏非活动 Stock 产品的属性选项卡

要从 Stock Items 屏幕(IN.20.25.00) 有条件地隐藏** Attributes **选项卡,请按以下步骤操作:

  1. 如果 Item Status 设置为 Inactive ,则在 InventoryItemMaint BLC 扩展中实现 InventoryItem_RowSelected 处理程序,以便为 AnswersCategory 数据视图将 AllowSelect 属性设置为 false 。另请注意, CacheAttached 处理程序在 InventoryItem.ImageUrl 字段上添加的 PXUIFieldAttributeVisible 属性设置为 false : **** ****** **** ****** ****

    public class InventoryItemMaintExt : PXGraphExtension<InventoryItemMaint>
    {
        protected void InventoryItem_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
        {
            InventoryItem item = (InventoryItem)e.Row;
            if (item == null) return;
    
            bool showAttributesTab = item.ItemStatus != InventoryItemStatus.Inactive;
            Base.Answers.AllowSelect = Base.Category.AllowSelect = showAttributesTab;
            PXUIFieldAttribute.SetVisible<InventoryItem.imageUrl>(sender, item, showAttributesTab);
        }
    
        [PXMergeAttributes(Method = MergeMethod.Append)]
        [PXUIField(DisplayName = "Image")]
        protected void InventoryItem_ImageURL_CacheAttached(PXCache sender)
        { }
    }
    
  2. 在 Customization manager 中,为 Attributes 选项卡设置 RepaintOnDemand 属性为 false 并发布自定义: **** StackOverflow 文档

完成上述两个步骤后,对于处于非活动状态的库存项目,不应访问 “ 属性” 选项卡 : ******

StackOverflow 文档