Hi Marien,
You are close, the entity.generalization property indeed refers to the GeneralizationBase, which is abstract (like all Base postfixed classes). But it has two suptypes: Generalization and NoGeneralization (see the docs)
If the entity has no supertype its generalization property will be an instanceof NoGeneralization
, which has a property persistable
which is the one you are looking for.
if the entity has a supertype (inherits from another entity), the generalization will be an instanceof Generalization
, which has itself also property generalization
which refers to the entity it is inheriting from. Which might in turn inherit from another, but in the end there will be always an entity with NoGeneralization; that is the one that determines the persist-ability for the whole inheritance chain.
In other words, a simple recursive function can tell you whether an entity is persistable:
function isPersistable(entity: domainmodels.IEntity): boolean {
if (!entity || !entity.generalization)
return true; // Default if somehow no info available, this happens when inheriting from entities in the System module which is currently not available in the sdk
else if (entity.generalization instanceof domainmodels.NoGeneralization)
return (<domainmodels.INoGeneralization>entity.generalization).persistable;
else
return isPersistable((<domainmodels.IGeneralization>entity.generalization).generalization);
}
Note that this is a pattern used quite often used in the SDK, some property refers to an abstract object, which, depending on the concrete subtype, reveals more properties
It is Entity.GeneralizationBase.Persistable.