Quintiq file version 2.0
|
#parent: #root
|
StaticMethod UnloadDatasetCopiesAndUpdateSnapshotStatus (LibOpt_SnapshotReplannableCopyDatasets snapshots) as Boolean
|
{
|
Description:
|
[*
|
Unload the datasets that are attached to the `LibOpt_SnapshotReplannableCopyDataset` snapshots.
|
This method is called from the context menu of a `LibOpt_SnapshotReplannableCopyDataset` snapshot. `LibOpt_SnapshotReplannableCopyDataset` snapshots can be found in the 'Snapshots' and 'Replannable snapshots' forms.
|
If a dataset could not be found in the dataset store, then all snapshots will be updated by calling `optimization.UpdateReplannableSnapshots()`.
|
We are aware that it is against style guide to execute two separate actions in the same method. However, we have to combine these two actions to ensure that only 1 server transaction is started when this method is called from the UI.
|
*]
|
TextBody:
|
[*
|
// evr3 Apr-29-2020 (created)
|
|
isanydatasetinfonull := false;
|
objectinfos := MDSEditor::Editor().ObjectInfos();
|
traverse( snapshots, Elements, snapshot, not snapshot.IsDatasetDeleted() and snapshot.HasCreatedDataset() )
|
{
|
isdatasetinfonull := snapshot.UnloadDatasetCopyManually( objectinfos );
|
isanydatasetinfonull := isanydatasetinfonull or isdatasetinfonull;
|
}
|
|
if( isanydatasetinfonull )
|
{
|
// If 'isanydatasetinfonull' is true, then (for at least one snapshot) snapshot.IsDatasetDeleted() was false (so the snapshot thought that its dataset still exists),
|
// while the dataset of that snapshot was actually already deleted.
|
// Therefore, we will update the status of all replannable snapshots to ensure that further mismatches won't occur.
|
optimization := select( snapshots, Elements.Run, run, true ).Optimization();
|
optimization.UpdateReplannableSnapshots();
|
}
|
|
return isanydatasetinfonull;
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|