是否可以动态更改以编程方式使用视图的PXSelect?

时间:2018-11-15 17:30:12

标签: acumatica

我有一个按钮,在按下按钮时,我要根据特定条件显示或隐藏网格中的行。是否可以动态更改视图使用的PXSelect,以便它重新查询数据库并检索不同的结果?当然,我将查询同一张表,而不更改视图或网格的结构。

1 个答案:

答案 0 :(得分:1)

下面的代码向由按钮设置的头记录添加一个不可见字段,然后按此值,然后子记录视图委托使用该值根据子记录条件确定(在这种情况下,每个记录都为布尔值)孩子)(如果有的话)。

public sealed class APInvoiceExtension : PXCacheExtension<APInvoice>
    {
        #region UsrShowAll 
        public abstract class usrShowAll : IBqlField
        {
        }
        [PXBool]
        public bool? UsrShowAll { get; set; }
        #endregion
    }

    public sealed class APTranExtension : PXCacheExtension<APTran>
    {
        #region UsrHidden
        public abstract class usrHidden : IBqlField
        {
        }
        [PXDBBool]
        [PXUIField(DisplayName = "Hidden", Enabled = false)]
        public bool? UsrHidden { get; set; }
        #endregion
    }


    public class APInvoiceEntryExtension : PXGraphExtension<APInvoiceEntry>
    {

        public PXAction<APInvoice> SHW;

        [PXUIField(DisplayName = "Show All Records", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Update)]
        [PXButton]
        protected void sHW()
        {
            if (Base.Document.Current != null)
            {
                APInvoiceExtension docExt = Base.Document.Current.GetExtension<APInvoiceExtension>();

                docExt.UsrShowAll = !(docExt.UsrShowAll ?? false);
            }
        }

        protected virtual IEnumerable transactions()
        {
            bool showAll = Base.Document.Current != null ? (Base.Document.Current.GetExtension<APInvoiceExtension>().UsrShowAll ?? false) : false;

            APTran tran;

            foreach (PXResult<APTran, POReceiptLine> res in Base.Transactions.Select())
            {
                tran = res[0] as APTran;

                if (!showAll)
                {
                    if (!(tran.GetExtension<APTranExtension>().UsrHidden ?? false))
                    {
                        yield return res;
                    }
                }
                else
                {
                    yield return res;
                }
            }
        }
    }
相关问题