我正在尝试动态隐藏网格选项卡中的列,在用户进入列配置并决定显示列之前,它可以正常工作。
一旦用户这样做,我的代码将不再影响列的可见性。
作为POC,我尝试这样做:
public PXAction<POOrder> HIDEFIELDS;
[PXUIField(DisplayName = "hide fields")]
[PXButton(CommitChanges = true)]
public virtual void hIDEFIELDS()
{
PXUIFieldAttribute.SetVisible<POLineExt.usrFinalDestination>(Base.Transactions.Cache, null, false);
PXUIFieldAttribute.SetVisible<POLineExt.usrDateExportation>(Base.Transactions.Cache, null, false);
PXUIFieldAttribute.SetVisible<POLineExt.usrContainerNbr>(Base.Transactions.Cache, null, false);
}
public PXAction<POOrder> Showfields;
[PXUIField(DisplayName = "showfields")]
[PXButton(CommitChanges = true)]
public virtual void showfields()
{
PXUIFieldAttribute.SetVisible<POLineExt.usrFinalDestination>(Base.Transactions.Cache, null, true);
PXUIFieldAttribute.SetVisible<POLineExt.usrDateExportation>(Base.Transactions.Cache, null, true);
PXUIFieldAttribute.SetVisible<POLineExt.usrContainerNbr>(Base.Transactions.Cache, null, true);
}
如何防止这种行为? PXUIFieldAttribute.SetVisible和PXUIFieldAttribute.SetVisibility有什么区别?
答案 0 :(得分:0)
Visible 属性确定该列在网格中是否可见(窗体,树等),而 Visibility 属性确定该列在网格中是否可见列配置对话框。
您发现,用户可以使用用户定义的网格列配置覆盖 Visible = False 属性。
要防止用户覆盖 Visible 属性,您必须同时设置 Visible 和 Visibility 。
PXCache cache = Base.Transactions.Cache;
PXUIFieldAttribute.SetVisibility<POLineExt.usrFinalDestination>(cache, null, PXUIVisibility.Invisible);
PXUIFieldAttribute.SetVisible<POLineExt.usrFinalDestination>(cache, null, false);
您的代码建议您进行动态更改,但我认为 Visibility 属性仅支持静态更改。静态是指该调用在页面加载时仅工作一次,并且将忽略后续调用。约定是将这些调用放在图扩展或新自定义图的构造函数的Initialize()方法重写中:
public override void Initialize()
{
// Extend base graph to set visibility property here.
}