агенты, импорт, API-клиенты, модели
Модуль Битрикс24 «коробки» и БУС — заготовки для синхронизаций: агенты с учётом проблем, таблица импорта, импорт из CSV, XML и CRM, модели ORM для инфоблоков, каталога и складов, обращение к внешнему API. Сам ничего не синхронизирует — на нём пишутся модули обменов.
Опирается на shef.options и shef.problems: их нужно поставить первыми.
Порядок шагов важен: сначала shef.options и shef.problems, потом файлы
этого модуля, потом установка в административном разделе.
composer require bxshef/insync
Модуль развернётся в bitrix/modules/shef.insync/ сам, вместе с ним приедут
bxshef/options, bxshef/problems и sbwerewolf/xml-navigator. Composer 2.2+
требует разрешить плагин раскладки — один раз, в composer.json проекта:
{
"config": {
"allow-plugins": {
"composer/installers": true
}
}
}
Скачайте shef.insync.zip со страницы релизов
и распакуйте в bitrix/modules/. Должно получиться
bitrix/modules/shef.insync/ — именно через точку. Библиотеки разбора XML
лежат внутри архива, отдельно их ставить не нужно: есть они в Composer
проекта — модуль возьмёт их оттуда, нет — свою копию.
shef_insync_model и раздел
«SH Импорт» в левом меню./home/bitrix/www это /home/bitrix/sh_import. Туда же кладут файлы
внешние обмены. Свой каталог, права и перенос /upload/import из 1.x —
безопасность.Обновление с 1.x — замена файлов не запускает установщик, а компоненты
1.x в /local/components/shef.insync перекрыли бы новые. И таблице импорта
нужен новый ключ: до вызова SyncTable::init() импорт не работает —
агенты на время обновления выключаются. Порядок —
в процедуре проверки, шаг B.
Агент, который разбирает таблицу импорта, — наследник
\Shef\InSync\Sync\FromFile\AAgent:
final class PriceAgent extends \Shef\InSync\Sync\FromFile\AAgent
{
public static function getModuleId(): string { return 'acme.exchange'; }
public static function getOriginatorId(): string { return 'AcmePriceCsv'; }
public static function buildAgentsEntity(): \Shef\InSync\Agents\Entity
{
return new \Shef\InSync\Agents\Entity(
module: 'acme.exchange',
name: '\\'.static::class.'::process',
params: [],
period: 600
);
}
protected function processRow(\Shef\InSync\Sync\IElement $row): \Bitrix\Main\Result
{
$fields = $row->getInterfaceAdditional();
// … записать товар, цену, остаток
return new \Bitrix\Main\Result();
}
}
Строки в таблицу импорта кладёт процесс — наследник ACsvProcess,
AXmlProcess или ACrmProcess. Сбой строки остаётся в таблице со статусом
«ошибка» и попадает проблемой в журнал событий через shef.problems.
Вся документация — в репозитории:
Пример модуля обмена на shef.insync — shef.demosync.