当前位置: 首页 > news >正文

再论D365 SSRS报表开发

这几天非常痛苦,被报表折磨得消耗了大量时间(花了三天时间了,只是搞了2个报表,效率之低让我忧愁那么多报表怎么搞得完),例如我想建立一个带参数的报表,很简单吧,但是就是一次次不成功,原因见我上一篇随笔。

我想建立一个带参数且是从其他object获取值作为参数默认值的报表,反复的Build,deploy程序,报表,提示找不到报表的design,要不是我见到过类似的成功样品示例令我坚信方法没问题,我会以为是方法错误放弃了,什么方法呢?如下:

要建立一个报表,至少涉及到3个Object,

1,SSRS report,呈现数据

2,query或Data provider,提供数据

3,output menuitem,打开SSRS报表

要建立一个带参数的,且是从其他object获取值作为参数默认值的报表(例如从Form打开获取当前记录的ID作为参数),那么至少需要5个Object

1,SSRS report,呈现数据

2,query或Data provider(DP),提供数据,如果用Data provider,那还得加一个临时表

3,DataContract, 设置参数

4,SrsReportRunController,继承此类,提供参数默认值

5,output menuitem,打开SSRS报表

建立这个按如下步骤就好了,但是不一定可以成功,需要反复的Build,deploy程序,报表,真搞不懂,我估计是微软还没把Reporting service(SSRS)完美与D365契合。

1,建立一个DataContract (Contract),设置了一个Item的参数

[DataContractAttribute]
internal final class ABC_NetReqRptInclForecastContract
{
ItemId m_strItemId;

[
DataMemberAttribute('m_strItemId')
,SysOperationLabelAttribute(literalStr("Item number"))
]
public ItemId parmItemId(ItemId _ItemId = m_strItemId)
{
m_strItemId = _ItemId;
return m_strItemId;
}

}

2,建立一个Data provider(DP),与1的contract关联起来,另外还得建立一个临时表ABC_NetReqLines 

[SRSReportParameterAttribute(classStr(ABC_NetReqRptInclForecastContract))]
internal final class ABC_NetReqRptInclForecastDP extends SRSReportDataProviderBase //SrsReportDataProviderPreProcess,继承这个的话,就是个报表不会超时退出,直至完成,详见之前随笔D365执行运行时间长操作超时退出问题 - tushadongjing - 博客园
{
ABC_NetReqLines m_dtNetReqLines;

[SRSReportDataSetAttribute(tableStr(ABC_NetReqLines ))]
public ABC_NetReqLines getNetReqLines()
{
select m_dtNetReqLines;
return m_dtNetReqLines;
}

/// <summary>
///
/// </summary>
public void processReport()
{
ABC_NetReqRptInclForecastContract contract =
 this.parmDataContract() as ABC_NetReqRptInclForecastContract;
ItemId _ItemId = contract.parmItemId(); //接受到参数

m_dtNetReqLines.ItemId = _ItemId;
m_dtNetReqLines.insert();
}

}

3,建立一个SSRS报表,数据源选择ABC_NetReqRptInclForecastDP 

image

 

4,建立一个Controller

internal final class ABC_NetReqRptInclForecastController extends SrsReportRunController
{
public static ABC_NetReqRptInclForecastController construct()
{
return new ABC_NetReqRptInclForecastController();
}

public static void main(Args _args)
{
ABC_NetReqRptInclForecastController controller = new ABC_NetReqRptInclForecastController();

controller.parmReportName(ssrsReportStr(ABC_NetReqRptInclForecast, PrecisionDesign1));
controller.parmArgs(_args);
controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);
controller.parmShowDialog(true);
controller.parmLoadFromSysLastValue(false);
controller.startOperation();
}

protected void prePromptModifyContract()
{
ROC_NetReqRptInclForecastContract contract;

InventTable InventTable = this.parmArgs().record(); //是从一个带Invent Table datasource的Form Call出来的

contract = this.parmReportContract().parmRdpContract() as ABC_NetReqRptInclForecastContract;

if (contract)
{
contract.parmItemId(InventTable.ItemId); //赋默认值
}

super();
}

}

5,创建output menuitem,用来打开SSRS报表,但是object type要选Class,calss即是创建的Controller Class

image

 

设置完成,Full build一次ABC model程序(建立报表dataset若是DP在建立报表选不到,则也需要先Full build一次ABC model程序,还选不到,关闭Visul studio,真搞不懂 ,折腾人)

然后Deploy报表,运气好一次性搞定,但是难说.

继续研究.......

 

http://www.jsqmd.com/news/550952/

相关文章:

  • 硬盘健康检测终极指南:DiskInfo如何守护你的数据安全
  • C++和C语言中填充字符、宽度的语法差异
  • open_clip多模态模型实战指南:从概念到生产的全链路应用
  • Minecraft世界救援终极方案:Region Fixer全流程数据修复指南
  • 放弃Darknet21?聊聊我在RangeNet++上尝试不同Backbone和CRF后处理的效果对比
  • 拯救你的机械键盘:3步告别按键连击烦恼
  • AVIF插件让Photoshop图像处理效率提升50%:从安装到精通的完整指南
  • WorkshopDL:跨平台资源调度引擎的技术解析与实践指南
  • K210人脸识别门锁实战:如何用YOLOv2模型优化响应速度与防误触?
  • 颠覆式教育资源获取工具:让电子教材触手可及的全新方案
  • Qwen-Image-Edit-2509入门实战:快速制作节日营销图,零设计基础也能行
  • 微信小程序逆向工具实战指南:wxappUnpacker高效解析wxapkg全流程
  • 新手必看:5分钟学会用Visio绘制PAD图和N-S图(附实例解析)
  • Claude Code 从入门到实战:高效 AI 编程助手完全指南
  • 量子统计分布探秘:从玻尔兹曼到费米-狄拉克的物理世界
  • cv_unet_image-colorization新手入门:从安装到上色的完整流程
  • 别再被AI骗了,这个分层检索让它不得不诚实
  • 终极指南:wxappUnpacker 5步快速解包微信小程序源码
  • 智能仓储管理系统:中小企业数字化转型的全面解决方案
  • Minecraft数据救援:从损坏到恢复的技术侦探之旅
  • PPPoE拨号为何偏爱MTU 1492?揭秘MTU设置背后的网络分片奥秘
  • 在团队协作中直接 Clone 主仓库开发?别慌,这才是正确的 PR 提交流程
  • Fire Dynamics Simulator:火灾动力学模拟的技术原理与工程应用
  • QKeyMapper:重新定义设备控制逻辑的开源映射工具
  • Pyenv虚拟环境管理全攻略:从创建到迁移(Ubuntu20.04实战)
  • 3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效
  • 探索Cadence设计中的芯片世界:从数据手册到硬件实战
  • 静态肖像如何“活“起来?深度解析LivePortrait的3大核心技术突破
  • 快速掌握socat-windows:实用网络数据转发工具完全指南
  • WebLaTeX:重新定义LaTeX创作体验的协作平台