Validation rules
- Last UpdatedJun 26, 2026
- 5 minute read
This page collects all of the validation rules enforced by Type Management.
Common type validation rules
-
If IsSystemDefined = true, the object should not be editable or able to be deleted.
-
If State <= Deprecated, the object should not be editable.
ID
ID is not modifiable in general, so these rules only apply to creating types.
-
May not be null.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
-
May not exceed 250 characters.
-
May not duplicate an existing ID in the repository regardless of case.
-
May not contain control characters.
-
May not contain illegal character sequences.
Name
-
May not be null.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
-
May not exceed 250 characters.
-
May not contain control characters.
-
May not contain illegal character sequences.
Description
-
May not exceed 1000 characters.
Tags
-
An individual tag may not be null.
-
An individual tag may not be an empty string.
-
An individual tag may not contain leading or trailing whitespace.
-
An individual tag may not exceed 250 characters.
TypeCode
-
Must be either Object or Int32Enum.
-
May not be changed after being initially set.
BaseTypeId
-
Must be null when the TypeCode is Int32Enum.
-
If not null, must match the ID of an existing common type.
-
Must not be equal to this type's TypeId.
-
May not be changed after being initially set.
See below for further restrictions based on the referenced parent type.
SecurityTags
-
Each entry must be a valid GUID matching a Security Tag defined in Access Management.
IsInheritable
-
Must be true when BaseTypeId == null.
-
Must be false when TypeCode != Object.
State
-
May not be of a less active state than any existing child (derived) type.
Relationships
-
This collection must be empty if TypeCode != Object.
-
A RelationshipDefinition may never be removed from this collection.
-
A RelationshipDefinition may not be added to this collection if the new RelationshipDefinition has isRequired == true.
Properties
-
Must have at least one PropertyDefinition if TypeCode == Int32Enum.
-
A PropertyDefintion may NOT be removed from this collection.
-
A PropertyDefinition may not be added to this collection if the new PropertyDefinition has isRequired == true.
Property definition validation rules
ID
-
May not be null.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
-
May not exceed 250 characters.
-
May not match a ReservedPropertyId declared on this type or an ancestor type.
-
May not contain control characters.
-
May not contain illegal character sequences -> or /.
-
Must not match any other PropertyDefinition ID within its type hierarchy.
Name
-
May not be null.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
-
May not exceed 250 characters.
-
May not match a reserved term declared on an ancestor type.
-
May not contain control characters.
-
May not contain ->.
-
Must not match any other PropertyDefinition Name within its type hierarchy, regardless of case.
Value
-
If the owning type's TypeCode != Int32Enum, must be null.
-
If the owning type's TypeCode == Int32Enum, must be a positive integer.
-
Must be unique among all values for that type's properties.
UOM
-
If this property's TypeCode is not numeric (Double, Int32, Int64, Single or their corresponding array versions), then UOM must be null.
-
If the owning type's TypeCode is Int32Enum, then UOM must be null.
-
If UnknownUOM is not null, then UOM must be null or Unknown.
-
If UnknownUOM is null, then UOM must be null or a valid UOM ID.
-
If editing, may not change the dimensionality of the UOM, unless the UOM was None or Unknown, in which case, any new UOM is allowed.
-
If editing, this may not be changed to null in favor of using UnknownUOM unless this original value was None.
-
If editing, may only be changed to None if the original value was Unknown.
UnknownUOM
-
Must be null if this property's UOM is not null or unknown.
-
May not exceed 250 characters.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
TypeCode
-
If the owning type's TypeCode == Int32Enum, this property's TypeCode must be Int32.
-
May not be Object.
-
May not be Empty.
TypeId
-
If the TypeCode is Int32Enum or Int32EnumArray then this may not be null.
-
Otherwise, must be null.
IsRequired
-
Cannot update IsRequired to true on an existing PropertyDefinition.
See below for further restrictions based on the referenced property value type.
Relationship definition validation rules
ID
-
May not be null.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
-
May not exceed 250 characters.
-
May not contain control characters.
-
May not contain illegal character sequences.
-
Must not match any other RelationshipDefinition ID within its type hierarchy, regardless of case.
-
Must not match any RemoteReferenceName targeting any type within its hierarchy.
-
May not be "*".
Name
-
May not be null.
-
May not be an empty string.
-
May not contain leading or trailing whitespace.
-
May not exceed 250 characters.
-
May not contain control characters.
-
May not contain illegal character sequences.
-
Must not match any other RelationshipDefinition Name within its type hierarchy.
TargetTypeIds
-
Must have at least one value.
-
Values may never be removed from this list.
See below for further restrictions based on the referenced relationship target type.
RemoteReferenceName
-
Must not match any RelationshipDefinition ID within the type hierarchy of any targeted type.
-
Must not match any RemoteReferenceName on any RelationshipDefinition targeting any type within any of the targeted types' hierarchies.
-
Once set, may not be changed.
IsRequired
-
Cannot update IsRequired to true on an existing PropertyDefinition.
Referential validation rules
Type operations can also be restricted based on other types that reference it. Types reference other types in three ways:
-
Base Types (CommonType.BaseTypeId)
-
Property Value Types (PropertyDefinition.TypeId)
-
Relationship Target Types (RelationshipDefinition.TargetTypeIds)
Derived types
A derived type (sometimes called a "child type" or "subtype") is one that has a given type in its chain of ancestors, that is, a base type or the parent of one of those ancestor types.
-
Base type must be IsInheritable == True.
-
Base type must have a State at least as active as this type's State.
-
A type may not be deleted if it has any derived types.
Property value types
A property value type is a CommonType referenced to describe the type of a property value, usually an enumerated type.
-
Referenced type must have the TypeCode Int32Enum.
-
A type may not be deleted if any Property Definition targets it as its value TypeId.
Relationship target types
Relationship definitions must specify at least one TargetTypeId that indicates what sorts of objects can be targeted by that relationship.
-
Referenced type must have the TypeCode Object.
-
Referenced type must have a State at least as active as this RelationshipDefinition's State.
-
A type may not be deleted if any relationship targets it in its list of TargetTypeIds.
Type utilization
Manipulation of a type can also be restricted based on its usage by consuming services such as Entity Management and Event Management.
-
A type may not be deleted if any consumer reports it as being in use by an instance.