Возможно ли динамически изменить PXSelect, который использует представление программно? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть кнопка, в которой при нажатии я хочу показать или скрыть строки в сетке на основе определенных критериев. Можно ли изменить представление PXSelect на лету, чтобы оно повторно запрашивало базу данных и получало разные результаты? Я, конечно, буду запрашивать ту же таблицу и не изменять структуру представления или сетки.

1 Ответ

0 голосов
/ 18 ноября 2018

Приведенный ниже код добавляет невидимое поле к записи заголовка, которая устанавливается кнопкой, затем это значение используется делегатом представления дочерних записей для определения на основе критериев дочерних записей (в данном случае логическое значение для каждогоребенок), если они показаны.

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;
                }
            }
        }
    }
...