Content instances of specific classes specification
TypeScript type: ContentInstancesOfSpecificClassesSpecification.
This specification creates content for all instances of specific ECClasses.
Attributes
Attribute: classes
Defines a set of multi schema classes that specify which ECClasses need to be selected to form the result.
// The specification returns content of all `bis.PhysicalModel` classes.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["PhysicalModel"], arePolymorphic: false },
},
],
},
],
};

Attribute: excludedClasses
Defines a set of multi schema classes that prevents specified ECClasses and subclasses from being selected by classes
attribute.
// The specification returns content of all classes derived from `bis.Model` except for excluded `bis.PhysicalModel` class.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["Model"], arePolymorphic: true },
excludedClasses: { schemaName: "BisCore", classNames: ["PhysicalModel"] },
},
],
},
],
};
|
Result |
excludedClasses: [] |
 |
excludedClasses as defined in the above ruleset |
 |
Attribute: handlePropertiesPolymorphically
Specifies whether properties of derived classes should be included in the content.
|
|
Type |
boolean |
Is Required |
No |
Default Value |
false |
// This ruleset returns content of all `bis.ViewDefinition` instances, including all properties from derived classes.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["ViewDefinition"], arePolymorphic: true },
handlePropertiesPolymorphically: true,
},
],
},
],
};
|
Result |
handlePropertiesPolymorphically: false |
 |
handlePropertiesPolymorphically: true |
 |
Attribute: instanceFilter
Specifies an ECExpression for filtering instances of ECClasses specified through the classes
attribute.
// This ruleset returns content of all `bis.SpatialViewDefinition` instances whose `Pitch` property is greater or equal to 0.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["SpatialViewDefinition"] },
instanceFilter: "this.Pitch >= 0",
},
],
},
],
};
|
Result |
instanceFilter: "" |
 |
instanceFilter as defined in the above ruleset |
 |
Attribute: onlyIfNotHandled
When true
, the specification takes effect only when all other specifications with higher priority are ruled out. This attribute is most useful for defining fallback specifications.
|
|
Type |
boolean |
Is Required |
No |
Default Value |
false |
// This ruleset defines two specifications that return content for `bis.ViewDefinition` and `bis.PhysicalModel`
// instances respectively.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["ViewDefinition"], arePolymorphic: true },
},
// The following specification is defined second so it's lower in priority. Because it has `onlyIfNotHandled` attribute,
// it's overriden by the specification above.
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["PhysicalModel"], arePolymorphic: true },
onlyIfNotHandled: true,
},
],
},
],
};
|
Result |
onlyIfNotHandled: true |
 |
onlyIfNotHandled: false |
 |
Attribute: priority
Controls the order in which specifications are handled — specification with higher priority value is handled first. If priorities are equal, the specifications are handled in the order they appear in the ruleset.
|
|
Type |
number |
Is Required |
No |
Default Value |
1000 |
// Specifications to return content for `bis.PhysicalModel` and `bis.DictionaryModel` respectively.
// The `bis.PhysicalModel` specification has lower priority so it's displayed after the
// higher priority specification.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["PhysicalModel"] },
priority: 0,
},
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["DictionaryModel"] },
priority: 1,
},
],
},
],
};

Attribute: relatedProperties
Specifications of related properties which are included in the generated content.
// This ruleset returns content for `bis.SpatialViewDefinition`, which includes all properties from related `bis.DisplayStyle` instances.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["SpatialViewDefinition"] },
relatedProperties: [
{
propertiesSource: {
relationship: { schemaName: "BisCore", className: "ViewDefinitionUsesDisplayStyle" },
direction: "Forward",
},
},
],
},
],
},
],
};
relatedProperties: [] |
relatedProperties as defined in the above ruleset |
 |
 |
Attribute: calculatedProperties
Specifications of calculated properties whose values are generated using provided ECExpressions.
// In addition to returning content for all `bis.SpatialViewDefinition` instances, this ruleset also adds a
// custom `Camera view direction` property to each instance.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["SpatialViewDefinition"] },
calculatedProperties: [
{
label: "Camera view direction",
value: 'IIf (this.pitch >= 10, "Vertical upwards", IIf (this.pitch <= -10, "Vertical downwards", "Horizontal"))',
},
],
},
],
},
],
};

Attribute: propertyCategories
Defines a list of custom categories.
Custom categories are not present in the result unless they contain at least one property. To assign a property to the category, reference its id
in PropertySpecification.categoryId
when defining propertyOverrides
.
// This ruleset places camera-related `bis.SpatialViewDefinition` properties inside a custom category.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["SpatialViewDefinition"] },
propertyCategories: [
{
id: "camera_category",
label: "Camera settings",
autoExpand: true,
},
],
propertyOverrides: [
{ name: "EyePoint", categoryId: "camera_category" },
{ name: "FocusDistance", categoryId: "camera_category" },
{ name: "IsCameraOn", categoryId: "camera_category" },
],
},
],
},
],
};

Attribute: propertyOverrides
Specifications of various property overrides that allow customizing individual properties display.
// The specification returns content for `bis.ViewDefinition` with one
// overriden property label.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["ViewDefinition"], arePolymorphic: true },
propertyOverrides: [{ name: "Model", labelOverride: "Container Model" }],
},
],
},
],
};
|
Result |
propertyOverrides: [] |
 |
propertyOverrides as defined in the above ruleset |
 |
Attribute: relatedInstances
Specifications of related instances that can be used when creating the content. There are several use cases when this is useful:
When there's a need to only load instances that have a related instance. Providing a related instance
specification with isRequired set to true
filters-out the instances that don't have the related instance.
When there's a need to filter instances by a related instance value. The alias attribute may then be used
in the instanceFilter
attribute to reference related instance property values.
When there's a need to customize content based on related instance property values. Related instance classes are included when looking for customization rules,
which allows referencing related instances and their properties in customization rule ECExpressions by their
alias.
// The specification returns content for `bis.ModelSelector` filtered by related
// `bis.SpatialViewDefinition` instance `Yaw` property value.
const ruleset: Ruleset = {
id: "example",
rules: [
{
ruleType: "Content",
specifications: [
{
specType: "ContentInstancesOfSpecificClasses",
classes: { schemaName: "BisCore", classNames: ["ModelSelector"], arePolymorphic: true },
relatedInstances: [
{
relationshipPath: { relationship: { schemaName: "BisCore", className: "SpatialViewDefinitionUsesModelSelector" }, direction: "Backward" },
alias: "relatedInstance",
},
],
instanceFilter: "relatedInstance.Yaw > 0",
},
],
},
],
};
|
Result |
SpatialViewDefinition instances |
 |
ModelSelector instances |
 |
ModelSelector instances filtered by SpatialViewDefinition.Yaw |
 |