1创建一个TmpDB类型的临时表
把自己需要的字段加上
2创建一个参数类 简称 XXXcontract
class IWS_wj_Constract { int64 id; str item_number; List list; [DataMemberAttribute] public int64 parmId(int64 _id = id) { id = _id; return id; } [DataMemberAttribute] public str parmItem_number(str _item_number = item_number) { item_number = _item_number; return item_number; } //[ datamember, // datamemberattribute('list'), // aifcollectiontype("list",types::string), // aifcollectiontype("return",types::string) // ] [ dataMember, DataMemberAttribute('List'), AifCollectionType("List",Types::Int64), AifCollectionType("return",Types::Int64) ] public List parmList(List _list = list) { List = _list; return List; } }当我们使用到容器类型作为参数传参的时候记得加上注解,不然在使用的时候回报错
上述代码加上了这张ssrs报表需要使用的参数类
3创建Controller类
class IWS_wj_Controller extends SrsReportRunController { public static void main(Args _args) { IWS_wj_Controller controller = new IWS_wj_Controller(); controller.parmArgs(_args);//传入args controller.parmReportName(ssrsReportStr(IWS_wj20230927,IWS_reportOne));//定位到哪张报表; controller.parmDialogCaption("IWS_wjDemoReport"); //页面显示的名称 controller.parmShowDialog(true); //是否显示dialog controller.startOperation(); //开始允许报表 } protected void prePromptModifyContract()//配置页面初始化 { IWS_wj_Constract contract; Args _args; IWS_wj20230927 tb; List list; FormDataSource fds; MultiSelectionHelper multiSelectionHelper; ; _args = this.parmArgs(); contract = this.parmReportContract().parmRdpContract() as IWS_wj_Constract; //this.getReportContract(); //实现窗体的多选 list = new List (Types::int64); fds = args.record().dataSource();//获取窗体数据源 multiSelectionHelper = multiSelectionHelper::construct();//多选助手 multiSelectionHelper.parmDatasource(fds); tb = multiSelectionHelper.getFirst();//存入数据 while(tb) { list.addEnd(tb.id); tb = multiSelectionHelper.getNext(); } contract.parmList(list); } }上述代码是一个报表的入口
继承SrsReportRunController类,我们通常会使用到的是prePromptModifyContract()
我们通常把需要初始化别的参数时写在这个方法里面,上述是个一张报表可以打印多张单据的报表。
这里使用到一个工具类MultiSelectionHelper,可以把窗体上所选中的数据初始化到List,
这样就可以实现一张报表打印多张单据。
4创建DP类
dp主要是通过参数对数据做出插入,编写取值逻辑
以下示例是一个简单的DPdemo
[ SrsReportParameterAttribute(classStr(IWS_wj_Constract))//contract类 ] class IWS_WjTestADP extends SRSReportDataProviderPreProcessTempDb { IWS_wjtemp temp;//临时表 [ SrsReportDataSetAttribute(tableStr(IWS_wjtemp)) ] public IWS_wjtemp getTemp() { select temp; return temp; } public void processReport() { IWS_wj_Constract contract = this.parmDataContract() as IWS_wj_Constract; int64 id = contract.parmId(); str number = contract.parmItem_number(); List list = contract.parmList(); iws_wj20230927 a; //使用迭代器来传递数据 Enumerator em = list.getEnumerator(); while(em.moveNext()) { while select a where a.id == em.current() { temp.id = a.id; temp.item_name = a.item_name; temp.item_number = a.item_number; temp.specifications_and_models = a.specifications_and_models; temp.material = a.material; temp.remark = a.remark; temp.cnt = a.cnt; temp.unit = a.unit; temp.warehouse = a.warehouse; temp.use = a.use; temp.datetime = a.createddatetime; temp.yewu = a.yewu; temp.cgsq = a.cgsq; temp.cgsqr = a.cgsqr; temp.cgsqh = a.cgsqh; temp.insert(); } } } }5创建SSRSReport
首先我们可以先创建一个report组件
1新建dataset 设置dp(我们之前创建的Dp类)
新手可能会发现自己根本找不到自己的DP,我们需要先编译一下让系统认到我们的DP
2创建Desion
这个就是一个简单的报表界面里面会涉及到比较多的内容
这里给一个比较简单的例子
右击创建一个table
右击属性设置数据源,也就是我们之间创建的dataset
设置完之后 通过选择就会出现很多的字段,并却会循环的出来
3部署报表
最后在页面上就会出现大家想要的报表了
6细节以及问题
1找不到报表设计:重点检查controller 里面是否写对了报表名称,是否有进行部署报表。
2生成报表是出错,但是已经部署成功了报表,这个有的时候需要全编译一下工程,具体原因我目前还不是很清楚。
3 当我们有修改参数是,我们的ui界面需要重新画,不然会报错,部署失败 :参数错误
4问题排查 ,大多数情况下在出现进度条之后,重点排查DP类,进度条之前controller
7UIBuild
class IWS_DeliveryItemInsepctionPrintUIBuilder extends SrsReportDataContractUIBuilder
{
IWS_DeliveryItemInsepctionPrintContract contract;DialogField fieldJourId;
public void postBuild()
{
super();
contract = this.dataContractObject() as IWS_DeliveryItemInsepctionPrintContract;fieldJourId = this.bindInfo().getDialogField(contract, methodstr(IWS_DeliveryItemInsepctionPrintContract, parmJourId));
fieldJourId.allowEdit(false);
}}
目录
1创建一个TmpDB类型的临时表
2创建一个参数类 简称 XXXcontract
3创建Controller类
4创建DP类
5创建SSRSReport
1新建dataset 设置dp(我们之前创建的Dp类)
2创建Desion
3部署报表
6细节以及问题