The documentation comes from the Markdown files in the source code, so is always up-to-date but available only in English. Enjoy!
EntityKindAttribute tries to classify entity types in two different aspects:
EntityKind: What's the role of the entity in the system.
EntityData: What's the live-cycle of its data.
IsLowPopulation: Whether the number of elements is usually small enough to use a EntityCombo instead of a EntityLine.
By classifying the entities we get two main benefits:
Classifies the role of the entity in the system:
SystemString: Simple entity created by the system. Doesn't make sense to view since there's not to much to see. (ie: PermissionSymbol)
System: The entity is automatically generated by the system. (ie: ExceptionEntity)
Relational: An entity that connects two entities to implement a N-to-N relationship in a symmetric way (no
MList<T>). (ie: DiscountProductEntity)
String: Doesn't make sense to view it from other entity, since there's not to much to see. (ie: CountryEntity).
Shared: Created and shared by other entities. (ie: a CustomerEntity that can be created while creating the order).
Main: Used and shared by other entities, but too big/important to be created or modified from other entity. (ie: OrderEntity).
Part: Entity that belongs to just one entity and should be saved together, but that can not be implemented as
EmbeddedEntity (usually to enable polymorphism). (ie: ProductExtensionEntity).
SharedPart: Entity that can be created on the fly and saved with the parent entity, but could also be shared with other entities to save space. (ie: AddressEntity).
The decision you take will affect the default in the user interface and operations:
RequiresSaveOperation: Requires the entity to define a
Save Operation. System entities are not save protected because are created by the system, and parts because can be saved as part of their parents.
IsCreable: Shows the create (+) button in the user interface. System entities can not be manually created, and
Main only in
SharedPart only make sense to create them on-the-fly on the parent entity.
IsViewable: Shows the view (->) button in the user interface for all entities but
SystemString, that have nothing to show, and
Relational that is used from the
IsNavigable: Shows the navigate () button in the user interface for all entities but
This classification, while confusing at first, allows the framework to provide better default behaviors at the UI, and ensures that operations are registered accordingly.
EntityData is simpler, it classifies entities in two groups:
IsLowPopulation can be set to true to let the framework know that very few instances are expected for this type. The main usage is to have
EntityCombo instead of