Search for a command to run...
Справочник описывает, когда вызывается каждый хук, что получает и может вернуть его обработчик и что плагин делает с результатом. Правила, общие для всех хуков, описаны на странице Хуки воркфлоу.
Хук воркфлоу (). Вызывается на каждую пачку каталога, до 100 товаров, до сравнения с товарами Medusa. Каталог в 10 000 товаров вызовет его 100 раз.
src/workflows/hooks/onec-catalog.ts1import { StepResponse } from "@medusajs/framework/workflows-sdk"2import { importOnecProductsWorkflow } from "@gorgo-store/medusa-erp-1c/workflows"34importOnecProductsWorkflow.hooks.setProducts(async ({ products, properties }, { container }) => {5 // ...67 return new StepResponse({ products })8})
Обработчик получает товары пачки и свойства классификатора:
В обмен записывает , , , , , , , и , а и только когда 1С прислала картинки. Поля , , , , , , , , , и обмен не заполняет. Их может задать обработчик, и импорт запишет их так же, как остальные.
Верните . Обработчик может поправить и убрать товар из пачки. Чего он сделать не может:
После хука плагин сравнивает с и пишет только поля, которые отличаются. Товар без он создаёт. Убранный из пачки товар в этом обмене не создаётся и не обновляется.
Хук воркфлоу (). Воркфлоу запускается внутри импорта предложений, поэтому хук вызывается на каждую пачку предложений, до 100 товаров со всеми их предложениями, до сверки с Medusa.
src/workflows/hooks/onec-prices.ts1import { StepResponse } from "@medusajs/framework/workflows-sdk"2import { importOnecPricesWorkflow } from "@gorgo-store/medusa-erp-1c/workflows"34importOnecPricesWorkflow.hooks.setPriceLists(async ({ priceLists }, { container }) => {5 // ...67 return new StepResponse({ priceLists })8})
Обработчик получает по элементу на каждый нерозничный тип цен из . Розничный тип плагин пишет в цену варианта, и в хук он не попадает:
Верните . Ключ, который обработчик добавит в , например или , импорт запишет, если он отличается от записанного. Ограничения такие:
После хука плагин создаёт прайс-листы новых типов цен и помечает их . У существующих он пишет изменившиеся ключи и сверяет цены по варианту и валюте, добавляя новые, обновляя изменившиеся и удаляя лишние. Убранный из списка тип цен в этой пачке не трогается вовсе, ни прайс-лист, ни его цены.
Хук воркфлоу (). Вызывается один раз на выгрузку заказов в 1С, до сборки XML. В выгрузку попадают неотменённые заказы, которые ещё не выгружались и не пришли из 1С.
src/workflows/hooks/onec-orders.ts1import { StepResponse } from "@medusajs/framework/workflows-sdk"2import { exportOnecOrdersWorkflow } from "@gorgo-store/medusa-erp-1c/workflows"34exportOnecOrdersWorkflow.hooks.setOrders(async ({ orders }, { container }) => {5 // ...67 return new StepResponse({ orders })8})
Обработчик получает каждый заказ вместе с документом CommerceML, которым тот уйдёт в 1С:
У документа есть и поля , , , , , и . Их тоже можно поправить, они уходят в XML как есть.
Верните . Обработчик может поправить и убрать заказ из выгрузки. Вернуть заказ, которого в выгрузке не было, вернуть заказ дважды или поменять нельзя.
После хука плагин собирает из документов и отдаёт его 1С. Отметку о выгрузке заказы получают, только когда 1С подтвердит приём. Убранный из выгрузки заказ отметку не получит и попадёт в следующую выгрузку.
Хук есть у двух воркфлоу, () и (). Вызывается один раз на выгрузку, когда XML уже собран. У выгрузки заказов он идёт после . Это резервный способ для того, чего нет в модели товара или документа, например для версии схемы, которую ждёт ваша конфигурация 1С.
src/workflows/hooks/onec-payload.ts1import { StepResponse } from "@medusajs/framework/workflows-sdk"2import { exportOnecCatalogWorkflow, exportOnecOrdersWorkflow } from "@gorgo-store/medusa-erp-1c/workflows"34exportOnecCatalogWorkflow.hooks.setPayload(async ({ payload }) => {5 // ...67 return new StepResponse({ payload })8})910exportOnecOrdersWorkflow.hooks.setPayload(async ({ payload }) => {11 // ...1213 return new StepResponse({ payload })14})
Это два разных хука, и каждый регистрируется у своего воркфлоу. Обработчик получает XML строкой:
Верните со строкой. Без обработчика в 1С уходит XML плагина. Какие заказы получат отметку о выгрузке, решает , а не этот хук.
экспортирует две функции, которые читают значения товара 1С так, как их раскладывает CommerceML.
readRequisite(source, name): string | undefined
Первое значение реквизита из по его . Имя сравнивается точно, с пробелами и регистром. У 1С это свободный текст, и с разные реквизиты. Если реквизита нет, функция вернёт .
readProperty(source, properties, nameOrId): string[]
Значения свойства из . Свойство ищется по или по имени, а значения-справочники разворачиваются через из входных данных хука. По имени собираются все одноимённые свойства, потому что 1С может завести своё свойство «Бренд» под каждую категорию. Если значения нет, функция вернёт пустой массив.