acumatica - 查看委托构建正确的 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 更新,为解决方案提供上下文
解决方案
原来,这是我的滤波器 DAC 的问题。我将[Vendor]
属性与 property 一起使用IsDBField = false
。从属性中完全删除该IsDbField
属性给了我预期的结果。
推荐阅读
- rust - 构建脚本可以带参数吗?
- encryption - Redshift 列级加密和解密
- javascript - 使用cordova直接从Android studio中的sdcard读取文本文件
- biztalk - XSD milliseconds format
- python - Python getting specific bytes in a large hex number
- c# - 更新依赖包时强制更新包版本
- json.net - 将 Cosmos DB 文档属性序列化和反序列化为字符串
- python-3.x - XML API 响应
- c# - .NET Core 中一对多关系的数据播种
- r - 了解 R 中用于序数/多类回归的 lrm 系数格式