<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_sub-workflow</id>
	<title>Создание sub-workflow - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_sub-workflow"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_sub-workflow&amp;action=history"/>
	<updated>2026-10-26T19:38:52Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_sub-workflow&amp;diff=7096&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: « = Создание sub-workflow = Sub-workflow — это не отдельный тип Workflow, который вы настраиваете при создании, а роль, которую Workflow принимает на себя, когда другой Workflow ссылается на него с помощью действия &#039;&#039;&#039;Запустить Workflow&#039;&#039;&#039;. Любой live стандартный Workflow может использоватьс...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_sub-workflow&amp;diff=7096&amp;oldid=prev"/>
		<updated>2026-10-14T15:28:15Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « = Создание sub-workflow = Sub-workflow — это не отдельный тип Workflow, который вы настраиваете при создании, а роль, которую Workflow принимает на себя, когда другой Workflow ссылается на него с помощью действия &amp;#039;&amp;#039;&amp;#039;Запустить Workflow&amp;#039;&amp;#039;&amp;#039;. Любой live стандартный Workflow может использоватьс...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Создание sub-workflow =&lt;br /&gt;
Sub-workflow — это не отдельный тип Workflow, который вы настраиваете при создании, а роль, которую Workflow принимает на себя, когда другой Workflow ссылается на него с помощью действия &amp;#039;&amp;#039;&amp;#039;Запустить Workflow&amp;#039;&amp;#039;&amp;#039;. Любой live стандартный Workflow может использоваться как sub-workflow. Конфигурация входных данных и результатов Workflow определяет интерфейс:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Входные данные Workflow&amp;#039;&amp;#039;&amp;#039;: определяют, какие данные вызывающий Workflow может передать. Внутри sub-workflow задачи получают доступ к этим данным с помощью выражения &amp;lt;code&amp;gt;input()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Результат Workflow&amp;#039;&amp;#039;&amp;#039;: определяет, что задача «Запустить Workflow» возвращает вызывающему Workflow в качестве результата. Простые Workflow не могут выступать в роли sub-workflow. Действие «Запустить Workflow» перечисляет только развёрнутые стандартные Workflow.&lt;br /&gt;
&lt;br /&gt;
== Когда использовать sub-workflow ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Переиспользуемая логика Workflow&amp;#039;&amp;#039;&amp;#039;: извлеките набор задач в отдельный Workflow, который могут вызывать несколько родительских Workflow. Вы поддерживаете логику в одном месте. Типичные примеры — Workflow маршрутизации уведомлений или общие шаги поиска сущностей.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Длительные операции&amp;#039;&amp;#039;&amp;#039;: каждое действие в Ключ-АСТРОМ выполняется в бессерверной среде с ограничением в 120 секунд на действие. Sub-workflow выполняется как отдельное выполнение Workflow с собственным тайм-аутом задачи, настраиваемым до 7 дней. Используйте его для операций, которые занимают больше времени, например опроса внешнего API до завершения асинхронной задачи.&lt;br /&gt;
&lt;br /&gt;
== Подготовка входных данных sub-workflow ==&lt;br /&gt;
Перед созданием sub-workflow определите, какие данные ему нужны от вызывающей стороны и что он должен вернуть.&lt;br /&gt;
&lt;br /&gt;
* Откройте или создайте Workflow, который хотите использовать как sub-workflow.&lt;br /&gt;
* В редакторе Workflow откройте &amp;#039;&amp;#039;&amp;#039;Опции&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* В разделе &amp;#039;&amp;#039;&amp;#039;Входные данные Workflow&amp;#039;&amp;#039;&amp;#039; определите ожидаемые входные данные как объект JSON. Это значения по умолчанию; вызывающий Workflow может переопределить или расширить отдельные поля во время вызова.&lt;br /&gt;
* В разделе &amp;#039;&amp;#039;&amp;#039;Результат Workflow&amp;#039;&amp;#039;&amp;#039; определите выражение Jinja, которое вычисляется в объект JSON. Это то, что задача «Запустить Workflow» возвращает в качестве результата.&lt;br /&gt;
* Разверните Workflow, чтобы он появился в списке выбора действия «Запустить Workflow».&lt;br /&gt;
&lt;br /&gt;
== Вызов Workflow как sub-workflow ==&lt;br /&gt;
&lt;br /&gt;
* В вызывающем Workflow добавьте задачу и выберите действие &amp;#039;&amp;#039;&amp;#039;Запустить Workflow&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* В разделе «Запустить Workflow» выберите целевой Workflow из раскрывающегося списка.&lt;br /&gt;
* В разделе «Входные данные» укажите JSON для передачи. Он объединяется с входными данными sub-workflow по умолчанию — вам нужно указать только те поля, которые вы хотите переопределить или у которых нет значений по умолчанию. Полную справку по доступным опциям и ограничениям см. в разделе &amp;#039;&amp;#039;&amp;#039;Действие «Запустить Workflow»&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Шаблон «триггер и опрос» ==&lt;br /&gt;
Некоторые внешние API следуют асинхронному шаблону: вы отправляете запрос для начала операции, а затем опрашиваете конечную точку статуса до завершения операции. Если опрос длится более 120 секунд, это не поместится в одно выполнение действия. Инкапсулируйте всю операцию — её запуск и опрос до завершения — внутри одного sub-workflow. Вызывающему Workflow нужно знать только параметры операции; двухфазный протокол внешнего API остаётся внутри sub-workflow.&lt;br /&gt;
&lt;br /&gt;
=== Создание sub-workflow «триггер и опрос» ===&lt;br /&gt;
Создайте новый стандартный Workflow. Установите его триггер в &amp;#039;&amp;#039;&amp;#039;По требованию&amp;#039;&amp;#039;&amp;#039;. В разделе &amp;#039;&amp;#039;&amp;#039;Входные данные Workflow&amp;#039;&amp;#039;&amp;#039; определите запрос или тело запроса, описывающее, что должна делать асинхронная операция, например:&amp;lt;pre&amp;gt;{ &amp;quot;query&amp;quot;: &amp;quot;&amp;quot; }&amp;lt;/pre&amp;gt;Добавьте первую задачу &amp;#039;&amp;#039;&amp;#039;Запустить JavaScript&amp;#039;&amp;#039;&amp;#039;, которая отправляет запрос к внешнему API. Используйте &amp;#039;&amp;#039;&amp;#039;SDK&amp;#039;&amp;#039;&amp;#039;, чтобы прочитать запрос из входных данных Workflow и вернуть идентификатор задачи для задачи опроса:&amp;lt;pre&amp;gt;import { execution } from &amp;#039;@astromkey-sdk/automation-utils&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const ex = await execution();&lt;br /&gt;
const { query } = await ex.input();&lt;br /&gt;
const job = await submitQuery(query);&lt;br /&gt;
return { jobId: job.id };&amp;lt;/pre&amp;gt;Добавьте вторую задачу, которая опрашивает конечную точку результатов. Настройте задачу опроса так, чтобы она завершалась в состоянии ошибки, когда результаты ещё не готовы — именно к этому подключается механизм повторных попыток. В задаче &amp;#039;&amp;#039;&amp;#039;Запустить JavaScript&amp;#039;&amp;#039;&amp;#039; используйте &amp;#039;&amp;#039;&amp;#039;SDK&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;@astromkey-sdk/automation-utils&amp;lt;/code&amp;gt;, чтобы прочитать идентификатор задачи из результата предыдущей задачи, затем выбрасывайте ошибку, пока задача всё ещё выполняется, и возвращайте полезную нагрузку результата после её завершения:&amp;lt;pre&amp;gt;import { execution } from &amp;#039;@astromkey-sdk/automation-utils&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const ex = await execution();&lt;br /&gt;
const { jobId } = await ex.result(&amp;#039;submit_query&amp;#039;);&lt;br /&gt;
const job = await fetchJobResult(jobId);&lt;br /&gt;
if (job.status !== &amp;#039;COMPLETED&amp;#039;) throw new Error(`Job not ready: ${job.status}`);&lt;br /&gt;
return job.result;&amp;lt;/pre&amp;gt;В &amp;#039;&amp;#039;&amp;#039;Опциях&amp;#039;&amp;#039;&amp;#039; задачи опроса включите &amp;#039;&amp;#039;&amp;#039;Повтор при ошибке&amp;#039;&amp;#039;&amp;#039; с количеством повторных попыток и задержкой, которые вместе покрывают ожидаемую максимальную длительность операции. Вы также можете включить &amp;#039;&amp;#039;&amp;#039;Ожидание перед&amp;#039;&amp;#039;&amp;#039;, чтобы отложить самую первую попытку опроса, если задаче нужно время для запуска. В разделе &amp;#039;&amp;#039;&amp;#039;Результат Workflow&amp;#039;&amp;#039;&amp;#039; предоставьте полезную нагрузку результата из задачи опроса, чтобы вызывающие стороны получали данные напрямую:&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;{{ result(&amp;quot;fetch_results&amp;quot;) | to_json }}&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;Разверните sub-workflow.&lt;br /&gt;
&lt;br /&gt;
=== Настройка основного Workflow ===&lt;br /&gt;
Добавьте задачу &amp;#039;&amp;#039;&amp;#039;Запустить Workflow&amp;#039;&amp;#039;&amp;#039; и выберите sub-workflow «триггер и опрос». В разделе &amp;#039;&amp;#039;&amp;#039;Входные данные&amp;#039;&amp;#039;&amp;#039; передайте запрос, определяющий асинхронную операцию:&amp;lt;pre&amp;gt;{ &amp;quot;query&amp;quot;: &amp;quot;fetch logs | filter ...&amp;quot; }&amp;lt;/pre&amp;gt;В &amp;#039;&amp;#039;&amp;#039;Опциях&amp;#039;&amp;#039;&amp;#039; задачи откройте &amp;#039;&amp;#039;&amp;#039;Адаптировать тайм-аут&amp;#039;&amp;#039;&amp;#039; и установите тайм-аут, соответствующий максимальной ожидаемой длительности операции. Последующие задачи получают полезную нагрузку результата напрямую через &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ result(&amp;quot;task_name&amp;quot;) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (используя фактическое имя задачи, которое вы задали) — без полей статуса, только данные.&lt;br /&gt;
&lt;br /&gt;
== Мониторинг ==&lt;br /&gt;
Выполнения sub-workflow отслеживаются как отдельные выполнения Workflow и связаны со своим родителем в обоих направлениях. Подробности о навигации между выполнениями родительского Workflow и sub-workflow в мониторе выполнений и фильтрации списка выполнений см. в разделе &amp;#039;&amp;#039;&amp;#039;Мониторинг выполнений sub-workflow&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Просмотр, где Workflow используется как sub-workflow ==&lt;br /&gt;
Редактор отображает подсказку, когда Workflow используется как sub-workflow в другом Workflow.&lt;br /&gt;
&lt;br /&gt;
* Выберите &amp;#039;&amp;#039;&amp;#039;Используется как sub-workflow &amp;gt; Показать все затронутые Workflow&amp;#039;&amp;#039;&amp;#039;, чтобы увидеть подробности. Отображаются только доступные вам Workflow. Приватные Workflow не видны в списке.&lt;br /&gt;
* Если вы удалите Workflow, который используется как sub-workflow, вам будет представлен список затронутых вызывающих Workflow, чтобы оценить влияние удаления.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>