示例#1
0
 /// <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);
     }
 }
示例#2
0
        /// <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方法获取数据源,打开一张报表
        }