Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Использование синхронизации объектов

Практическое занятие

На занятии рассматривается синхронизация объектов между двумя системами.

Предварительный этап:

Необходимо создать 2 области и 2 базы данных, с произвольными именами например, S1 и S2 В каждую область загрузить готовый проект prj1.xml и prj2.xml соответственно В области S1 запустить программу GenData, создающую первоначальный набор объектов в базе S1.

Таким образом, получаем начальное состояние системы. В БД S1 содержатся некоторые данные, это существующая система, и ее можно считать основной. База данных S2 – это новая система, в которой должна содержаться копия основной базы. С S2 будут работать независимо, а данные этих систем будут периодически синхронизироваться.

Подготовка к синхронизации:

Для всех классов в 2х областях необходимо указать:

Parameter OBJJOURNAL = 2; //или Parameter OBJJOURNAL=1;
Parameter GUIDENABLED = 1;

Для существующих объектов необходимо создать глобальный идентификатор GUID, для этого необходимо выполнить:

s st=##class(%Library. GUID).AssignGUID("Sync. Person",1)

Перекомпилируйте классы Скопируйте данные в систему S2 (через экспорт глобалей)

Теперь обе системы содержат одинаковый набор исходных данных. И в каждую из систем можно вносить изменения независимо. Для того, чтобы затем можно было синхронизовать объекты, необходимо создать соответствующие программы

Создайте программу для экспорта данных из системы S2, например, SyncOut:

set DirFile="c:\sync21.dat"
Set SrcSyncSet = ##class(%SYNC. SyncSet).%New()
Set ExcludedDB = $ListBuild(##class(%SYS. System).InstanceGUID(),"S1")
Do SrcSyncSet. AddTransactions(,,ExcludedDB)
set sc=SrcSyncSet. ExportFile(DirFile,"-d")
quit

Создайте в области S1 программу для импорта данных, например, SyncIn:

Set TrgSyncSet = ##class(%SYNC. SyncSet).%New()
Set St= TrgSyncSet. Import("C:\sync21.dat")

Добавьте новые данные в систему S2, можно использовать программу AddData. Посмотрите какие данные добавились. Выполните SyncIn и SyncOut. Убедитесь, что данные были перенесены. Создайте аналогичные SyncOut и SyncIn в S1 и в S2 соответственно. Чтобы убедиться, что данные синхронизируются в обе стороны, можно создать данные на стороне S1, удалить или изменить какие-то из существующих объектов.

Если в каждой из систем изменить один и тот же объект, а затем попытаться выполнить синхронизацию, то при загрузке возникнет конфликт.

Разрешение конфликтов (дополнительное)

Создайте callback метод %ResolveConcurrencyConflict, который будет вызываться в случае возникновения конфликта. Можно реализовать такую функциональность, чтобы изменения, вносимые в S1, имели приоритет. Т. е. чтобы при импорте данных в S2, при возникновении конфликта существующий в S2 объект перезаписывался новым объектом из S1. Для этого можно использовать метод класса %SyncObjectIn.