Project

General

Profile

Feature #5013

Экспорт документов в шаблон отчета

Added by Denis Filatov over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
-
Target version:
Start date:
06/30/2014
Due date:
% Done:

0%

Estimated time:
Published in build:
0.16.201

Description

В шаблоне отчета очень сложно (а может и невозможно) получить DOM модель документов средствами freemarker. Предлагаю добавить передачу документов в шаблон через "параметры шаблона".
Патч прилагается.


Files

ReportGenerator.patch (1.95 KB) ReportGenerator.patch Denis Filatov, 06/30/2014 12:15 PM

Associated revisions

Revision 3608 (diff)
Added by Denis Kildishev over 5 years ago

fixes: #5013; adds methods to get documents from location and from utils by qualifiedName

Revision 6149e4c4 (diff)
Added by Denis Kildishev over 5 years ago

fixes: #5013; adds methods to get documents from location and from utils by qualifiedName

git-svn-id: https://forge.ispras.ru/svn/reqdb/trunk/requality@3608 f558eac1-05b1-4da7-9ed5-5050e8a619d6

Revision 3608 (diff)
Added by Denis Kildishev over 5 years ago

fixes: #5013; adds methods to get documents from location and from utils by qualifiedName

History

#1

Updated by Denis Kildishev over 5 years ago

  • Status changed from New to Resolved
  • % Done changed from 0 to 100

Applied in changeset r3608.

#2

Updated by Denis Kildishev over 5 years ago

  • 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, как и было реализовано в предложенном патче.

С уважением, Денис Кильдишев

#3

Updated by Denis Kildishev over 5 years ago

  • Status changed from New to Resolved
#4

Updated by Denis Filatov over 5 years ago

Этот способ далеко не самый эффективный.
Например в простейшем цикле я вынужден кэшировать 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 сразу для всех документов.

#5

Updated by Denis Kildishev over 5 years ago

Спасибо за предложенный варинат. Хочется уточнить, что кроме доступа через utils можно использовать метод для Location("getDocumentNodeModel()"). Кэш был реализован для объектов класса Document. При этом, при получении дерева как через utils, так и при помощи метода в Location будет возвращаться один и тот же экземпляр дерева. Актуальность кэша гарантируется особенностями механизма генерации отчетов.

#6

Updated by Denis Kildishev over 5 years ago

  • Published in build set to 0.16.201
#7

Updated by Alexey Khoroshilov over 5 years ago

  • Target version set to 0.16
#8

Updated by Alexey Khoroshilov over 5 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF