You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过BLC代码打开带指定记录的通用查询(Generic Inquiry)界面并自动填充字段?

如何通过BLC代码打开带指定记录的通用查询(Generic Inquiry)界面并自动填充字段?

看起来你踩了一个常见的小坑——你现在打开的是通用查询的设计界面(GenericInquiryDesigner),而不是用来运行查询、展示数据的运行界面,这就是为啥手动打开能正常显示字段数据,但代码打开不行的核心原因!

问题分析

你的代码里实例化的GenericInquiryDesigner是Acumatica中用于创建、编辑通用查询的设计器图,它的职责是定义GI的结构(筛选、字段、关联等),而不是执行查询并展示结果。所以即便你设置了Designs.Current,它也不会自动加载数据或填充筛选字段。

正确的实现方法

要打开能自动加载数据、填充字段的GI运行界面,你需要使用GenericInquiryGraph(这是专门用于运行GI的图),并完成以下步骤:

  1. 获取目标GI的设计记录,拿到它的DesignID
  2. 实例化GenericInquiryGraph并绑定目标GI
  3. (可选)设置GI的筛选参数,自动填充指定字段
  4. 触发界面跳转

下面是完整的代码示例:

// 1. 根据GI名称获取对应的设计记录
string giName = "AM-Cost";
GIDesign giDesign = PXSelect<GIDesign, Where<GIDesign.name, Equal<Required<GIDesign.name>>>>.Select(this, giName);
if (giDesign == null) return;

// 2. 实例化通用查询的运行图
GenericInquiryGraph giGraph = PXGraph.CreateInstance<GenericInquiryGraph>();
// 绑定要运行的GI(通过DesignID)
giGraph.GIID = giDesign.DesignID;

// 3. 自动填充筛选字段(示例:假设你的GI有一个筛选字段对应记录ID)
// 方式1:通过Filter的通用属性设置(对应GI设计里的filter1、filter2...)
giGraph.Filter.Cache.SetValueExt<GenericInquiryFilter.filter1>(giGraph.Filter.Current, "你的目标记录ID");

// 方式2:如果筛选字段绑定了具体DAC字段(比如AMCost.docID),可以直接设置对应属性
// giGraph.Filter.Cache.SetValueExt<GenericInquiryFilter.docID>(giGraph.Filter.Current, Base.Document.Current.DocID);

// 4. 刷新GI数据,确保筛选生效
giGraph.Views[giDesign.ResultView].Refresh();

// 5. 跳转到GI运行界面
throw new PXRedirectRequiredException(giGraph, "查看实体")
{
    Mode = PXBaseRedirectException.WindowMode.NewWindow
};

额外提示

  • 如何确认筛选字段对应的属性?你可以在GI设计界面的「筛选」标签页,查看每个筛选字段的「属性名称」(比如filter1),或者如果是绑定了DAC字段的筛选,直接使用DAC的字段名即可。
  • 如果是从某个单据跳转(比如从资产卡片跳转到AM-Cost GI),可以从当前图的Current记录中提取ID,再设置到GI的筛选参数里,实现上下文关联。

备注:内容来源于stack exchange,提问作者pmfith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:28:02