Для добавления генератора документа в конфигурации указывается запись вида:
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>.documentTitle=<doc_title> document:pattern.<id>.file=<file> document:pattern.<id>.xslt=<xslt> # # необязательные параметры общие document:pattern.<id>.titleRegexp=<title_pattern> # # необязательный параметры для type=pdfForm document:pattern.<id>.flattening=<flattening>
Где:
- уникальный числовой идентификатор типа документа; |
- тип сущности, для которой генерируется документ; |
- тип генерируемого документа, в данный момент поддерживается только - PDF форма; |
- имя сгенерированного документа; |
- имя файла со шаблоном документа (PDF форма либо иной исходный документ для подстановки параметров) рекомендуется располагать в каталоге ; |
XSLT 2.0 шаблон, генерирующий XML документ со значениями полей; | -
REGEXP шаблон имени сущности, для которой будет предлагаться к генерации данный тип документа; | -
- 1, если сгенерированный PDF документ следует сделать нередактируемым. |
PDF формы можно подготовить с помощью Adobe Acrobat или аналогичной программы.
Например:
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
Принцип генерации основан на подстановке в именованные поля документа (для PDF формы это имена редактируемых полей) определённых значений. Значения полей получаются из XML документа - результата 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>
Где:
- код объекта для которого генерируется документ; |
- тип объекта; |
и - параметры 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>.
В результате преобразования для генерации шаблона подготавливается документ следующего вида со значениями полей.
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> ...
В составе ядра представлены перечисленные далее пространства имён и функции в них. Список может дополняться в плагинах. Примеры XSLT шаблонов для генерации документов доступны в WiKi.
- возвращает результат проверки установленности в значении бита , нумерация с 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> ...
- получение 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" 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> ...