/// <summary> /// 翻页操作 /// </summary> /// <param name="cacheid"></param> /// <param name="pageindex">从0开始</param> /// <param name="lastindex">=-1,自己处理</param> public MobileReport PageTo(string cacheid, int pageindex, int lastindex) { try { var enginAdapter = new MobileReportEngineAdapter(this._loginInfo); enginAdapter.PageTo(cacheid, pageindex, lastindex); while (!enginAdapter.GetReport().ReportDataEnd) { enginAdapter.GetMessage(); } return(enginAdapter.GetReport()); } catch (Exception e) { return(null); } }
/// <summary> /// 打开一张报表 /// </summary> /// <param name="parameters"></param> /// <param name="filterString">下载时使用,直接传入过滤字符串</param> /// <param name="isGetAllDate">是否获取所有报表数据,为true则为被下载时调用</param> /// <returns></returns> public MobileReport OpenReport(Dictionary <string, string> parameters = null, string filterString = null, bool isGetAllDate = false) { var time = DateTime.Now; #region 1.LoadFormat 读取报表结构 System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->LoadFormat TaskID: " + _loginInfo.TaskID + " Start:" + time.ToString()); var reportEngine = new ReportEngine(this._loginInfo, ReportStates.Browse); //reportEngine.LoadFormat(null, this._viewId, null, null, null, null, null); System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->LoadFormat TaskID: " + _loginInfo.TaskID + " End:" + System.DateTime.Now.ToString()); System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->LoadFormat TaskID: " + _loginInfo.TaskID + " Use Time " + (DateTime.Now - time).ToString()); #endregion 1.LoadFormat 读取报表结构 #region 2.GetSql 与习文过滤交互,获取过滤对象 time = System.DateTime.Now; System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->GetSql TaskID: " + _loginInfo.TaskID + " Start:" + time.ToString()); // 调用习文的FilterSrv方法,构建FilterArgs的RawFilter部分 FilterSrv objfilter = new FilterSrvClass(); object err = null; objfilter.InitSolutionID = _solutionId; // 构建Filter对象_filter _filter = new FilterArgs(this._reportId, this._filterClass, this._loginInfo); this.InitFilter(ref _filter, this._loginInfo); //if (!isGetAllDate) // this.InitFilter2(ref _filter, this._loginInfo); _filter.RawFilter = objfilter; var filter1 = _filter.RawFilter as FilterSrv; // 创建业务组的自定义行为对象,传给过滤控件 if (!string.IsNullOrEmpty(_filter.FilterClass)) { var oComObj = Activator.CreateInstance( Type.GetTypeFromProgID(_filter.FilterClass)); filter1.BehaviorObject = oComObj; } filter1.FilterArgs.Add(_filter.Args["ufreportarg"], "ufreportarg"); bool flag = filter1.OpenFilter(this._loginInfo.U8Login, _filterId, null, null, ref err, true); if (flag) { UFGeneralFilter.FilterItemsClass filterItems = filter1.FilterList as FilterItemsClass; for (int i = 1; i < filterItems.Count + 1; i++) { ReportFilterService.FilterItem item = new ReportFilterService.FilterItem(filterItems[i].Key, filterItems[i].varValue); _filter.FltDAESrv.Add(item); _filter.FltSrv.Add(item); if (!String.IsNullOrEmpty(filterItems[i].DAEexpression1)) { ReportFilterService.FilterItem item1 = new ReportFilterService.FilterItem(filterItems[i].DAEexpression1, filterItems[i].varValue); _filter.FltDAESrv.Add(item1); _filter.FltSrv.Add(item); } } //1.初始化一个reportEngine对象 if (parameters == null) //下载时逻辑,直接传入 { _filter.DataSource.FilterString = this.FillCustomFilterString(objfilter, filterString); } else //界面打开时 { _filter.ViewID = this._viewId; _filter.DataSource.FilterString = this.FillCustomFilterString(objfilter, parameters); //_filter.DataSource.FilterString = JsonTransfer.VTransfer(_filter.DataSource.FilterString); //_filter.DataSource.FilterString = "1=1"; } } else { string errorInfo = err.ToString(); throw new InvalidEnumArgumentException("该报表有必输过滤项目没有设置默认值,请设置默认值重新查询!" + errorInfo); } // 从习文的过滤对象中取得值赋值给报表过滤对象 this.InitFilterArgsAfterOpenFilter(ref _filter, filter1.InitSolutionID); #endregion 2.GetSql 与习文过滤交互,获取过滤对象 System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->GetSql TaskID: " + _loginInfo.TaskID + " End:" + System.DateTime.Now.ToString()); System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->GetSql TaskID: " + _loginInfo.TaskID + " Use Time " + (DateTime.Now - time).ToString()); #region 3.OpenReport 调用业务组getSql方法获取数据源,打开一张报表 time = System.DateTime.Now; System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->OpenReport TaskID: " + _loginInfo.TaskID + " Start:" + time.ToString()); var engineAdapter = new MobileReportEngineAdapter(this._loginInfo); //这里有个GetSql()方法。 this._filterFlag = this.GetfilterFlag(); engineAdapter.OpenReport(_filter, _filterFlag, null, null, null, _baseTableName); // 参照BS的GetMessage,循环调用拉取数据 this._mobileReport = engineAdapter.GetReport(); // 如果是第一次打开新的报表 while (!this._mobileReport.PageEnd) { engineAdapter.GetMessage(); } this._mobileReport = engineAdapter.GetReport(); if (isGetAllDate)// 如果是下载全部报表数据,这里采用pageTo方法获取所有报表数据. { this._mobileReport.SemiRows = new SemiRows(); var mobileReport = this.PageTo(this._mobileReport.Report.CacheID, -1, -1); this._mobileReport.SemiRows = mobileReport.SemiRows; } System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->OpenReport TaskID: " + _loginInfo.TaskID + " End:" + System.DateTime.Now.ToString()); System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->OpenReport TaskID: " + _loginInfo.TaskID + " Use Time " + (DateTime.Now - time).ToString()); return(this._mobileReport); #endregion 3.OpenReport 调用业务组getSql方法获取数据源,打开一张报表 }