Writer Methods
Complete list of methods available on the writer returned by modelsdk.OpenForWriting().
Accessing the Reader
The writer embeds a reader for querying the project:
writer, _ := modelsdk.OpenForWriting("/path/to/MyApp.mpr")
defer writer.Close()
reader := writer.Reader()
modules, _ := reader.ListModules()
Modules
writer.CreateModule(module) // error -- create a new module
writer.UpdateModule(module) // error -- update module metadata
writer.DeleteModule(id) // error -- delete a module and its contents
Entities
writer.CreateEntity(domainModelID, entity) // error -- add entity to domain model
writer.UpdateEntity(domainModelID, entity) // error -- update an existing entity
writer.DeleteEntity(domainModelID, entityID) // error -- remove entity from domain model
Attributes
writer.AddAttribute(domainModelID, entityID, attribute) // error -- add attribute to entity
Associations
writer.CreateAssociation(domainModelID, association) // error -- create association
writer.DeleteAssociation(domainModelID, associationID) // error -- remove association
Microflows and Nanoflows
writer.CreateMicroflow(microflow) // error -- create a new microflow
writer.UpdateMicroflow(microflow) // error -- update an existing microflow
writer.DeleteMicroflow(id) // error -- delete a microflow
writer.CreateNanoflow(nanoflow) // error -- create a new nanoflow
writer.UpdateNanoflow(nanoflow) // error -- update an existing nanoflow
writer.DeleteNanoflow(id) // error -- delete a nanoflow
Pages and Layouts
writer.CreatePage(page) // error -- create a new page
writer.UpdatePage(page) // error -- update an existing page
writer.DeletePage(id) // error -- delete a page
writer.CreateLayout(layout) // error -- create a new layout
writer.UpdateLayout(layout) // error -- update an existing layout
writer.DeleteLayout(id) // error -- delete a layout
Enumerations and Constants
writer.CreateEnumeration(enumeration) // error -- create a new enumeration
writer.CreateConstant(constant) // error -- create a new constant
Helper Functions
The modelsdk package provides helper functions for creating common types:
// Entities
modelsdk.NewEntity(name) // *Entity -- persistent entity
modelsdk.NewNonPersistableEntity(name) // *Entity -- non-persistent entity
// Attributes
modelsdk.NewStringAttribute(name, length) // *Attribute
modelsdk.NewIntegerAttribute(name) // *Attribute
modelsdk.NewDecimalAttribute(name) // *Attribute
modelsdk.NewBooleanAttribute(name) // *Attribute
modelsdk.NewDateTimeAttribute(name, localize) // *Attribute
modelsdk.NewEnumerationAttribute(name, enumID) // *Attribute
modelsdk.NewAutoNumberAttribute(name) // *Attribute
// Associations
modelsdk.NewAssociation(name, parentID, childID) // *Association -- Reference (1:N)
modelsdk.NewReferenceSetAssociation(name, parentID, childID) // *Association -- ReferenceSet (M:N)
// Flows
modelsdk.NewMicroflow(name) // *Microflow
modelsdk.NewNanoflow(name) // *Nanoflow
// Pages
modelsdk.NewPage(name) // *Page
// IDs
modelsdk.GenerateID() // string -- new UUID v4
Example: Create an Entity with Attributes
writer, _ := modelsdk.OpenForWriting("/path/to/MyApp.mpr")
defer writer.Close()
reader := writer.Reader()
modules, _ := reader.ListModules()
dm, _ := reader.GetDomainModel(modules[0].ID)
// Create entity
customer := modelsdk.NewEntity("Customer")
customer.Documentation = "Customer master data"
customer.Location = model.Point{X: 100, Y: 200}
writer.CreateEntity(dm.ID, customer)
// Add attributes
writer.AddAttribute(dm.ID, customer.ID, modelsdk.NewStringAttribute("Name", 200))
writer.AddAttribute(dm.ID, customer.ID, modelsdk.NewStringAttribute("Email", 254))
writer.AddAttribute(dm.ID, customer.ID, modelsdk.NewBooleanAttribute("IsActive"))
writer.AddAttribute(dm.ID, customer.ID, modelsdk.NewDateTimeAttribute("CreatedDate", true))
// Create association
order := modelsdk.NewEntity("Order")
writer.CreateEntity(dm.ID, order)
assoc := modelsdk.NewAssociation("Customer_Order", customer.ID, order.ID)
writer.CreateAssociation(dm.ID, assoc)
Warning: Always back up your
.mprfile before modifying it. The writer operates directly on the SQLite database.