Quintiq file version 2.0
|
#parent: #root
|
StaticMethod GetEntitiesToSave (
|
Entitys checkEntities
|
) as owning Entitys
|
{
|
Description:
|
[*
|
Web introduced new bookmark logic. Keep bookmark as short as possible.
|
If all children (and descendants) checked, store the parent only. If partial, then no choice we store the checked children.
|
*]
|
TextBody:
|
[*
|
result := construct( Entitys ); // Entities to bookmark
|
|
// Filter out system (WIP) entities and parent entities
|
checkLeafEntities := selectset( checkEntities, Elements, c, not c.GetIsSystem() and c.ChildEntity( relsize ) = 0 );
|
|
// Based on filtered entities, get all their parents
|
allParentsSorted := selectsortedset( Entity::GetAllParents( checkLeafEntities ),
|
Elements, e,
|
e.ChildEntity( relsize ) > 0, // Filter out the leaf as GetAllParents return the entity itself as well
|
e.DisplayIndex() ); // Sort from root down to lower level entities
|
|
// Important to start with root, as we will remove 'intersecting' leaf entities as we loop
|
traverse( allParentsSorted, Elements, parent, checkLeafEntities.Size() > 0 ) // Continue as long as there's entities to be considered
|
{
|
leafDescendants := parent.GetLeafDescendants();
|
|
// If current parent's leaf descendants are found in user checked entities
|
// We only bookmark the parent and remove leaf descendants from the list and proceed next parent
|
// Example (Food demo): Add unit Plants if ALL Denmark, Hungary and France machines are part of user checked entities
|
if( checkLeafEntities.ContainsAll( leafDescendants ) )
|
{
|
checkLeafEntities.Remove( leafDescendants );
|
result.Add( parent );
|
}
|
}
|
|
// If there's leaf entities left (not all siblings check), add them to the result
|
if( checkLeafEntities.Size() > 0 )
|
{
|
result := result.Union( checkLeafEntities );
|
}
|
|
return &result;
|
*]
|
}
|