D365 FO中无契约类创建SSRS报表:获取选中Load ID方法
在D365 FO的SSRS报表数据提供程序中获取选中的Load ID方法
方法一:通过报表查询参数提取(推荐)
当从WHSLoadTable窗体操作面板启动报表时,系统会自动将选中Load的LoadId作为筛选条件传入报表查询。你可以在数据提供程序类中直接从查询对象提取该值:
public void processReport() { Query query = this.parmQuery(); QueryBuildDataSource qbds = query.dataSourceTable(tableNum(WHSLoadTable)); QueryBuildRange qbr; WHSLoadId loadId; // 定位WHSLoadTable数据源的LoadId筛选范围 qbr = qbds.findRange(fieldNum(WHSLoadTable, LoadId)); if (qbr) { loadId = qbr.value(); // 后续可使用该loadId关联查询WHSLoadLine等关联数据 } }
方法二:从窗体上下文的Args对象获取
如果需要在报表初始化阶段就获取选中的Load记录,可以在数据提供程序的init方法中读取窗体传递的Args对象:
public void init() { WHSLoadTable whsLoadTable; Args args = this.parmArgs(); if (args && args.record() && args.record().TableId == tableNum(WHSLoadTable)) { whsLoadTable = args.record(); WHSLoadId loadId = whsLoadTable.LoadId; // 手动将loadId设置为报表查询的筛选条件 this.parmQuery().dataSourceTable(tableNum(WHSLoadTable)).addRange(fieldNum(WHSLoadTable, LoadId)).value(queryValue(loadId)); } super(); }
注意事项
- 优先使用方法一,因为这是D365 FO报表传递筛选条件的标准方式,确保报表在不同启动场景下都能正常工作。
- 确保报表的查询数据源已关联
WHSLoadTable表,且LoadId字段已添加为可用的筛选字段。
内容的提问来源于stack exchange,提问作者Subhamay Nath
相关产品推荐
相关产品推荐

