This class is used to create Schemas in the Extensible Storage framework.
Namespace:
Autodesk.Revit.DB.ExtensibleStorage
Assembly:
RevitAPI
(in RevitAPI.dll) Version: 17.0.0.0 (17.0.484.0)
Since:
2012
Syntax
C# |
---|
|
Visual Basic |
---|
|
Visual C++ |
---|
|
Remarks
Named parameter idiom: Methods that set up the Schema return a reference to the builder so
you can invoke multiple methods in a chain
(e.g., builder.setReadAccessLevel(...).setWriteAccessLevel(...)).
Methods that add fields return a FieldBuilder instead.
Examples

// Create a data structure, attach it to a wall, populate it with data, and retrieve the data back from the wall
void StoreDataInWall(Wall wall, XYZ dataToStore)
{
using (Transaction createSchemaAndStoreData = new Transaction(wall.Document, "tCreateAndStore"))
{
createSchemaAndStoreData.Start();
SchemaBuilder schemaBuilder = new SchemaBuilder(new Guid("720080CB-DA99-40DC-9415-E53F280AA1F0"));
schemaBuilder.SetReadAccessLevel(AccessLevel.Public); // allow anyone to read the object
schemaBuilder.SetWriteAccessLevel(AccessLevel.Vendor); // restrict writing to this vendor only
schemaBuilder.SetVendorId("ADSK"); // required because of restricted write-access
schemaBuilder.SetSchemaName("WireSpliceLocation");
FieldBuilder fieldBuilder = schemaBuilder.AddSimpleField("WireSpliceLocation", typeof(XYZ)); // create a field to store an XYZ
fieldBuilder.SetUnitType(UnitType.UT_Length);
fieldBuilder.SetDocumentation("A stored location value representing a wiring splice in a wall.");
Schema schema = schemaBuilder.Finish(); // register the Schema object
Entity entity = new Entity(schema); // create an entity (object) for this schema (class)
Field fieldSpliceLocation = schema.GetField("WireSpliceLocation"); // get the field from the schema
entity.Set<XYZ>(fieldSpliceLocation, dataToStore, DisplayUnitType.DUT_METERS); // set the value for this entity
wall.SetEntity(entity); // store the entity in the element
// get the data back from the wall
Entity retrievedEntity = wall.GetEntity(schema);
XYZ retrievedData = retrievedEntity.Get<XYZ>(schema.GetField("WireSpliceLocation"), DisplayUnitType.DUT_METERS);
createSchemaAndStoreData.Commit();
}
}

' Create a data structure, attach it to a wall, populate it with data, and retrieve the data back from the wall
Private Sub StoreDataInWall(wall As Wall, dataToStore As XYZ)
Using createSchemaAndStoreData As New Transaction(wall.Document, "tCreateAndStore")
createSchemaAndStoreData.Start()
Dim schemaBuilder As New SchemaBuilder(New Guid("720080CB-DA99-40DC-9415-E53F280AA1F0"))
schemaBuilder.SetReadAccessLevel(AccessLevel.[Public])
' allow anyone to read the object
schemaBuilder.SetWriteAccessLevel(AccessLevel.Vendor)
' restrict writing to this vendor only
schemaBuilder.SetVendorId("ADSK")
' required because of restricted write-access
schemaBuilder.SetSchemaName("WireSpliceLocation")
Dim fieldBuilder As FieldBuilder = schemaBuilder.AddSimpleField("WireSpliceLocation", GetType(XYZ))
' create a field to store an XYZ
fieldBuilder.SetUnitType(UnitType.UT_Length)
fieldBuilder.SetDocumentation("A stored location value representing a wiring splice in a wall.")
Dim schema As Schema = schemaBuilder.Finish()
' register the Schema object
Dim entity As New Entity(schema)
' create an entity (object) for this schema (class)
Dim fieldSpliceLocation As Field = schema.GetField("WireSpliceLocation")
' get the field from the schema
entity.[Set](Of XYZ)(fieldSpliceLocation, dataToStore, DisplayUnitType.DUT_METERS)
' set the value for this entity
wall.SetEntity(entity)
' store the entity in the element
' get the data back from the wall
Dim retrievedEntity As Entity = wall.GetEntity(schema)
Dim retrievedData As XYZ = retrievedEntity.[Get](Of XYZ)(schema.GetField("WireSpliceLocation"), DisplayUnitType.DUT_METERS)
createSchemaAndStoreData.Commit()
End Using
End Sub