internal static bool InitializeSubReport(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport) { bool result = false; OnDemandProcessingContext onDemandProcessingContext = null; try { onDemandProcessingContext = subReport.OdpContext; result = new Merge(subReport.Report, onDemandProcessingContext).InitAndSetupSubReport(subReport); if (onDemandProcessingContext.ErrorContext.Messages != null) { if (0 < onDemandProcessingContext.ErrorContext.Messages.Count) { onDemandProcessingContext.TopLevelContext.ErrorContext.Register(ProcessingErrorCode.rsWarningExecutingSubreport, Severity.Warning, subReport.ObjectType, subReport.Name, null, onDemandProcessingContext.ErrorContext.Messages); return(result); } return(result); } return(result); } catch (Exception e) { Microsoft.ReportingServices.ReportProcessing.ReportProcessing.HandleSubReportProcessingError(onDemandProcessingContext.TopLevelContext.ErrorContext, subReport, InstancePathItem.GenerateInstancePathString(subReport.InstancePath), onDemandProcessingContext.ErrorContext, e); return(result); } }
private bool IsTextboxInScope() { OnDemandProcessingContext odpContext = m_reportRT.ReportObjectModel.OdpContext; IRIFReportScope iRIFReportScope = null; if (odpContext.IsTablixProcessingMode) { iRIFReportScope = odpContext.LastTablixProcessingReportScope; if (iRIFReportScope == null) { iRIFReportScope = odpContext.ReportDefinition; } } else if (odpContext.IsTopLevelSubReportProcessing) { Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport = odpContext.LastRIFObject as Microsoft.ReportingServices.ReportIntermediateFormat.SubReport; Global.Tracer.Assert(subReport != null, "Missing reference to subreport object"); iRIFReportScope = subReport.GetContainingSection(odpContext); } else { IReportScope currentReportScope = odpContext.CurrentReportScope; iRIFReportScope = ((currentReportScope == null) ? odpContext.ReportDefinition : currentReportScope.RIFReportScope); } if (iRIFReportScope == null || !iRIFReportScope.TextboxInScope(m_textBox.SequenceID)) { return(false); } return(true); }
internal bool FetchSubReportData(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport, Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance subReportInstance) { Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance = subReportInstance.ReportInstance.Value(); reportInstance.ResetReportVariables(subReport.OdpContext); bool flag; try { FetchData(reportInstance, subReport.MergeTransactions); if (subReport.OdpContext.ReprocessSnapshot && reportInstance.IsMissingExpectedDataChunk(subReport.OdpContext)) { flag = false; } else { if (subReport.OdpContext.ReprocessSnapshot && !subReport.InDataRegion) { PreProcessTablixes(subReport.Report, subReport.OdpContext, onlyWithSubReports: false); } flag = true; } } catch (ProcessingAbortedException) { flag = false; } if (flag) { reportInstance.CalculateAndStoreReportVariables(subReport.OdpContext); } return(flag); }
private void CheckRetrievalStatus(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status status) { Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport = (Microsoft.ReportingServices.ReportIntermediateFormat.SubReport)m_reportItemDef; switch (status) { case Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.NotRetrieved: case Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DefinitionRetrieveFailed: m_errorCode = SubReportErrorCodes.MissingSubReport; m_errorMessage = RPRes.rsMissingSubReport(subReport.Name, subReport.OriginalCatalogPath); break; case Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DataRetrieveFailed: m_errorCode = SubReportErrorCodes.DataRetrievalFailed; m_errorMessage = RPRes.rsSubReportDataRetrievalFailed(subReport.Name, subReport.OriginalCatalogPath); break; case Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DataNotRetrieved: m_errorCode = SubReportErrorCodes.DataNotRetrieved; m_errorMessage = RPRes.rsSubReportDataNotRetrieved(subReport.Name, subReport.OriginalCatalogPath); break; case Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.ParametersNotSpecified: m_errorCode = SubReportErrorCodes.ParametersNotSpecified; m_errorMessage = RPRes.rsSubReportParametersNotSpecified(subReport.Name, subReport.OriginalCatalogPath); break; default: m_errorCode = SubReportErrorCodes.Success; m_errorMessage = null; break; } FinalizeErrorMessageAndThrow(); }
internal UserSortFilterContext(UserSortFilterContext parentContext, Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport) { m_runtimeSortFilterInfo = parentContext.RuntimeSortFilterInfo; m_dataSetGlobalID = parentContext.DataSetGlobalId; m_inProcessUserSortPhase = parentContext.m_inProcessUserSortPhase; subReport.UpdateSubReportScopes(parentContext); m_containingScopes = subReport.ContainingScopes; m_detailScopeSubReports = subReport.DetailScopeSubReports; }
internal bool InitAndSetupSubReport(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport) { IReference <Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance> currentSubReportInstance = subReport.CurrentSubReportInstance; bool num = InitSubReport(subReport, currentSubReportInstance); if (num) { Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance = currentSubReportInstance.Value().ReportInstance.Value(); m_odpContext.SetupEnvironment(reportInstance); m_odpContext.ReportObjectModel.UserImpl.UpdateUserProfileLocationWithoutLocking(UserProfileState.OnDemandExpressions); m_odpContext.IsUnrestrictedRenderFormatReferenceMode = true; } currentSubReportInstance.Value().Initialized = true; return(num); }
private RenderingContext GetOrCreateRenderingContext(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport, Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance) { RenderingContext renderingContext = null; if (m_report == null) { renderingContext = new RenderingContext(m_renderingContext, subReport.OdpContext); m_report = new Report(this, subReport.Report, reportInstance, renderingContext, subReport.ReportName, subReport.Description, m_inSubtotal); } else { renderingContext = m_report.RenderingContext; m_report.SetNewContext(reportInstance); } return(renderingContext); }
private void CreateSubReportInstance(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport, ScopeInstance parentInstance, OnDemandProcessingContext odpContext, IReference <IScope> owner) { if (subReport.ExceededMaxLevel) { return; } IReference <Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance> reference2 = subReport.CurrentSubReportInstance = Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance.CreateInstance(parentInstance, subReport, odpContext.OdpMetadata); subReport.OdpContext.UserSortFilterContext.CurrentContainingScope = owner; odpContext.LastTablixProcessingReportScope = parentInstance.RIFReportScope; if (SubReportInitializer.InitializeSubReport(subReport)) { IReference <Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance> reportInstance = reference2.Value().ReportInstance; Merge.PreProcessTablixes(subReport.Report, subReport.OdpContext, !odpContext.ReprocessSnapshot); if (subReport.Report.HasSubReports) { SubReportInitializer.InitializeSubReports(subReport.Report, reportInstance.Value(), subReport.OdpContext, inDataRegion: false, fromCreateSubReportInstance: true); } } reference2?.Value().InstanceComplete(); odpContext.EnsureCultureIsSetOnCurrentThread(); }
internal override object PublishClone(AutomaticSubtotalContext context) { SubReport subReport = (SubReport)base.PublishClone(context); context.AddSubReport(subReport); if (m_reportPath != null) { subReport.m_reportPath = (string)m_reportPath.Clone(); } if (m_parameters != null) { subReport.m_parameters = new List <ParameterValue>(m_parameters.Count); foreach (ParameterValue parameter in m_parameters) { subReport.m_parameters.Add((ParameterValue)parameter.PublishClone(context)); } } if (m_noRowsMessage != null) { subReport.m_noRowsMessage = (ExpressionInfo)m_noRowsMessage.PublishClone(context); } return(subReport); }
internal void AddSubReport(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport) { m_report.SubReports.Add(subReport); }
private static OnDemandProcessingContext InitializeSubReport(OnDemandProcessingContext parentOdpContext, Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport, Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance, bool inDataRegion, bool fromCreateSubReportInstance, out bool prefetchSuccess) { Global.Tracer.Assert(subReport.OdpContext != null, "(null != subReport.OdpContext)"); prefetchSuccess = true; if (!inDataRegion) { IReference <Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance> reference2 = subReport.CurrentSubReportInstance = ((subReport.OdpContext.SnapshotProcessing && !subReport.OdpContext.ReprocessSnapshot) ? reportInstance.SubreportInstances[subReport.IndexInCollection] : Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance.CreateInstance(reportInstance, subReport, parentOdpContext.OdpMetadata)); if (!fromCreateSubReportInstance) { ReportSection containingSection = subReport.GetContainingSection(parentOdpContext); parentOdpContext.SetupContext(containingSection, null); } Merge merge = new Merge(subReport.Report, subReport.OdpContext); prefetchSuccess = merge.InitAndSetupSubReport(subReport); } return(subReport.OdpContext); }
public override void Deserialize(IntermediateFormatReader reader) { reader.RegisterDeclaration(m_Declaration); while (reader.NextMember()) { switch (reader.CurrentMember.MemberName) { case MemberName.SubReport: m_subReportDef = reader.ReadGlobalReference <SubReport>(); break; case MemberName.Parameters: { ParametersImplWrapper parametersImplWrapper = (ParametersImplWrapper)reader.ReadRIFObject(); if (parametersImplWrapper != null) { m_parameters = parametersImplWrapper.WrappedParametersImpl; } break; } case MemberName.ReportInstance: m_reportInstance = (IReference <ReportInstance>)reader.ReadRIFObject(); break; case MemberName.DataSetUniqueName: m_instanceUniqueName = reader.ReadString(); break; case MemberName.ThreadCulture: m_threadCulture = reader.ReadCultureInfo(); break; case MemberName.Status: m_status = (SubReport.Status)reader.ReadEnum(); break; case MemberName.ProcessedWithError: m_processedWithError = reader.ReadBoolean(); break; case MemberName.IsInstanceShared: { object obj2 = reader.ReadVariant(); if (obj2 != null) { m_isInstanceShared = (bool)obj2; } break; } case MemberName.DataChunkNameModifier: { object obj = reader.ReadVariant(); if (obj != null) { m_dataChunkNameModifier = (int)obj; } break; } default: Global.Tracer.Assert(condition: false); break; } } }
internal static IReference <SubReportInstance> CreateInstance(ScopeInstance parentInstance, SubReport subReport, OnDemandMetadata odpMetadata) { SubReportInstance subReportInstance = new SubReportInstance(subReport, odpMetadata); IReference <SubReportInstance> reference = odpMetadata.GroupTreeScalabilityCache.AllocateAndPin(subReportInstance, 0); subReportInstance.m_cleanupRef = (IDisposable)reference; parentInstance.AddChildScope((IReference <ScopeInstance>)reference, subReport.IndexInCollection); return(reference); }
private SubReportInstance(SubReport subreport, OnDemandMetadata odpMetadata) { m_subReportDef = subreport; m_reportInstance = odpMetadata.GroupTreeScalabilityCache.AllocateEmptyTreePartition <ReportInstance>(Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ObjectType.ReportInstanceReference); }
internal SubReport(IReportScope reportScope, IDefinitionPath parentDefinitionPath, int indexIntoParentCollectionDef, Microsoft.ReportingServices.ReportIntermediateFormat.SubReport reportItemDef, RenderingContext renderingContext) : base(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, reportItemDef, renderingContext) { }
private bool InitSubReport(Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport, IReference <Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance> subReportInstanceRef) { bool flag = true; Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance subReportInstance = subReportInstanceRef.Value(); if (m_odpContext.SnapshotProcessing && subReportInstance.ProcessedWithError) { return(false); } try { if (!m_odpContext.SnapshotProcessing) { subReportInstance.RetrievalStatus = subReport.RetrievalStatus; } if (subReportInstance.RetrievalStatus == Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DefinitionRetrieveFailed) { subReportInstance.ProcessedWithError = true; return(false); } if (m_odpContext.CurrentReportInstance == null && subReport.Report != null) { if (!m_odpContext.SnapshotProcessing) { subReport.OdpSubReportInfo.UserSortDataSetGlobalId = m_odpContext.ParentContext.UserSortFilterContext.DataSetGlobalId; } m_odpContext.UserSortFilterContext.UpdateContextForFirstSubreportInstance(m_odpContext.ParentContext.UserSortFilterContext); } if (!m_odpContext.SnapshotProcessing || m_odpContext.ReprocessSnapshot) { Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance = PrepareReportInstance(subReportInstance); m_odpContext.CurrentReportInstance = reportInstance; Init(includeParameters: true, parametersOnly: false); subReportInstance.InstanceUniqueName = m_odpContext.CreateUniqueID().ToString(CultureInfo.InvariantCulture); m_odpContext.SetSubReportContext(subReportInstance, setupReportOM: false); SetupReport(reportInstance); m_parameters = OnDemandProcessingContext.EvaluateSubReportParameters(m_odpContext.ParentContext, subReport); bool hasMissingValidValue; if (!m_odpContext.SnapshotProcessing && !m_odpContext.ProcessWithCachedData) { try { m_odpContext.ProcessReportParameters = true; m_odpContext.ReportObjectModel.ParametersImpl.Clear(); Microsoft.ReportingServices.ReportProcessing.ReportProcessing.ProcessReportParameters(subReport.Report, m_odpContext, m_parameters); } finally { m_odpContext.ProcessReportParameters = false; } if (!m_parameters.ValuesAreValid()) { subReportInstance.RetrievalStatus = Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.ParametersNotSpecified; throw new ReportProcessingException(ErrorCode.rsParametersNotSpecified); } m_odpContext.ReportParameters = m_parameters; } else if (!m_parameters.ValuesAreValid(out hasMissingValidValue) && hasMissingValidValue) { subReportInstance.RetrievalStatus = Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.ParametersNotSpecified; throw new ReportProcessingException(ErrorCode.rsParametersNotSpecified); } Init(m_parameters); subReportInstance.Parameters = new ParametersImpl(m_odpContext.ReportObjectModel.ParametersImpl); m_odpContext.SetSubReportNameModifierAndParameters(subReportInstance, !m_odpContext.SnapshotProcessing); if (m_odpContext.ReprocessSnapshot) { reportInstance.InitializeFromSnapshot(m_odpContext); } EvaluateReportLanguage(reportInstance, null); subReportInstance.ThreadCulture = m_odpContext.ThreadCulture; if (!m_odpContext.SnapshotProcessing || m_odpContext.FoundExistingSubReportInstance) { flag = FetchSubReportData(subReport, subReportInstance); if (flag) { subReportInstance.RetrievalStatus = Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DataRetrieved; } else { subReportInstance.RetrievalStatus = Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DataRetrieveFailed; subReportInstance.ProcessedWithError = true; } } else { subReportInstance.RetrievalStatus = Microsoft.ReportingServices.ReportIntermediateFormat.SubReport.Status.DataNotRetrieved; subReportInstance.ProcessedWithError = true; } m_odpContext.ReportParameters = null; return(flag); } Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance2 = subReportInstance.ReportInstance.Value(); m_odpContext.CurrentReportInstance = reportInstance2; m_odpContext.LoadExistingSubReportDataChunkNameModifier(subReportInstance); reportInstance2.InitializeFromSnapshot(m_odpContext); Init(includeParameters: true, parametersOnly: false); m_odpContext.ThreadCulture = subReportInstance.ThreadCulture; SetupReport(reportInstance2); m_odpContext.SetSubReportContext(subReportInstance, setupReportOM: true); m_odpContext.ReportRuntime.CustomCodeOnInit(m_odpContext.ReportDefinition); m_odpContext.OdpMetadata.SetUpdatedVariableValues(m_odpContext, reportInstance2); return(flag); } catch (Microsoft.ReportingServices.ReportProcessing.ReportProcessing.DataCacheUnavailableException) { throw; } catch (Exception ex2) { flag = false; subReportInstance.ProcessedWithError = true; if (subReportInstance.ReportInstance != null) { subReportInstance.ReportInstance.Value().NoRows = false; } if (ex2 is RSException) { m_odpContext.ErrorContext.Register((RSException)ex2, subReport.ObjectType); return(flag); } return(flag); } }
internal void RetrieveSubreport() { if (!m_isNewContext) { return; } if (m_isOldSnapshot) { Microsoft.ReportingServices.ReportRendering.SubReport subReport = (Microsoft.ReportingServices.ReportRendering.SubReport)m_renderReportItem; if (subReport.Report != null) { if (m_report == null) { m_report = new Report(this, m_inSubtotal, subReport, m_renderingContext); } else { m_report.UpdateSubReportContents(this, subReport); } } m_noRows = subReport.NoRows; m_processedWithError = subReport.ProcessedWithError; } else { Microsoft.ReportingServices.ReportIntermediateFormat.SubReport subReport2 = (Microsoft.ReportingServices.ReportIntermediateFormat.SubReport)m_reportItemDef; RenderingContext renderingContext = null; try { if (subReport2.ExceededMaxLevel) { m_errorCode = SubReportErrorCodes.ExceededMaxRecursionLevel; m_errorMessage = RPRes.rsExceededMaxRecursionLevel(subReport2.Name); FinalizeErrorMessageAndThrow(); } else { CheckRetrievalStatus(subReport2.RetrievalStatus); } if (m_renderingContext.InstanceAccessDisallowed) { renderingContext = GetOrCreateRenderingContext(subReport2, null); renderingContext.SubReportHasNoInstance = true; } else { m_renderingContext.OdpContext.SetupContext(subReport2, base.Instance.ReportScopeInstance); if (subReport2.CurrentSubReportInstance == null) { renderingContext = GetOrCreateRenderingContext(subReport2, null); renderingContext.SubReportHasNoInstance = true; } else { Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance subReportInstance = subReport2.CurrentSubReportInstance.Value(); m_noRows = subReportInstance.NoRows; m_processedWithError = subReportInstance.ProcessedWithError; if (m_processedWithError) { CheckRetrievalStatus(subReportInstance.RetrievalStatus); } Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance reportInstance = subReportInstance.ReportInstance.Value(); renderingContext = GetOrCreateRenderingContext(subReport2, reportInstance); renderingContext.OdpContext.LoadExistingSubReportDataChunkNameModifier(subReportInstance); renderingContext.OdpContext.SetSubReportContext(subReportInstance, setupReportOM: true); reportInstance.SetupEnvironment(renderingContext.OdpContext); } } } catch (Exception e) { m_processedWithError = true; ErrorContext subReportErrorContext = null; if (subReport2.OdpContext != null) { subReportErrorContext = subReport2.OdpContext.ErrorContext; } if (renderingContext == null && m_report != null) { renderingContext = m_report.RenderingContext; } Microsoft.ReportingServices.ReportProcessing.ReportProcessing.HandleSubReportProcessingError(m_renderingContext.OdpContext.TopLevelContext.ErrorContext, subReport2, subReport2.UniqueName, subReportErrorContext, e); } if (renderingContext != null) { renderingContext.SubReportProcessedWithError = m_processedWithError; } } if (m_processedWithError) { m_noRows = false; if (m_errorCode == SubReportErrorCodes.Success) { m_errorCode = SubReportErrorCodes.ProcessingError; m_errorMessage = RPRes.rsRenderSubreportError; } } m_isNewContext = false; }