Quintiq file version 2.0
|
#parent: #root
|
Method SyncChannelMetasFromRoutingTable (NamedValueTree nvt_i, NamedValue body_i, LibDEF_Systems syncSystems_i,
|
String newSystemGUID_i, LibDEF_IntegrationEvent event_i)
|
{
|
Description:
|
[*
|
Synchronize ChannelMetas from routing table, create or update ChannelMeta records, for the relevant Systems.
|
If there is a new-SystemGUID input, the look-up will refer to it.
|
*]
|
TextBody:
|
[*
|
// Jacky CHAN Apr-22-2016 (created)
|
// 1. Initialization: mark SoftDeleted
|
traverse( syncSystems_i, Elements.ChannelMeta, channelMeta )
|
{
|
channelMeta.IsSoftDeleted( true );
|
}
|
|
// 2. Synchronization
|
traverse( body_i.Children(), Elements, channelMeta,
|
channelMeta.Name() = typeof( LibDEF_ChannelMeta ).Name() )
|
{
|
syncChannel := NamedValueTreeIO::ImportObject( nvt_i, channelMeta, typeof( LibDEF_ChannelMeta ) ).astype( LibDEF_ChannelMeta );
|
systemGUID := ifexpr( newSystemGUID_i.Length() > 0, newSystemGUID_i, syncChannel.SystemGUID() );
|
channelName := syncChannel.Name();
|
|
matchedChannel := LibDEF_ChannelMeta::FindChannelMeta( this, systemGUID, channelName );
|
// create if not found
|
if( isnull( matchedChannel ) )
|
{
|
ownerSystem := LibDEF_System::FindSystemByGUID( this, systemGUID );
|
if( not isnull( ownerSystem ) )
|
{
|
matchedChannel := LibDEF_ChannelMeta::Create( ownerSystem, channelName );
|
}
|
else
|
{
|
LibDEF_Util::EventLogError( event_i,
|
"Failed to synchronize ChannelMetas from Routing Table",
|
"ChannelMeta of [SystemGUID: " + systemGUID + ", ChannelName: " + channelName + "] cannot by synchronized, due to missing owner System." );
|
}
|
}
|
else
|
{
|
matchedChannel.IsSoftDeleted( false );
|
}
|
|
// DO NOT update for local system
|
if( matchedChannel.SystemGUID() <> this.SystemLocal().GUID() )
|
{
|
matchedChannel.UpdateVersion( syncChannel.MajorVersion(), syncChannel.MinorVersion() );
|
}
|
}
|
|
// 3. Finalization: clean-up leftovers
|
traverse( syncSystems_i, Elements.ChannelMeta, channelMeta,
|
channelMeta.IsSoftDeleted() )
|
{
|
channelMeta.Delete();
|
}
|
*]
|
}
|