微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查看代表构建正确的SQL,不返回任何记录

如何解决查看代表构建正确的SQL,不返回任何记录

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

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

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

视图代表定义为:

        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更新以提供解决方案的上下文

解决方法

结果证明,这是我的滤波器DAC的问题。我使用了[Vendor]属性和属性IsDBField = false。从属性中完全删除IsDbField属性,可以得到预期的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。