Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 2 Следующий »

О плагине

Плагин предназначен для генерации и учёта печатных форм документов.

Конфигурация

Для добавления генератора документа в конфигурации указывается запись вида:

document:pattern.<id>.title=<title>
document:pattern.<id>.scope=<scope>
document:pattern.<id>.script=ru.bgcrm.plugin.document.docgen.CommonDocumentGenerator
document:pattern.<id>.type=<type>
document:pattern.<id>.xslt=<xslt>
#
# необязательные параметры общие
# результат генерации не сохраняется в виде документа, шаблон используется для генерации, например
# бланка в очереди процессов либо в каком-либо скрипте
document:pattern.<id>.result=stream
# если результат не stream - то имя сохраняемого документа
document:pattern.<id>.documentTitle=<doc_title>
document:pattern.<id>.titleRegexp=<title_pattern>
document:pattern.<id>.additionalParametersJsp=<additional_params_jsp>
#
# необязательный параметры для type=pdfForm/docxForm/odtForm
document:pattern.<id>.file=<file>
document:pattern.<id>.flattening=<flattening>

Где:

  • <id> - уникальный числовой идентификатор типа документа;
  • <title> - отображаемое наименование шаблона, необходимо только для шаблонов, которые можно выбрать;
  • <scope> - тип сущности, для которой генерируется документ, см. далее;
  • <type> - тип генерируемого документа, описание типом см. далее;
  • <doc_title> - имя сгенерированного документа, не имеет смысла для result=stream;
  • <file> - имя файла со шаблоном документа (PDF форма либо иной исходный документ для подстановки параметров) рекомендуется располагать в каталоге BGCRM/docpattern;
  • <xslt> - XSLT 2.0 шаблон, генерирующий XML документ со значениями полей;
  • <title_pattern> - REGEXP шаблон имени сущности, для которой будет предлагаться к генерации данный тип документа;
  • <additional_params_jsp> - JSP файл с дополнительными параметрами для генерации документа;
  • <file> - исходный документ, заполняемый данными;
  • <flattening> - 1, для типа pdfForm, если сгенерированный PDF документ следует сделать нередактируемым.

Возможные значения параметра <scope>, для генерации документов объектов ядра:

document:processShowDocuments=1
document:processCreateDocumentsAllowedTemplates=<коды шаблонов документов, доступных для генерации через запятую>

Также интеграцию с Document поддерживают следующие плагины, для них возможны свои значения параметра <scope>:

Поддерживаемые типы (параметр <type>):

  • pdfForm - PDF форма, исходная форма получается из параметра <file>, поля формы заполняются из XML документа с параметрами, подготовленного с помощью XSLT шаблона <xslt>;
  • docxForm либо odtForm - .docx либо .odt файл с макросами вида ${macros}, значения которых заменяются значениями из XML документа с параметрами, подготовленного с помощью XSLT шаблона <xslt>;
  • xsltHtml - преобразование исходных XML данных в HTML документ с помощью XSLT шаблона <xslt>.

PDF формы можно подготовить с помощью Adobe Acrobat или аналогичной программы.

При использовании типов docxForm либо odtForm производится замена в текстовых файлах word/document.xml и content.xml макросов на значения. Файлы эти расположены внутри архивов, коими по сути являются файлы этих двух форматов. Для проверки корректности макросов можно переименовать .docx либо .odt файл в .zip, открыть архиватором и просмотреть указанные ранее файлы. Важно проконтролировать, чтобы макросы шли сплошными блоками и находились поиском в текстовом редакторе.

Возможны, например, такие варианты форматирования, макрос в этом случае корректно заменён не будет:

<text:span text:style-name="T2">${cardNumber</text:span><text:span text:style-name="T3">}</text:span>

В этом случае макрос следует забить повторно и пересохранить документ, добившись примерно такого варианта:

<text:span text:style-name="T2">${cardNumber}</text:span>

Пример 1. Шаблон документа бланка заказа единого договора.

document:pattern.3.title=Уфа заказ
document:pattern.3.scope=bgbilling-commonContract
document:pattern.3.script=ru.bgcrm.plugin.document.docgen.CommonDocumentGenerator
document:pattern.3.titleRegexp=^72\d{6}
document:pattern.3.file=docpattern/ufa_zakaz.pdf
document:pattern.3.xslt=docpattern/ufa_zakaz.xsl
document:pattern.3.type=pdfForm
document:pattern.3.documentTitle=Уфа заказ.pdf

Пример 2. Шаблон для генерации печатной формы в очереди процессов.

document:pattern.37.title=BLANK
document:pattern.37.scope=processQueue
document:pattern.37.script=ru.bgcrm.plugin.document.docgen.CommonDocumentGenerator
document:pattern.37.xslt=docpattern/ktv_blank.xsl
document:pattern.37.type=xsltHtml
document:pattern.37.documentTitle=blank.html

Пример 3. Шаблон для генерации печатной формы акта в договоре BGBilling, используются доп. параметры и отличный от CommonDocumentGenerator обработчик-генератор документа.

document:pattern.34.title=Акт выполненных работ
document:pattern.34.scope=bgbilling-contract
document:pattern.34.titleRegexp=[a-яА-Яa-zA-Z0-9]*-[0-9]{2}
document:pattern.34.script=ru.bgcrm.dyn.ufanet.ArmDocumentGenerator
document:pattern.34.additionalParametersJsp=/WEB-INF/jspf/user/plugin/document/custom/execute_work_act_parameters.jsp
document:pattern.34.file=docpattern/execute_work_act.pdf
document:pattern.34.xslt=docpattern/execute_work_act.xsl
document:pattern.34.type=pdfForm
document:pattern.34.documentTitle=Акт выполненных работ <active_date>.pdf
document:pattern.34.flattening=1

Исходные данные преобразуются с помощью XSLT преобразования. На вход XSLT генератора подаётся XML документ следующего содержания.

<event objectId="<objectId>" objectType="<objectType>">
 <request>
  <param name="<paramName1>" value="<value1>"/>
  <param name="<paramName2>" value="<value2>"/>
  ....
  <param name="<paramNameX>" value="<valueX>"/>
 </request>
</event>

Где:

  • <objectId> - код объекта для которого генерируется документ;
  • <objectType> - тип объекта;
  • <paramNameX> и <valueX> - параметры HTTP запроса, переданные на генерацию документа, благодаря этим данным возможен параметризированный вызов генерации документа из внешних систем.

Для просмотра хода генерации включите вывод в отладочной информации. Работу можно начать с подобного шаблона, который просто выводит в результирующий документ (а следовательно и в лог) исходный XML.

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:bgcrm="http://bgcrm.ru/saxon-extension"
 xmlns:bgcrm-math="http://bgcrm.ru/saxon-extension-math"
 xmlns:t="http://bgcrm.ru/template" 
 exclude-result-prefixes="bgcrm bgcrm-math t"
 version="2.0">

 <xsl:template match="/event">
  <data>
     <!-- отладочный исходной XML -->
    <xsl:copy-of select="/event"/>
  </data>
 </xsl:template>
</xsl:transform>

Получение дополнительной информации осуществляется с помощью функций-расширений. Результат вызова функции-расширения можно вывести в отладку с помощью инструкции <xsl:copy-of>.

При генерации для типа xsltHtml исходный документ преобразуется сразу в HTML.

Для типов *Form в результате преобразования для генерации шаблона подготавливается документ XML следующего вида со значениями параметров.

08-07/19:03:49 DEBUG [http-bio-9089-exec-6] CommonDocumentGenerator - Transformation debug: <?xml version="1.0" encoding="UTF-8"?>
<data xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <field name="contract_number">72000784</field>
  <field name="contract_day">11</field>
  <field name="contract_month">апреля</field>
...

Далее параметры подставляются в поля PDF формы либо заменяют макросы документа, указанного в параметре file.

В составе ядра представлены перечисленные далее пространства имён и функции в них. Список может дополняться в плагинах. Примеры XSLT шаблонов для генерации документов доступны в WiKi.

Расширения пространства имён "http://bgcrm.ru/saxon-extension-math"

isbitset( <value>, <bitNumber> ) - возвращает результат проверки установленности в значении <value> бита <bitNumber>, нумерация с 0 от конца двоичного представления числа.

Пример:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:bgcrm-math="http://bgcrm.ru/saxon-extension-math"
 exclude-result-prefixes="bgcrm-math"
 version="2.0">

...
<xsl:when test="bgcrm-math:isbitset( $contractCard/data/contract/@gr, 43 )">
   <field name="contract_ctv_erkc">On</field>
</xsl:when>
...

Расширения пространства имён "http://bgcrm.ru/saxon-extension"

customer( <id> ) - получение XML документа с данными контрагента с кодом <id>.

Пример:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:bgcrm="http://bgcrm.ru/saxon-extension"
 exclude-result-prefixes="bgcrm"
 version="2.0">
...
<xsl:variable name="customer" select="bgcrm:customer($customerId)" />
...
<field name="fio_full">
  <xsl:value-of select="$customer/data/customer/@title" />
</field>
...

process( <id> ) - получение XML документа с данными о процесе с кодом <id>.

Возвращается XML примерно следующего вида:

<data>
     <process close_user_id="0" create_dt="2014-03-27 01:36:30.0" create_user_id="0" description="ФИО: Тестов Тест Тестович&#xA;Телефон: 33333 3333&#xA;Остаток: -970.00----------&#xA;" 
        executors="" groups="3" id="5408" priority="0" status_dt="2014-03-27 01:36:30.0" status_id="2" status_user_id="0" title="" type_id="4"/>
     <parameters><parameter id="1" title="Адрес" value="Магадан, Ленина, д. 5, кв. 77777"/><parameter id="2" title="Дата повторного обзвона" value=""/></parameters>
     <links><process_link config="" object_id="108035" object_title="TEST" object_type="contract:sofit" process_id="5408"/></links>
     <status><process_status comment="Процесс создан" dt="2014-03-27 01:36:30.0" last="1" process_id="5408" status_id="2" user_id="0"/></status>
</data>

Пример использования:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:bgcrm="http://bgcrm.ru/saxon-extension"
 exclude-result-prefixes="bgcrm"
 version="2.0">
...
<xsl:variable name="process" select="bgcrm:process($processId)" />
...
<field name="description">
  <xsl:value-of select="$customer/data/process/@description" />
</field>
...

user( <id> ) - получение XML документа с данными о пользователе с кодом <id>.

Пример использования:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:bgcrm="http://bgcrm.ru/saxon-extension"
 exclude-result-prefixes="bgcrm"
 version="2.0">
...
<xsl:variable name="user" select="bgcrm:user($userId)" />
..

param( <objectId>, <paramId> ) - получение XML документа с данными о параметре <paramId> объекта с кодом <objectId>.

Интерфейс пользователя

В интерфейсе пользователя функционал плагина доступен на вкладках Документы различных сущностей. В выпадающем списке отображаются настроенные для данного типа сущности виды документов.

Здесь же возможно удаление документа, его открытие. Кнопка Добавить позволяет загружать произвольные файлы.

  • Нет меток
Документация BGCRM 3.0