/// <summary>
        /// 将报表对象转换为DSL串
        /// </summary>
        /// <param name="report"></param>
        /// <returns></returns>
        private string Parse(MobileReport report)
        {
            string tableSchema = string.Empty;
            string reportStr;
            string rowData;

            if (report.Page == 0) //第一页
            {
                tableSchema = DslTransfer.TransferToTableSchema(report);
                //Logger logger = Logger.GetLogger("DSLTransfer");
                //logger.Info(tableSchema);
                //logger.Close();
                byte[] bytes = Encoding.Default.GetBytes(tableSchema);
                tableSchema = Convert.ToBase64String(bytes);
                rowData     = RetrieveRowData.TransferToRowData(report);
                reportStr   = string.Format("<report><tableSchema>{0}</tableSchema>{1}</report>", tableSchema, rowData);
            }
            else
            {
                if (report.SemiRows != null)
                {
                    string columnstr = this.GetCacheInfoFromSession(this._responseXml, "columnsString");
                    byte[] bytes     = Convert.FromBase64String(columnstr);
                    columnstr = Encoding.Default.GetString(bytes);
                    rowData   = RetrieveRowData.TransferToRowData(columnstr, report);
                    reportStr = string.Format("<report>{0}</report>", rowData);
                }
                else
                {
                    reportStr = null;
                }
            }
            return(reportStr);
        }
        public override ActionResult Execute(string token, string actionType, Dictionary <string, string> parameters,
                                             ref string responseXml)
        {
            System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->ExecuteOpenReport TaskID: " + token + "  Start:" + System.DateTime.Now.ToString());
            this.Init(token, actionType, parameters, ref responseXml);
            this._responseXml = responseXml;
            var result = new ActionResult()
            {
                Action      = actionType,
                Flag        = 1,
                Description = "调用失败",
                ResultData  = null
            };

            if (!this.CheckReportExist(parameters))
            {
                result.Description = "该查询方案不存在,可能已经取消发布到移动端,请确认!";
                return(result);
            }
            try
            {
                var engine    = new MobileReportEngine(token, actionType, parameters, ref responseXml);
                int startLine = Convert.ToInt32(this.GetInformationByKey("startline", parameters));
                if (startLine == 1) //请求第一页数据
                {
                    this._mobileReport  = engine.OpenReport(parameters);
                    this._pageRowsCount = engine.GetReportPageRowCount();
                    //this._mobileReport = this.OpenReport(this._loginInfo, parameters);
                    this._mobileReport.Page = 0;
                    int    totalpage         = this._mobileReport.Report.RowsCount / this._pageRowsCount + 1;
                    string reportCacheString = RetrieveRowData.GetColumnsInfoString(this._mobileReport);
                    this.SetCacheInfoIntoSession(ref responseXml, "currentpage", "1");
                    this.SetCacheInfoIntoSession(ref responseXml, "totalpage", totalpage.ToString());
                    byte[] bytes = Encoding.Default.GetBytes(reportCacheString);
                    reportCacheString = Convert.ToBase64String(bytes);
                    this.SetCacheInfoIntoSession(ref responseXml, "columnsString", reportCacheString);
                    this.SetCacheInfoIntoSession(ref responseXml, "cacheid", this._mobileReport.Report.CacheID);
                }
                else
                {
                    int pageIndex = Convert.ToInt32(this.GetCacheInfoFromSession(responseXml, "currentpage"));
                    if (pageIndex == 0)
                    {
                        pageIndex = Convert.ToInt32(parameters["currentpage"].ToString());
                    }
                    int totalpage = Convert.ToInt32(this.GetCacheInfoFromSession(responseXml, "totalpage"));
                    if (totalpage == 0)
                    {
                        totalpage       = Convert.ToInt32(parameters["totalpage"].ToString());
                        this._totolPage = totalpage.ToString();
                    }
                    if (pageIndex + 1 > totalpage)
                    {
                        result.ResultData = null;
                        result.Flag       = 0;
                        return(result);
                    }
                    else
                    {
                        string cacheId = GetCacheInfoFromSession(responseXml, "cacheid");
                        if (string.IsNullOrEmpty(cacheId))
                        {
                            cacheId       = parameters["cacheid"].ToString();
                            this._cacheid = cacheId;
                        }
                        int lastIndex = -1;
                        //this._mobileReport = this.PageTo(cacheId, pageIndex, lastIndex);
                        this._mobileReport = engine.PageTo(cacheId, pageIndex, lastIndex);
                        this.SetCacheInfoIntoSession(ref responseXml, "currentpage", (pageIndex + 1).ToString());
                        this._mobileReport.Page = pageIndex + 1;
                    }
                }

                if (_mobileReport != null)
                {
                    System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->ParseReport TaskID: " + _loginInfo.TaskID + "  Start:" + System.DateTime.Now.ToString());
                    result.ResultData = Parse(this._mobileReport);
                    System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->ParseReport TaskID: " + _loginInfo.TaskID + "  End:" + System.DateTime.Now.ToString());
                    result.Flag        = 0;
                    result.Description = "获取报表成功";
                }
            }
            catch (Exception ex)
            {
                result.Flag        = 1;
                result.Description = "获取报表数据失败:" + ex.Message;

                if (ex.Message.Contains("无法将类型为“U8Login.clsLoginClass”的 COM 对象强制转换为接口类型“U8Login._clsLogin”") && !parameters.ContainsKey("AAA"))
                {
                    parameters.Add("AAA", "1");
                    return(Execute(token, actionType, parameters, ref responseXml));
                }
            }
            System.Diagnostics.Trace.WriteLine("<<<<<<<<<<MobileReportTest>>>>>>>>>>OpenReport-->ExecuteOpenReport TaskID: " + token + "  End:" + System.DateTime.Now.ToString());
            return(result);
        }