Синхронная привязка записи-источника к сводной записи


НАЧАЛО >> Руководство пользователя >> Руководство администратора >> Основные настройки и действия >> Синхронная привязка записи-источника к сводной записи📄 Скачать в DOCX


Функция CSpider::LinkWithEsvodt создает или подтверждает связь записи-источника со сводной записью сразу в текущем вызове. Ее используют в проектной логике, когда запись уже есть в объекте ObjectDataRecord и нужно не ждать фонового этапа дедубликации, а сразу получить строку в таблице слияний, выбрать сводную запись и запустить первичное слияние.

Функция не заменяет полный цикл обработки CSpider. Она выполняет грубое слияние и переводит строку таблицы слияний на stage=5; после этого запись-источник должна пройти фоновые этапы проверки, нормализации и контроля по текущим настройкам модуля.

1. Вызов

UseModule('CSpider')->LinkWithEsvodt($db, $r, $idField = 903, $idSubField = '*', $ssh = '');
Параметр Тип Назначение Значение по умолчанию
$db ObjectData БД-источник, из которой получена запись -
$r ObjectDataRecord Запись-источник -
$idField int Поле, где хранится уникальный идентификатор записи 903
$idSubField string Подполе уникального идентификатора записи *
$ssh string Шифр сводной записи, к которой нужно привязать источник без поиска дублетов пустая строка

Подробная автодокументация функции доступна в списке функций модуля: ?id=Help/Show&m=Help/Module/Functions&module=CSpider#LinkWithEsvodt.

2. Логика работы

  1. По содержимому $r проверяется и при необходимости создается строка в таблице слияний ESVODT.
  2. По имени БД-источника и идентификатору записи строится значение sh, затем читается соответствующая строка таблицы слияний.
  3. Если у строки уже заполнен ssh, функция завершает работу и не меняет существующую связь, даже если в вызове передан новый $ssh.
  4. Если $ssh передан и в сводной БД есть запись с таким шифром, используется эта запись.
  5. Если $ssh не передан или запись по нему не найдена, вызывается FindDublet::findServerRecord: он ищет ранее связанную запись, запись по индексу SYNCI=, дублетную запись или создает новую сводную запись.
  6. MergeRecords::Merge выполняет первичное слияние записи-источника со сводной записью.
  7. Если у сводной записи еще нет шифра в поле идентификатора, создается новый GUID и записывается в то же поле и подполе, которые указаны в параметрах $idField и $idSubField.
  8. После успешного сохранения сводной записи строка ESVODT получает новый ssh, контрольную сумму mds, пустое описание ошибки и статус stage=5.

3. Результат и проверка

Функция ничего не возвращает вызывающему коду. Результат нужно проверять по состоянию таблицы слияний и сводной записи:

Для ручной проверки используйте страницу Таблица слияний или Проверка состояния записи-источника по шифру.

4. Когда передавать $ssh

Передавайте $ssh, если вызывающий код уже знает точную сводную запись и нужно связать источник именно с ней. В этом режиме функция сначала ищет запись в сводной БД по индексу I=<ssh>. Если такая запись не найдена, параметр считается неуспешным указанием цели, и функция возвращается к стандартному поиску через FindDublet::findServerRecord.

Если $ssh не передан, привязка строится по стандартным правилам CSpider: поиск ранее синхронизированной записи, поиск по SYNCI=, поиск дублета и создание новой сводной записи, когда подходящая запись не найдена.