/// <summary> /// step 4 /// </summary> /// <param name="result"></param> protected void GetPageNumber(ReportRequest rRequest, ref ReportExecuteResult result) { try { ReportViewer.Versions.TryGetValue(this.ReportSettings.ReportServer, out System.Version version); if (version.Major <= 11) { AspNetCore.Report.ReportExecutionService.GetExecutionInfo2Request request2 = new AspNetCore.Report.ReportExecutionService.GetExecutionInfo2Request(); AspNetCore.Report.ReportExecutionService.GetExecutionInfo2Response response2 = this.ReportClient.GetExecutionInfo2Async(request2).GetAwaiter().GetResult(); result.PageCount = response2.executionInfo.NumPages; result.PageIndex = rRequest.PageIndex; ReportExecuteResult obj = result; AspNetCore.Report.ReportExecutionService.ExecutionHeader executionHeader = this.ReportClient.ExecutionHeader; string text = executionHeader.ExecutionID = response2.executionInfo.ExecutionID; string text4 = obj.SessionId = (rRequest.SessionId = text); } else { AspNetCore.Report.ReportExecutionService.GetExecutionInfo3Request request = new AspNetCore.Report.ReportExecutionService.GetExecutionInfo3Request(); AspNetCore.Report.ReportExecutionService.GetExecutionInfo3Response response = this.ReportClient.GetExecutionInfo3Async(request).GetAwaiter().GetResult(); result.PageCount = response.executionInfo.NumPages; result.PageIndex = rRequest.PageIndex; ReportExecuteResult obj2 = result; AspNetCore.Report.ReportExecutionService.ExecutionHeader executionHeader2 = this.ReportClient.ExecutionHeader; string text = executionHeader2.ExecutionID = response.executionInfo.ExecutionID; string text4 = obj2.SessionId = (rRequest.SessionId = text); } } catch (System.Exception ex) { throw new ReportException("GetPageNumber error: " + ex.Message, ex); } }
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(); this.LoadReport(request, ref result); AspNetCore.Report.ReportExecutionService.ToggleItemResponse s = this.ReportClient.ToggleItemAsync(new AspNetCore.Report.ReportExecutionService.ToggleItemRequest(request.ToggleId)).GetAwaiter().GetResult(); if (s.Found) { this.Render(request, ref result, null); this.GetPageNumber(request, ref result); response.Data = this.SetData(result, true); response.Data.Contents = this.GetContent(result.Stream, this.ReportSettings.ShowToolBar); } else { response.Status = 5; response.Message = "Toggle: not found item"; } } catch (System.Exception ex) { response.Status = 1; response.Message = "Toggle:" + ex.Message; } return(response); }
protected ReportData SetData(ReportExecuteResult result, bool appendStream = true) { ReportData data = new ReportData { SessionId = result.SessionId, Extension = result.Extension, MimeType = result.MimeType, PageCount = result.PageCount, PageIndex = result.PageIndex }; if (ReportViewer.Versions.TryGetValue(this.ReportSettings.ReportServer, out System.Version version)) { data.Version = version; } if (appendStream && result.Stream != null) { data.Stream = result.Stream; } if (!string.IsNullOrEmpty(result.Contents)) { data.Contents = this.GetContent(result.Contents, this.ReportSettings.ShowToolBar); } return(data); }
protected ReportResponse FindString(ReportRequest request) { ReportResponse response2 = new ReportResponse(); if (string.IsNullOrEmpty(request.FindString)) { response2.Status = 2; response2.Message = "Search value can not be empty."; return(response2); } try { ReportExecuteResult result = new ReportExecuteResult(); this.LoadReport(request, ref result); this.Render(request, ref result, null); this.GetPageNumber(request, ref result); AspNetCore.Report.ReportExecutionService.FindStringRequest request2 = new AspNetCore.Report.ReportExecutionService.FindStringRequest { FindValue = request.FindString, StartPage = request.PageIndex, EndPage = result.PageCount }; System.Runtime.CompilerServices.TaskAwaiter <AspNetCore.Report.ReportExecutionService.FindStringResponse> awaiter = this.ReportClient.FindStringAsync(request2).GetAwaiter(); AspNetCore.Report.ReportExecutionService.FindStringResponse response = awaiter.GetResult(); if (response.PageNumber > 0) { ReportExecuteResult reportExecuteResult = result; int num2 = reportExecuteResult.PageIndex = (request.PageIndex = response.PageNumber); } else { if (request.PageIndex > 1) { request2.StartPage = 1; } awaiter = this.ReportClient.FindStringAsync(request2).GetAwaiter(); response = awaiter.GetResult(); if (response.PageNumber < 1) { response2.Status = 23; response2.Message = "The Find Text not found in the report"; return(response2); } ReportExecuteResult reportExecuteResult2 = result; int num2 = reportExecuteResult2.PageIndex = (request.PageIndex = response.PageNumber); } this.Render(request, ref result, null); response2.Data = this.SetData(result, true); response2.Data.Contents = this.GetContent(result.Stream, this.ReportSettings.ShowToolBar); } catch (System.Exception ex) { response2.Status = 1; response2.Message = ex.Message; } return(response2); }
protected ReportResponse Export(ReportRequest request) { ReportResponse response = new ReportResponse(); try { ReportExecuteResult result = new ReportExecuteResult(); this.LoadReport(request, ref result); this.Render(request, ref result, null); response.Data = this.SetData(result, true); } catch (System.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 { AspNetCore.Report.ReportExecutionService.ParameterValue[] paramenters = System.Linq.Enumerable.ToArray(System.Linq.Enumerable.Select(rRequest.Parameters, (System.Collections.Generic.KeyValuePair <string, string> t) => new AspNetCore.Report.ReportExecutionService.ParameterValue { Name = t.Key, Value = t.Value })); AspNetCore.Report.ReportExecutionService.SetExecutionParametersRequest request = new AspNetCore.Report.ReportExecutionService.SetExecutionParametersRequest(paramenters, "en-us"); AspNetCore.Report.ReportExecutionService.SetExecutionParametersResponse response = this.ReportClient.SetExecutionParametersAsync(request).GetAwaiter().GetResult(); string text2 = result.SessionId = (rRequest.SessionId = response.executionInfo.ExecutionID); } catch (System.Exception ex) { throw new ReportException("SetParameters error: " + ex.Message, ex); } }
/// <summary> /// step 3. /// </summary> /// <param name="result"></param> protected void Render(ReportRequest rRequest, ref ReportExecuteResult result, string findString = null) { try { AspNetCore.Report.DeviceInfos.DeviceInfo deviceInfo = this.GenerateDeviceInfo(rRequest); ReportViewer.Versions.TryGetValue(this.ReportSettings.ReportServer, out System.Version version); string format; ReportRenderType reportRenderType; switch (rRequest.RenderType) { case ReportRenderType.Html4_0: format = "Html4.0"; break; case ReportRenderType.ExcelOpenXml: if (version.Major < 11) { reportRenderType = ReportRenderType.Excel; format = reportRenderType.ToString(); } else { reportRenderType = ReportRenderType.ExcelOpenXml; format = reportRenderType.ToString(); } break; case ReportRenderType.WordOpenXml: if (version.Major < 11) { reportRenderType = ReportRenderType.Word; format = reportRenderType.ToString(); } else { reportRenderType = ReportRenderType.WordOpenXml; format = reportRenderType.ToString(); } break; default: reportRenderType = rRequest.RenderType; format = reportRenderType.ToString(); break; } string strDeviceInfo = deviceInfo.ToString(); AspNetCore.Report.ReportExecutionService.Render2Request request = new AspNetCore.Report.ReportExecutionService.Render2Request(format, strDeviceInfo, AspNetCore.Report.ReportExecutionService.PageCountMode.Actual); AspNetCore.Report.ReportExecutionService.Render2Response response = this.ReportClient.Render2Async(request).GetAwaiter().GetResult(); if (rRequest.RenderType == ReportRenderType.Html4_0 || rRequest.RenderType == ReportRenderType.Html5) { string content = System.Text.Encoding.UTF8.GetString(response.Result); System.Text.StringBuilder sb = new System.Text.StringBuilder(content); System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("(<img [^>]*? src=\"([^\"]+&rs%3AImageID=([^\"']+))\")", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Match matchs = reg.Match(content); while (matchs.Success) { string a = matchs.Result("$1"); string b = matchs.Result("$2"); string c = matchs.Result("$3"); AspNetCore.Report.ReportExecutionService.RenderStreamResponse cc = this.ReportClient.RenderStreamAsync(new AspNetCore.Report.ReportExecutionService.RenderStreamRequest(format, c, strDeviceInfo)).GetAwaiter().GetResult(); string img = $"data:{cc.MimeType};base64,{System.Convert.ToBase64String(cc.Result)}"; string 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 (System.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) { AspNetCore.Report.ReportExecutionService.ResetExecutionResponse r = this.ReportClient.ResetExecutionAsync(new AspNetCore.Report.ReportExecutionService.ResetExecutionRequest()).GetAwaiter().GetResult(); result.SessionId = r.executionInfo.ExecutionID; } this.ReportClient.ExecutionHeader.ExecutionID = request.SessionId; AspNetCore.Report.ReportExecutionService.GetExecutionInfoResponse rr = this.ReportClient.GetExecutionInfoAsync(new AspNetCore.Report.ReportExecutionService.GetExecutionInfoRequest()).GetAwaiter().GetResult(); } catch { request.SessionId = null; } } if (string.IsNullOrEmpty(request.SessionId)) { AspNetCore.Report.ReportExecutionService.LoadReportRequest request2 = new AspNetCore.Report.ReportExecutionService.LoadReportRequest(request.Path, null); AspNetCore.Report.ReportExecutionService.LoadReportResponse response = this.ReportClient.LoadReportAsync(request2).GetAwaiter().GetResult(); try { System.Text.RegularExpressions.Match match = ReportViewer.VersionRegex.Match(response.ServerInfoHeader.ReportServerVersion); if (match.Success) { ReportViewer.Versions.TryAdd(this.ReportSettings.ReportServer, System.Version.Parse(match.Result("$1"))); } } catch { } result.ParametersRequired = response.executionInfo.ParametersRequired; System.Collections.Generic.Dictionary <string, string> dict = new System.Collections.Generic.Dictionary <string, string>(response.executionInfo.Parameters.Length); if (response.executionInfo.Parameters.Length != 0) { AspNetCore.Report.ReportExecutionService.ReportParameter[] parameters = response.executionInfo.Parameters; foreach (AspNetCore.Report.ReportExecutionService.ReportParameter p in parameters) { if (p.DefaultValues != null && p.DefaultValues.Length != 0) { dict[p.Name] = System.Linq.Enumerable.SingleOrDefault(p.DefaultValues); } if (request.Parameters.ContainsKey(p.Name)) { dict[p.Name] = request.Parameters[p.Name]; } } } request.Parameters = dict; ReportExecuteResult obj3 = result; string text2 = obj3.SessionId = (request.SessionId = response.executionInfo.ExecutionID); this.SetParameters(request, result); } } catch (System.Exception ex) { throw new ReportException("LoadReport error: " + ex.Message, ex); } }