Feature #5013
closed
Экспорт документов в шаблон отчета
Added by Denis Filatov over 10 years ago.
Updated about 10 years ago.
Published in build:
0.16.201
Description
В шаблоне отчета очень сложно (а может и невозможно) получить DOM модель документов средствами freemarker. Предлагаю добавить передачу документов в шаблон через "параметры шаблона".
Патч прилагается.
Files
- Status changed from New to Resolved
- % Done changed from 0 to 100
Applied in changeset r3608.
- Status changed from Resolved to New
- % Done changed from 100 to 0
Спасибо за идею, нам это тоже потребовалось для новых видов отчетов!
Мы реализовали немного по другому, т.к. в проектах может быть много документов и не во всех отчетах требуется доступ к DOM, то мы решили предоставлять доступ к DOM конкретного документа по запросу, а не строить его заранее для всех.
Для получения DOM документа из шаблона отчета можно использовать вызов для объекта класса Location метода getDocumentNodeModel() или воспользоваться методом utils.getDocumentNodeModel(qid), где qid это путь к документу, который можно получить нажатием правой кнопки на документе и выбором пункта меню Copy Full Name.
Оба метода возвращают объект класса freemarker.ext.dom.NodeModel, как и было реализовано в предложенном патче.
С уважением, Денис Кильдишев
- Status changed from New to Resolved
Этот способ далеко не самый эффективный.
Например в простейшем цикле я вынужден кэшировать DOM в шаблоне чтоб избежать ее множественного создания
<#local doms = {}/>
<#list req.getLocations() as loc>
<#local doc = loc.getDocument()/>
<#if doc?has_content>
<#local qid = doc.getQualifiedId()/>
<#if (doms[qid])?has_content>
<#local dom = doms[qid]/>
<#else>
<#local dom = utils.getDocumentNodeModel(qid) />
<#if dom?has_content>
<#local doms = doms + {qid : dom } />
</#if>
</#if>
Надо либо кэщировать DOM в utils, либо возвращать по запросу DOM сразу для всех документов.
Спасибо за предложенный варинат. Хочется уточнить, что кроме доступа через utils можно использовать метод для Location("getDocumentNodeModel()"). Кэш был реализован для объектов класса Document. При этом, при получении дерева как через utils, так и при помощи метода в Location будет возвращаться один и тот же экземпляр дерева. Актуальность кэша гарантируется особенностями механизма генерации отчетов.
- Published in build set to 0.16.201
- Target version set to 0.16
- Status changed from Resolved to Closed
Also available in: Atom
PDF