Створення сценарію

Написано Каріна
Оновлено 1 день тому

Сценарії в сервісі WhiteDoc 

Терміни:

Термін 

Опис 

Сценарій 

Сукупність дій у сервісі, які дозволяють створити ланцюжок конвертів. 

Конверти 

Основний об'єкт у системі в якому розміщено документи. Характеризується як набір документів.  

Шаблон конверта 

Передстворений конверт, який завжди можна відредагувати або надіслати налаштованим шляхом обробки. 

XML 

Розширювана мова розмітки. Використовується для зберігання та передачі даних. 

XSLT 

Мова перетворення XML-документів. Специфікація XSLT входить до складу XSL. 


Основні завдання сценаріїв:

  1. Створення ланцюжка конвертів.  
  2. Створення конверта, виходячи з попереднього конверта. 
  3. Передача даних з одного конверта до іншого в ланцюжку. 
  4. Можливість формувати умови на підставі даних у документі.

Логіка роботи сценаріїв 

Сценарій — це спеціалізований алгоритм створення нового конверта документів на основі попереднього конверта, який завершив документообіг і має статус «Завершено». Новий конверт, як і всі конверти сервісу, формується відповідно до обраного шаблону, який задається у сценарії. 

У сценаріях також налаштовуються тригери (параметри), що визначають умови його активації. Зв’язок між об’єктами представлено на схемі нижче: 

Сценарій використовує Шаблон №1 та Шаблон №2 правилами конвертації на основі XSLT. 

  • При запуску створюється Конверт №1 на основі Шаблону №1. 

  • Після завершення його документообігу (статус Завершено) можна 
    створити 
    Конверт №2 на основі Шаблону №2, з використанням правил 
    конвертації (XSLT).
     

Всі документи в конвертах системи представлені у структурованому форматі XML, а сценарії обробляються за допомогою XSLT.

Конверт формується на основі шаблону, а всі XSLT перетворення використовуються для передачі даних, заповнення даних, визначення умов передачі даних.

Створення нового сценарію 

XML-парсер:

Посилання на безкоштовний онлайн XML-парсер для зручної роботи з кодом.

Довідкова інформація з XSLT  знаходиться за посиланням w3schools.com/xml/xsl, та на інших ресурсах, що доступні для пошуку в інтернеті.

Інтеграція:

Панель адміністратора à Інтеграція

Натиснути «Створити правило»  

Вставити UUID потрібного шаблону, автоматично підставиться остання версія (за необхідності можна обрати іншу з випадаючого списку). 

Скопіювати XML-код шаблону та вставити у відповідний крок сценарію. В даному випадку в 1 крок. 

Якщо потрібно отримати XML нового шаблону (з іншим UUID), обов’язково потрібно:
1. Оновити сторінку «Інтеграції» 
2. Вставити UUID нового шаблону 
Якщо не оновити сторінку «Інтеграція», XML-код не зміниться автоматично і залишиться старий.


Сценарій 

Мова XSLT є регістрозалежною. Це означає, що всі імена елементів, атрибутів та ключові значення враховують великі та малі літери.
Наприклад, UUID та Uuid вважаються різними елементами або атрибутами, і використання одного замість іншого може призвести до помилок при обробці XML або при застосуванні правил конвертації.
Тому при створенні або редагуванні XSLT-шаблонів слід уважно дотримуватися регістру всіх елементів, атрибутів та ключових значень.

Перейти в сценарії та натиснути «Новий сценарій». Відкриється форма для створення нового сценарію

Форма створення/редагування сценарію складається з 2 блоків 

  • Деталі сценарію  

  • Кроки сценарію 

Загальний опис 

Сценарій може складатися з багатьох кроків, однак перший крок видалити неможливо. Він призначений для створення початкового конверта на основі вибраного шаблону та його версії із застосуванням правил конвертації (XSLT). Усі наступні кроки можуть створювати нові конверти на основі конвертів попередніх кроків, використовуючи шаблони, визначені у налаштуваннях кожного кроку. 

У розділі «Призначення» вказується повний UUID шаблону та його остання доступна версія (обирається автоматично, передбачена можливість вибору іншої версії зі списку). 

Деталі сценарію 

У розділі «Деталі сценарію» необхідно: 

  • вказати Назву та Опис сценарію (обов’язкові поля); 

  • встановити рівень доступу до сценарію:

    • Мейлбокс (за замовчуванням),

    • Акаунт,

    • Публічний

  • за потреби ввімкнути або вимкнути опцію «Зв’язувати конверти»

  • задати назву першого кроку; 

  • вказати UUID шаблону, з якого починається сценарій, та вибрати необхідну версію шаблону. 

UUID сценарію генерується автоматично. 

Налаштування кроків 

У нижній частині кожного кроку доступна опція, що дозволяє автоматично відправити створений конверт відразу після запуску кроку, без створення чернетки. 

Для коректної автоматичної відправки необхідно: 

  • щоб усі обов’язкові поля ролі Відправника були заповнені; 

  • щоб у XSLT-карті конвертації кроку були встановлені всі мейлбокси Заповнювачів, Підписантів та інших учасників процесу обробки. 

Якщо під час перетворення (за правилами XSLT) будь-які обов’язкові дані відсутні, система поверне помилку, і сценарій не буде збережено. 

Сценарій можна зберегти лише у випадку, коли всі поля всіх кроків заповнено коректно. 

Після створення сценарію 

Після успішного збереження: 

  • формується UUID сценарію; 

  • у формі редагування стають доступні дії «Видалити» та «Клонувати» сценарій. 

Додавання нових кроків 

Сценарій може містити довільну кількість кроків. Кожен крок може запускати створення нового конверта. 

Під час створення або редагування сценарію нові кроки додаються за допомогою кнопки «Додати новий крок».

Скопіювати XML шаблона з блоку Інтеграція (Інтеграція) та вставити код в Правило конвертації сценарія: 

Так як це перший крок, зміни в нього не вносяться – це джерело для наступного кроку.  

Зберегти 1 крок, та додати новий: 

Новий крок бажано називати відповідно до його призначення, оскільки саме ця назва буде відображена на кнопці в шаблоні. 

У другому та всіх наступних кроках необхідно заповнити блок «Джерело» — два поля, у які вказуються UUID шаблону та версія шаблону з попереднього кроку сценарію. За потреби можна використовувати й незалежні шаблони. 

Кожен новий крок містить поле «Назва» (за замовчуванням «Новий крок») та набір параметрів, де зазначається: 

  • шаблон-джерело — «UUID шаблону» та «Версія шаблону», дані конвертів якого будуть використані; 

  • шаблон-призначення — «UUID шаблону» та обрана «Версія шаблону», у які буде записано результат. 

UUID шаблону завжди вказується повністю, а остання доступна версія підставляється автоматично з можливістю вибрати іншу зі списку. 

Таким чином, джерелом для другого кроку виступає шаблон із першого кроку, а призначенням — шаблон, у який необхідно перенести дані. 

Скопіювати XML шаблона з блоку Інтеграція (Інтеграція) та вставити код в Правило конвертації сценарія: 


Заповнення різних типів полів 

Існують команди для передачі даних різних типів полів: 

1. Передача звичайних полів (текст, число, дата, тощо):

<xsl:value-of select="envelope/documents/document/field[@name='договору']"/>

2. Довідник:

<xsl:variable name="dictionary" select="envelope
/documents/document/field[@name=
'Довідник']"></xsl:variable> 
<field name="Довідник" recordUuid="
{wdExtensions:getRecordUuidByValueFromDictionary
('A1F217FE-47FB-42B9-ACD5-2E11BE2C0D01', 
'C611002C-599A-470C-A957-114519A0EB07', $dictionary)}">
<xsl:value-of select="$dictionary"/></field> 

3. Mailbox з порядку обробки шаблону-джерела:

<xsl:variable name="chef" select="envelope/flow/roles
/role[@id='3bd7811d-5789-4d17-9761-cd4b81a47277']
/@mailboxUuid"/>
<role id="e2964946-7174-4854-8443-9a92c0b648d7" 
mailboxUuid="{$chef}"></role>

4. Mailbox з поля шаблону:

<xsl:variable name="chef" select="envelope/documents/document/field 
[@name='Пошта']/"/>
<role id="e2964946-7174-4854-8443-9a92c0b648d7" 
mailboxUUID="{$chef}"></role>

5. Меню, ввімкнено множинний вибір. При вимкненому множинному виборі поле меню виводиться, як звичайне поле:

<xsl:variable name="chef" select="envelope/documents/document/field 
[@name='Пошта']/"/>
<role id="e2964946-7174-4854-8443-9a92c0b648d7" 
mailboxUUID="{$chef}"></role>

Правило конвертації: 

Розсилка на кілька одержувачів (динамічна таблиця з імейлами або мейлбоксами в шаблоні):

<xsl:param name="row_index"/> 

<documents>
<document id="5857e63e-c7a2-4f33-943a-2491cc8d9ce6"> 
<xsl:variable name="nonono" select="envelope/documents/document/fieldgroup
[@name='Таблиця']/fieldset[@index=$row_index]/field[@name='Адреса']">
</xsl:variable>
</document>
</documents>
<roles> <xsl:variable name="recipient" select="envelope/documents/document/fieldgroup
[@name='Таблиця']/fieldset[@index=$row_index]/field[@name='Адреса']"/>
<role id="062e118e-3e28-4ce6-a1cf-1a1db809f7ad" mailboxUUID="{$recipient}">
</role>
</roles>

Умова: 

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0 xmlns:xsl="http://www.w3.org/1999/XSL/Transform
<xsl:template match>
<result>
<rows>
<xsl:for-each select="envelope/documents/document/fieldgroup/fieldset>
<row index="{@index}">
<xsl:choose>
<xsl:when test="normalize-space(field[@name='Адреса']) != ''">true</xsl:when>
<xsl:otherwise>false</xsl:otherwise
</xsl:choose>
</row>
</xsl:for-each>
</rows>
</result>
</xsl:template>
</xsl:stylesheet>

Розсилка на кілька одержувачів (динамічна таблиця з вибором імейлів або мейлбоксів з довідника):

Аналогічно попередньому пункту тільки з елементами підключення поля довідника: 

Заявка – таблиця, ПІБ – поле таблиці, “nonono” – змінна, UUID – ідентифікатор довідника та його колонки, щоб взяти імейл з лукапа. 

<documents>
<document id="0d83c8dc-2cb5-4c20-a8e0-c6eb9148e432">
<xsl:variable name="nonono" select="envelope/documents/document/fieldgroup
[@name='Заявка']/fieldset[@index=$row_index]/field[@name='ПІБ']"></xsl:variable>
<field name="ПІБ" recordUUID="{wdExtensions:getRecordUUIDByValueFromDictionary
('A0FBC9CE-9BFC-4109-8F3B-70ED6008A780', 
'A1AC4A60-E272-4816-AD38-DEEBA22B5FAC', $nonono)}">
<xsl:value-of select="nonono"/></field>
</document>

Заповнення рядків динамічної таблиці з іншої динамічної таблиці:

<xsl:variable name="sourceRows" select="envelope/documents/document
[@id='9b9d2c05-23d1-43f2-ba33-c3d2e85c033f']
/fieldgroup[@name='Таблиця Джерело']
/fieldset"/>
<fieldgroup name="Таблиця Результат">
<xsl:choose>
<xsl:when test="$sourceRows">
<xsl:for-each select="$sourceRows">
<fieldset index="{position() - 1}">
<field name="Текст Результат 1">
<xsl:value-of select="field[@name='Текст Джерело 1']"/>
</field>
<field name="Текст Результат 2">
<xsl:value-of select="field[@name='Текст Джерело 2']"/>
</field>
</fieldset>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<fieldset index="0">
<field name="Текст Результат 1"/>
<field name="Текст Результат 2"/>
</fieldset>
</xsl:otherwise>
</xsl:choose>
</fieldgroup>

Передача вкладень з документа в документ:

<!--document id призначення-->
<document id="25a77579-3387-4963-b373-df44eac458d9">
<!--field name призначення-->
<field name="2722229e-42fb-4b63-a5e6-e3c1b674d7ee">
<!--@name - field name джерела-->
<xsl:attribute name="attachmentUuid" select="envelope/documents/document/field
[@name='4e4a7f74-a61d-455b-b164-6ed0b004b1d7']/@attachmentUuid"/>
</field>
</document> 


Умова всередині правила конвертації

Заповнення чекбоксів в залежності від значення поля в шаблоні-джерелі:

Оголосити змінну: 

<xsl:variable name="umovy" select="envelope/documents/document/field
[@name='Умови роботи']"/>

Написати умову:        

<field name="основна">
<xsl:choose>
<xsl:when test="$umovy = 'основним місцем'">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</field>
<field name="за суміцництвом">
<xsl:choose>
<xsl:when test="$umovy = 'сумісництвом'">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</field>

Заповнення значення меню з чекбоксів:

Умова, яке значення записати в поле по заповненому чекбоксу з попереднього шаблону. 

<field name="Меню Умов робот">
<xsl:choose>
<xsl:when test="envelope/documents/document/field[@name='основна'] 
= '1'">за основним місцем</xsl:when>
<xsl:when test="envelope/documents/document/field[@name='за суміцництвом'] 
= '1'">за сумісництвом</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</field>


Умови запуску шаблона

Для запуску визначеного шаблона в залежності від внесених даних потрібно додати в крок сценарія умову (правило).

Для цього на потрібному кроці встановити галочку «Умова»:

Після встановлення галочки з'являється додатковий редактор на кроці. В нього потрібно скопіювати код правила та встановити умову (розглядаємо на прикладі, коли потрібний шаблон запускається в залежності від дати у відповідному полі) 

  • В даному випадку на третьому кроці сценарію встановлено умову: 

Якщо Дата заяви >=27.11.2025, запускається шаблон з третього кроку. 

  • Відповідно, на другому кроці встановлено умову: 

Якщо Дата заяви <27.11.2025, запускається шаблон з другого кроку. 

Правило для >=27.11.2025: 

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:choose> 
<xsl:when test="envelope/documents/document/field
[@name='Дата заяви'] &gt;= '27.11.2025'"> 
<result>true</result> 
</xsl:when> 
<xsl:otherwise> 
<result>false</result> 
</xsl:otherwise> 
</xsl:choose> 

Правило для <27.11.2025: 

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:choose>
<xsl:when test="envelope/documents/document/field[@name='Дата заяви'] 
&lt; '27.11.2025'">
<result>true</result>
</xsl:when>
<xsl:otherwise>
<result>false</result>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> 

Особливості встановлення знаків порівняння 

Особливості встановлення знаків порівняння в XSLT:
Дорівнює (=) =
Не дорівнює (<>) !=
Менше (<) &lt;
Більше(>) &gt;
Менше або дорівнює (<=) &lt;=
Більше або дорівнює(>=) &gt;=

Формат дати в XML вводиться в форматі ISO 8601, –  наприклад, 2025-11-27. 

Зверніть увагу! 
Якщо шаблон складається з кількох структурованих документів, потрібно посилатись не лише на поле, але і на id документу: 


Висновок 

Сценарії дозволяють автоматизувати створення конвертів, забезпечуючи послідовність, контроль та гнучкість у роботі з документами. Правильне налаштування шаблонів, XSLT-перетворень та параметрів сценарію гарантує коректне формування нових конвертів і стабільну роботу процесу. Дотримання вимог інструкції допоможе уникнути помилок і максимально ефективно використовувати можливості системи. 

Чи була наша стаття корисною?