【问题标题】:Is it possible to dynamically change the PXSelect a view is using programatically?是否可以以编程方式动态更改视图正在使用的 PXSelect?
【发布时间】:2018-11-18 23:36:45
【问题描述】:

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

【问题讨论】:

  • 可能的选项可能是在图表上使用过滤器并将您的视图链接到过滤器当前值。您的按钮可以设置过滤器当前值并可能显示正确的结果?
  • 除了 T### 书籍中提供的信息之外,是否有很好的信息来源可以查看 PXFilter?
  • 约书亚发布了一个应该有帮助的答案。他的回答使用视图委托来限制结果。您还应该能够在视图本身中设置 BQL 以使用过滤器 (Current) 来获得相同的结果。

标签: acumatica


【解决方案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;
                }
            }
        }
    }

【讨论】:

  • 抱歉延迟回复。我正在做一个不同的项目。这非常有效!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2017-08-19
  • 2010-12-13
相关资源
最近更新 更多