分页模型

预览页面

请求模板资源:

  • Weblet.dealWeblet - 渲染 JSON
  • com.fr.web.cache.ReportEntry#getWorkBookTemplate - 读取模板
  • com.fr.report.stable.fun.Actor#createContext4Tpl - 参数面板
    • com.fr.form.main.ExecuteWidgetHelper#dealWithWidgetData - 控件配置计算
    • com.fr.form.ui.Widget#createJSONConfig - 获取控件配置
    • com.fr.form.event.Observer#createJSONListener - 获取类似 JS 事件的配置,可能会涉及计算
  • com.fr.web.ResourceHelper#dealWithEmbResource - 处理内置资源
    • com.fr.web.ResourceHelper#initDefaultJs - 初始化资源

控件

  • WidgetGetJsonDataAction#actionCMD - 获取某一个控件的值
    • com.fr.form.data.WidgetDataOutput#createJSONData
      • com.fr.form.ui.FieldEditor#createJSONData - 计算值
  • WidgetGetViewValueAction - xxx ?
  • WidgetBatchGetJsonDataAction
  • com.fr.web.core.service.ParametersDialogAction - 提交参数
    • com.fr.util.ParameterApplyHelper#eval - 参数处理

计算

  • PageHTMLReadAction - 获取 html 格式的页面数据
    • com.fr.web.core.service.PageContentReader#getCurrentReportPage - 获取当前报表页
      • com.fr.web.core.ReportSessionIDInfor#getResultWorkBook (java.util.Map) - 获取结果报表
        • com.fr.report.core.sheet.AbstractWorkBookExecutor#execute ()
          • com.fr.report.core.sheet.SheetSequenceExecutor#execute - 每个 sheet 计算一次
            • com.fr.report.core.cal.SE#execute - 计算核心
              • com.fr.report.core.cal.SE#execute4Expand - 计算格子扩展
              • com.fr.report.core.cal.SE#execute4ECReport - 计算条件属性等
          • com.fr.report.core.sheet.AbstractWorkBookExecutor#result - 生成结果报表
  • com.fr.web.core.service.PageContentHTMLReader#writePageContentToResponse - 渲染报表页
    • com.fr.web.core.service.PageContentHTMLReader#createAndfillPageContentTag
      • com.fr.web.output.html.HTMLOutlet#out
      • com.fr.web.output.html.chwriter.CellHtmlWriter#drawContent
        • com.fr.web.output.html.chwriter.CellHtmlWriter#displayVerticalText - 画图
          • com.fr.report.cell.cellattr.core.CellUtils#value2Image
            • com.fr.base.Style#paintContent 从这里开始就会被用到各种地方,调用频次过高,可以忽略
      • 文本的忽略

单元格计算

图表:

计算
com.fr.report.core.cal.SE.Box2DCase#dealWithChartCollection
com.fr.report.core.cal.SE.Box2DCase#dealChartList
com.fr.chart.chartattr.ChartCollection#createResultChartPainterWithOutDealFormula
com.fr.chart.web.ChartWriteHtmlAction#actionCMD
com.fr.base.chart.BaseChartPainter#createAttributeConfig
com.fr.chart.chartattr.ChartCollection
com.fr.base.chart.BaseChartCollection#createResultChartPainter
com.fr.chart.chartattr.ChartCollection#calculateFormula
com.fr.chart.chartattr.CompatibleChartCollectionHelper#createResultChartPainterWithOutDealFormula
com.fr.chart.chartattr.CompatibleChartCollectionHelper#dealWithChart
com.fr.chart.chartattr.CompatibleChartCollectionHelper#createChartPainterJustTableData
com.fr.base.chart.BaseChartPainter

图片:
com.fr.web.core.service.AttachmentService
内部的多个 action

斜线:
com.fr.report.cell.painter.TagPainter#paintTag
com.fr.web.BaseHTMLWriterUtils#createImageTag4RepoWithCheckVml - 将绘制的图片存起来,然后转化成 html 标签
见上文中的 Style#paintContent
com.fr.report.cell.painter.BiasTextPainter#paint

其他

  • 分页计算 com.fr.page.PG#getReportPages
    • com.fr.page.generator.PaginateReportPageGenerator#calcPageCount
  • 宽高计算 com.fr.base.DynamicPixList#getRangeValue

  • 结果报表 com.fr.main.workbook.ResultWorkBook
    • sheet com.fr.report.report.ResultReport
      • 页面配置 com.fr.page.ReportPageAttrProvider
        • 每一个 sheet 拥有自己的页面配置。
  • 分页 com.fr.page.ReportPageProvider
    • com.fr.web.core.ReportSessionIDInfor#createPageSetChain
      • com.fr.page.PageSetProvider
      • 处理分页效果 com.fr.page.PG

决策报表

请求资源

请求模板资源:

  • com.fr.web.weblet.Formlet#dealWeblet - 读取模板
    • com.fr.web.weblet.cache.FormEntry#getForm
      • com.fr.form.ui.ChartEditor#ChartEditor

计算

计算参数面板

  • com.fr.form.fit.web.handler.ParameterConfigHandler#handle - 计算参数面板
    • com.fr.form.main.Form#createParaJSONConfig - 参数处理
      • com.fr.form.main.Form#initWidgetData - 处理控件数据
        • com.fr.form.main.ExecuteWidgetHelper#dealWithWidgetData - 控件配置计算
    • com.fr.form.fit.common.ConfigDataProcessUtil#handleCompatibleData - 数据兼容

计算核心块儿

  • com.fr.form.fit.web.handler.FormFitConfigHandler#execute - 配置
    • com.fr.form.main.Form#executeElementCases - 计算报表块
      • com.fr.report.core.block.execute.Executor#executeAllParallel
      • com.fr.report.core.block.execute.Executor#executeAllSerial
    • com.fr.form.main.Form#calculateWidget(com.fr.stable.web.Repository, com.fr.script.Calculator)
      • com.fr.form.main.Form#initWidgetData - 处理控件数据
        • com.fr.form.main.FormConfig#dealWithWidgetData  ^y1wa73
          • com.fr.form.main.ExecuteWidgetHelper#dealWithWidgetData
    • com.fr.form.fit.web.util.FormFitUtils#createBodyJSONObject - 渲染

报表块

  • com.fr.form.fit.web.handler.element.FormLoadReportContentHandler#handle - 报表块
    • com.fr.form.fit.web.handler.element.FormLoadReportContentHandler#didElementCase
    • com.fr.form.fit.web.handler.element.FormLoadReportContentHandler#doElementCase
      • 计算
        • com.fr.form.fit.web.handler.element.FormLoadReportContentHandler#executeLazyElements  
        • com.fr.form.fit.web.handler.element.FormLoadReportContentHandler#reloadContent
      • com.fr.web.core.DashboardSessionIDInfo#getElementCaseResult - 获取结果 
      • 渲染
        • com.fr.form.fit.web.handler.element.ElementCaseJsonResult#createReportPageJO
        • com.fr.form.fit.web.handler.element.ElementCaseJsonResult#createSimpleReportPageJO

其他组件

  • com.fr.web.core.service.FormGetSourceValueAction - 获取单个数据值
    • com.fr.web.core.service.FormGetSourceValueAction#createJSONConfig
      • com.fr.web.core.service.FormGetSourceValueAction#parallelLoad - 并行取数
        • com.fr.web.core.service.FormGetSourceValueAction#dealSimpleWidget - 控件
        • com.fr.web.core.service.FormGetSourceValueAction#dealChartWidget - 图表
          • com.fr.form.ui.BaseChartEditor#createJSONConfig2Show
            • 见图表

参数应用

  • com.fr.web.utils.WebUtils#parameters4SessionIDInfor 预览时获取请求中的参数
  • com.fr.web.core.utils.ExportUtils#dealWithParam 导出时获取请求中的参数

优先级规则 url 参数>平台挂载参数>参数面板控件>模板参数>全局参数>表单 body 控件>预览界面的控件

  • 全局参数和模板参数
    • com.fr.main.impl.WorkBookHelper#apply4Parameters(com.fr.web.core.SessionParaMap<java.lang.Object>, com.fr.main.parameter.ReportParameterAttr)
    • com.fr.form.main.FormHelper#apply4Parameters(com.fr.web.core.SessionParaMap<java.lang.Object>, com.fr.form.main.Form)
    • 全局参数
      • ParameterConfig.getInstance().getGlobalParameters()
    • 模板参数
      • com.fr.main.parameter.TemplateParameterAttr#getParameters
  • 参数面板参数 ^8c2vyt
    • com.fr.web.core.service.ParametersDialogAction
      • com.fr.web.core.TemplateSessionIDInfo#clearSessionPara 只有决策报表会清空 Session 参数。
      • com.fr.web.core.TemplateSessionIDInfo#applySessionIDInfoParameter(javax.servlet.http.HttpServletRequest) 会将参数注入进去,等下一次使用。
    • com.fr.web.core.TemplateSessionIDInfo#clearPageSet 会清空计算的缓存 book2show, 从而保证参数计算不影响模板计算
  • 平台挂载参数 ^arkgbq
    • com.fr.decision.extension.report.preview.template.CptPreview#dealWithCpt
      • com.fr.decision.webservice.bean.entry.TemplateBean#getParameters()
        • com.fr.web.WebletDealWith#dealWithWeblet
  • url 参数
    • 正式计算的时候,由 url 传递

不参与运算

  • 数据集参数
    • com.fr.main.impl.WorkBookHelper#getParameters
    • com.fr.data.impl.DBTableData#processParameters

公式计算

com.fr.parser.Ambiguity#delay4PageCal

  • $$page_number$$totalPage_number 会延迟计算
  • 预览时,是 com.fr.report.core.ReportHF#evalHFPageNumberValue
  • 导出时,todo

控件

按钮组
com.fr.form.ui.WriteUnableRepeatEditor

属性

数据字典
com.fr.data.Dictionary

超链接

计算

  • SEAssist.doHyperlinkPara(CellElement, NameJavaScriptGroup, Calculator) (com.fr.report.core.cal)
    • SEAssist.preprocessorJavaScriptParameterAndWidgetDependence(BoxCE, Calculator, Actor) (com.fr.report.core.cal) `

渲染

CellHTMLWriter

  • com.fr.web.output.html.chwriter.CellHtmlWriter#getHtmlValue
    • 将单元格的值转化成 html
    • com.fr.report.cell.cellattr.CellGUIAttr#isShowAsHTML
      • 富文本的展示

ReportHTMLWriterUtils

  • com.fr.web.core.utils.ReportHTMLWriterUtils#value2PaintableTag
    • Painter
    • Image
      • com.fr.base.background.ImageBackground
        • com.fr.stable.web.Repository#checkoutObject
          • com.fr.web.request.ImageEmptyRepository 图片空实现
            • encode data with base64
          • com.fr.web.RepositoryDeal#checkoutObject 正常预览实现
            • store in attachment
            • return url
    • WebImage
    • Attachment
    • rest