如何从通用查询(GI)获取筛选器并通过代码添加条件过滤结果
关于Acumatica通用查询(GI)结果集的三个问题解答
1. 从结果集中获取筛选参数
你可以通过PXGenericInqGrph的Filter集合获取GI的筛选参数,每个筛选条件对应GenericFilter对象。示例代码:
PXGenericInqGrph graph = PXGenericInqGrph.CreateInstance(GiGuidID); // 遍历获取所有筛选参数 foreach (GenericFilter filter in graph.Filter.Cache.Select()) { string filterField = filter.FieldName; object filterValue = filter.Value; // 按需处理筛选参数,比如打印或存储 PXTrace.WriteInformation($"筛选字段: {filterField}, 对应值: {filterValue}"); }
如果GI包含多页签的筛选器,可通过FilterID属性区分不同页签的筛选条件。
2. 编程方式用WHERE子句过滤结果
可以直接在Select()方法前添加Where条件,借助Acumatica的查询语法扩展实现。示例:
PXGenericInqGrph graph = PXGenericInqGrph.CreateInstance(GiGuidID); // 添加WHERE条件,替换为GI中实际的字段名和目标值 PXResultset<GenericResult> filteredResults = graph.Results .Where<GenericResult.yourGiFieldName>(field => field == "目标筛选值") .Select();
若筛选关联表字段,需使用完整字段引用格式,比如<BAccount.acctCD>。
3. 遍历结果集并手动筛选
完全支持遍历结果集后执行自定义筛选,适合处理复杂业务逻辑场景。示例:
PXGenericInqGrph graph = PXGenericInqGrph.CreateInstance(GiGuidID); PXResultset<GenericResult> results = graph.Results.Select(); List<GenericResult> filteredList = new List<GenericResult>(); foreach (GenericResult result in results) { // 获取指定字段的值,替换为GI中实际字段名 string targetFieldValue = result.GetValue<string>("TargetField"); // 自定义筛选逻辑 if (!string.IsNullOrEmpty(targetFieldValue) && targetFieldValue.Contains("关键字")) { filteredList.Add(result); } } // 如需用Acumatica API后续处理,可转换为PXResultset PXResultset<GenericResult> filteredResults = new PXResultset<GenericResult>(filteredList);
这种方式能实现任意复杂的筛选逻辑,但数据量较大时,效率低于直接在查询层面添加WHERE条件。
内容的提问来源于stack exchange,提问作者Bajrang Patidar
相关产品推荐
相关产品推荐

