首页 > 解决方案 > 查看委托构建正确的 SQL,没有返回任何记录

问题描述

我有一个查询屏幕,我们在其中通过过滤器中的 VendorID 或 FinPeriodID 过滤来自自定义 DAC 的历史 AP 记录。

我创建了一个 View Delegate 来处理动态过滤逻辑,并通过调试确认它被正确命中,并在正确的 WhereAnd 语句中附加了 Filter 的当前值。直接在数据库中运行等效的 SQL 语句会返回正确的记录,但是 View Delegate 最终不会向屏幕返回任何记录。

基本视图刚刚定义为:public PXSelectReadonly<AAAPDoc> Docs;

View Delegate 定义为:

        protected virtual IEnumerable<AAAPDoc> docs()
        {
            AAAPHistoricalFilter filter = Filter.Current;

            PXSelectBase<AAAPDoc> cmd = new PXSelectReadonly<AAAPDoc>(this);

            if (filter.VendorID.HasValue)
            {
                cmd.WhereAnd<Where<AAAPDoc.vendorID, Equal<Current<AAAPHistoricalFilter.vendorID>>>>();
            }

            if (filter.FinPeriodID.HasValue)
            {
                cmd.WhereAnd<Where<AAAPDoc.finPeriodID, Equal<Current<AAAPHistoricalFilter.finPeriodID>>>>();
            }

            foreach (AAAPDoc record in cmd.Select())
            {
                yield return record;
            }
        }

滤波器 DAC

    [Serializable]
    [PXHidden]
    public class AAAPHistoricalFilter : IBqlTable
    {
        #region VendorID        
        public abstract class vendorID : BqlInt.Field<vendorID>
        {
        }
        [Vendor(IsDBField = false, DisplayName = "Vendor ID")]  
        public virtual int? VendorID { get; set; }
        #endregion

...

编辑:使用原始部分过滤器 DAC 更新,为解决方案提供上下文

标签: acumatica

解决方案


原来,这是我的滤波器 DAC 的问题。我将[Vendor]属性与 property 一起使用IsDBField = false。从属性中完全删除该IsDbField属性给了我预期的结果。


推荐阅读