acumatica
タブを条件付きで非表示にする
サーチ…
前書き
このトピックでは、Acumaticaのデータ入力画面でタブを条件付きで非表示にする2つの方法について説明します。
AspxでのPXTabコントロールのVisibleExpプロパティ
VisibleExpプロパティは、指定されたタブが表示されるかどうか(論理式がTRUEの場合)または非表示になるかどうかを判断するブール式です。 AspxページでPXTabコントロールのVisibleExpプロパティを指定します。
<px:PXTabItem Text="Credit Card Processing Info" BindingContext="form"
VisibleExp="DataControls["chkIsCCPayment"].Value = 1">
VisibleExpは、PXTabコントロールのBindingContextプロパティで指定されたIDを持つコンテナ内に配置された入力コントロールで構成されます 。複数のコンテナから入力コントロールを使用することはできません。特定の入力コントロールへのアクセスは、DACフィールドの名前ではなく、そのIDによってDataControls
辞書から提供されます。
通常、 VisibleExpプロパティは、ハードコードされた入力コントロール値を持つかなり単純なブール式を作成するために使用されますが、時間の経過とともに変化する可能性はほとんどありません。たとえば、 受注画面(SO.30.10.00)で、 転送タイプの指図の[ 支払設定 ]タブを非表示にするには、次の式を使用します。
<px:PXTabItem Text="Payment Settings"
VisibleExp="DataControls["edOrderType"].Value!=TR" BindingContext="form">
新しいステータスのリードの[アクティビティ]タブを非表示にするには
Leads画面(CR.30.10.00)からActivitiesタブを非表示にするには、 BindingContextプロパティをformに設定し(最上位のLead Summaryフォームでフォーム IDを保持)、 LeadステータスがOpenの場合はFalseを返すようにVisibleExpを定義します( ステータスドロップダウンでedStatus IDが保持されます) :
<px:PXTabItem Text="Activities" LoadOnDemand="True"
BindingContext="form" VisibleExp="DataControls["edStatus"].Value != H">
データビューでのAllowSelectプロパティ
Aspxで定義されたVisibleExpプロパティとは異なり、BLCまたはBLC拡張コードを使用してデータビューのAllowSelectプロパティを操作します。 AllowSelectプロパティを使用すると、( VisibleExpプロパティと比較して)より複雑なブール式を使用し、必要に応じてWebページで利用できないデータベースやその他のソースから追加情報を取得することができます。
以下は、 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; } ... }
インベントリ補充機能とインベントリサブアイテム機能の両方が有効になっている場合にのみ、[ Item warehouse Details]画面の[ Subitem Replenishment Info ]タブを表示する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拡張コードを使用してタブの可視性を条件付きで変更するたびに、対応するPXTabコンテナのAspxでRepaintOnDemandプロパティをfalseに設定する必要があります。
<px:PXTabItem Text="Depreciation History" RepaintOnDemand="false">
RepaintOnDemandプロパティはデフォルトでtrueです。このプロパティは、PXTabコンテナの初期化を制御します。trueに設定すると、それがユーザによって選択されるまで、PXTabが初期化されません。明らかに、 RepaintOnDemandをfalseに設定すると、PXTabコンテナが選択されているかどうかにかかわらず、適切な動作が保証されます。
販売不可能な在庫明細の相互参照タブを非表示にする
販売ステータスなしの商品の在庫明細画面(IN.20.25.00)から相互参照タブを非表示にするには、以下の手順を実行します。
ItemItemMain BLC拡張でInventoryItem_RowSelectedハンドラを実装して、 Item StatusがNo Salesに設定されている場合、
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); } }
カスタマイズマネージャで[ 相互参照 ]タブのRepaintOnDemandプロパティをfalseに設定し、カスタマイズを公開します。
上記の2つの非常に簡単な手順を完了したら、 No Salesステータスの在庫アイテムでCross-Referenceタブにアクセスできません 。
非アクティブ在庫アイテムの属性タブを非表示にする
条件付きで**属性**タブを在庫明細画面(IN.20.25.00)から非表示にするには、以下の手順を実行します。
falseにAllowSelectプロパティを設定するInventoryItemMaint BLC延長でInventoryItem_RowSelectedハンドラを実装
Answers
し、Category
項目のステータスが 非アクティブに設定された場合は、データビュー。また、 Visibleプロパティが、 CacheAttachedハンドラによってInventoryItem.ImageUrl
フィールドに追加されたPXUIFieldAttribute
に対してfalseに設定されていることにPXUIFieldAttribute
してください 。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) { } }
カスタマイズマネージャで、 属性タブでRepaintOnDemandプロパティをfalseに設定し、カスタマイズを公開します。
上記の2つのステップを完了した後、[ 非アクティブ]ステータスの在庫アイテムの[ 属性 ]タブにはアクセスできません。