protected ReportResponse Toggle(ReportRequest request) { ReportResponse response = new ReportResponse(); if (string.IsNullOrEmpty(request.ToggleId)) { response.Status = 2; response.Message = "The ToggleId can not be empty."; return(response); } try { ReportExecuteResult result = new ReportExecuteResult(); LoadReport(request, ref result); var s = ReportClient.ToggleItemAsync(new ToggleItemRequest(request.ToggleId)).GetAwaiter().GetResult(); if (s.Found) { Render(request, ref result); GetPageNumber(request, ref result); response.Data = SetData(result); response.Data.Contents = GetContent(result.Stream, ReportSettings.ShowToolBar); } else { response.Status = 5; response.Message = "Toggle: not found item"; } } catch (Exception ex) { response.Status = 1; response.Message = "Toggle:" + ex.Message; } return(response); }
/// <summary> /// step 4 /// </summary> /// <param name="result"></param> protected void GetPageNumber(ReportRequest rRequest, ref ReportExecuteResult result) { try { Versions.TryGetValue(this.ReportSettings.ReportServer, out Version version); if (version.Major <= SuportExportVersion) { var request = new GetExecutionInfo2Request(); var response = ReportClient.GetExecutionInfo2Async(request).GetAwaiter().GetResult(); result.PageCount = response.executionInfo.NumPages; result.PageIndex = rRequest.PageIndex; result.SessionId = rRequest.SessionId = ReportClient.ExecutionHeader.ExecutionID = response.executionInfo.ExecutionID; } else { var request = new GetExecutionInfo3Request(); var response = ReportClient.GetExecutionInfo3Async(request).GetAwaiter().GetResult(); result.PageCount = response.executionInfo.NumPages; result.PageIndex = rRequest.PageIndex; result.SessionId = rRequest.SessionId = ReportClient.ExecutionHeader.ExecutionID = response.executionInfo.ExecutionID; } } catch (Exception ex) { throw new ReportException("GetPageNumber error: " + ex.Message, ex); } }
protected ReportData SetData(ReportExecuteResult result, bool appendStream = true) { var data = new ReportData { SessionId = result.SessionId, Extension = result.Extension, MimeType = result.MimeType, PageCount = result.PageCount, PageIndex = result.PageIndex, }; if (Versions.TryGetValue(this.ReportSettings.ReportServer, out Version version)) { data.Version = version; } if (appendStream && result.Stream != null) { data.Stream = result.Stream; } if (!string.IsNullOrEmpty(result.Contents)) { data.Contents = GetContent(result.Contents, ReportSettings.ShowToolBar); } return(data); }
protected ReportResponse FindString(ReportRequest request) { ReportResponse response = new ReportResponse(); if (string.IsNullOrEmpty(request.FindString)) { response.Status = 2; response.Message = "Search value can not be empty."; return(response); } try { ReportExecuteResult result = new ReportExecuteResult(); LoadReport(request, ref result); Render(request, ref result); GetPageNumber(request, ref result); var request0 = new FindStringRequest { FindValue = request.FindString, StartPage = request.PageIndex, EndPage = result.PageCount }; var response0 = ReportClient.FindStringAsync(request0).GetAwaiter().GetResult(); if (response0.PageNumber > 0) { result.PageIndex = request.PageIndex = response0.PageNumber; } else { if (request.PageIndex > 1) { request0.StartPage = 1; } response0 = ReportClient.FindStringAsync(request0).GetAwaiter().GetResult(); if (response0.PageNumber < 1) { response.Status = 23; response.Message = "The Find Text not found in the report"; return(response); } else { result.PageIndex = request.PageIndex = response0.PageNumber; } } Render(request, ref result); response.Data = SetData(result); response.Data.Contents = GetContent(result.Stream, ReportSettings.ShowToolBar); } catch (Exception ex) { response.Status = 1; response.Message = ex.Message; } return(response); }
protected ReportResponse Display(ReportRequest request) { ReportResponse response = new ReportResponse(); try { ReportExecuteResult result = new ReportExecuteResult(); LoadReport(request, ref result); Render(request, ref result); GetPageNumber(request, ref result); response.Data = SetData(result, false); } catch (Exception ex) { response.Status = 1; response.Message = ex.Message; } return(response); }
/// <summary> /// step 2. /// </summary> protected void SetParameters(ReportRequest rRequest, ReportExecuteResult result) { if (result.ParametersRequired && rRequest.Parameters.Count == 0) { throw new ReportException("The report parameters is required."); } try { var paramenters = rRequest.Parameters.Select(t => new ParameterValue { Name = t.Key, Value = t.Value }).ToArray(); var request = new SetExecutionParametersRequest(paramenters, "en-us"); var response = ReportClient.SetExecutionParametersAsync(request).GetAwaiter().GetResult(); result.SessionId = rRequest.SessionId = response.executionInfo.ExecutionID; } catch (Exception ex) { throw new ReportException("SetParameters error: " + ex.Message, ex); } }
protected ReportResponse Export(ReportRequest request) { ReportResponse response = new ReportResponse(); try { ReportExecuteResult result = new ReportExecuteResult(); LoadReport(request, ref result); Render(request, ref result); response.Data = SetData(result); //response.Data.FileName = fileName; } catch (Exception ex) { response.Status = 1; response.Message = ex.Message; } return(response); }
/// <summary> /// step 3. /// </summary> /// <param name="result"></param> protected void Render(ReportRequest rRequest, ref ReportExecuteResult result, string findString = null) { try { var deviceInfo = GenerateDeviceInfo(rRequest); string format; Versions.TryGetValue(this.ReportSettings.ReportServer, out Version version); switch (rRequest.RenderType) { case ReportRenderType.Html4_0: format = "Html4.0"; break; case ReportRenderType.ExcelOpenXml: if (version.Major < SuportExportVersion) { format = ReportRenderType.Excel.ToString(); } else { format = ReportRenderType.ExcelOpenXml.ToString(); } break; case ReportRenderType.WordOpenXml: if (version.Major < SuportExportVersion) { format = ReportRenderType.Word.ToString(); } else { format = ReportRenderType.WordOpenXml.ToString(); } break; default: format = rRequest.RenderType.ToString(); break; } var strDeviceInfo = deviceInfo.ToString(); //strDeviceInfo = @"<DeviceInfo><HTMLFragment>true</HTMLFragment><Section>0</Section></DeviceInfo>"; var request = new Render2Request(format, strDeviceInfo, ReportExecutionService.PageCountMode.Actual); var response = ReportClient.Render2Async(request).GetAwaiter().GetResult(); if (rRequest.RenderType == ReportRenderType.Html4_0 || rRequest.RenderType == ReportRenderType.Html5) { StringBuilder sb = new StringBuilder(Encoding.UTF8.GetString(response.Result)); Regex reg = new Regex("(<img [^>]*? src=\"([^\"]+&rs%3AImageID=([^\"']+))\")", RegexOptions.IgnoreCase); var matchs = reg.Match(sb.ToString()); while (matchs.Success) { var a = matchs.Result("$1"); var b = matchs.Result("$2"); var c = matchs.Result("$3"); var cc = ReportClient.RenderStreamAsync(new RenderStreamRequest(format, c, strDeviceInfo)).GetAwaiter().GetResult(); var img = $"data:{cc.MimeType};base64,{Convert.ToBase64String(cc.Result)}"; var aa = a.Replace(b, img); sb.Replace(a, aa); matchs = matchs.NextMatch(); } result.Contents = sb.ToString(); } result.Stream = response.Result; result.Encoding = response.Encoding; result.Extension = response.Extension; result.MimeType = response.MimeType; } catch (Exception ex) { throw new ReportException("Render error: " + ex.Message, ex); } }
/// <summary> /// step 1 /// </summary> protected void LoadReport(ReportRequest request, ref ReportExecuteResult result) { if (string.IsNullOrEmpty(request.Path)) { throw new ReportException("Please set ReportPath to execute."); } try { if (!string.IsNullOrEmpty(request.SessionId)) { try { if (request.Reset) { var r = ReportClient.ResetExecutionAsync(new ResetExecutionRequest()).GetAwaiter().GetResult(); result.SessionId = r.executionInfo.ExecutionID; } ReportClient.ExecutionHeader.ExecutionID = request.SessionId; var rr = ReportClient.GetExecutionInfoAsync(new GetExecutionInfoRequest()).GetAwaiter().GetResult(); } catch { request.SessionId = null; } } if (string.IsNullOrEmpty(request.SessionId)) { LoadReportRequest request0 = new LoadReportRequest(request.Path, null); LoadReportResponse response = ReportClient.LoadReportAsync(request0).GetAwaiter().GetResult(); try { var match = VersionRegex.Match(response.ServerInfoHeader.ReportServerVersion); if (match.Success) { Versions.TryAdd(this.ReportSettings.ReportServer, Version.Parse(match.Result("$1"))); } } catch { } result.ParametersRequired = response.executionInfo.ParametersRequired; var dict = new Dictionary <string, string>(response.executionInfo.Parameters.Length); if (response.executionInfo.Parameters.Length > 0) { foreach (var p in response.executionInfo.Parameters) { if (p.DefaultValues != null && p.DefaultValues.Length > 0) { dict[p.Name] = p.DefaultValues.SingleOrDefault(); } if (request.Parameters.ContainsKey(p.Name)) { dict[p.Name] = request.Parameters[p.Name]; } } } request.Parameters = dict; result.SessionId = request.SessionId = response.executionInfo.ExecutionID; //ReportClient.ToggleItemAsync() SetParameters(request, result); } } catch (Exception ex) { throw new ReportException("LoadReport error: " + ex.Message, ex); } }