System Designer

System Designer

  • Languages iconΕλληνικά
    • English
    • Português (Brasil)
    • Svenska
    • 繁體中文
    • Help Translate
  • SUPPORT
  • GITHUB

›Guides

Introduction

  • What is System Designer?
  • What is Design First?
  • Quick Start
  • Quick Start in videos

Guides

  • Installation
  • Create a System
  • Create a Schema
  • Edit a model
  • Create a Behavior
  • Create a Type
  • Create a Component
  • Run your System
  • Export a System
  • Import a System
  • Generate a diagram
  • Sync your systems with GitHub
  • Design a remote client system
  • Design a remote server system
  • Manage Extensions
  • Extend System Designer
  • Shortcuts

Tutorials

  • List of Examples
  • Bundle your CSS
  • Bundle your JavaScript
  • Δέσμευση HTML
  • Test a server-side application
  • Create a NPM module
  • Create a website
  • Listen to a model event
  • Listen to a data store event
  • Send messages
  • Send messages to other systems
  • Create an extension
  • Generate a model from a JSON file
  • Create a Graph system

Articles

  • Άρθρα σχετικά με το έργο

About

  • Who is behind System Designer?
  • Privacy Policy
  • License
Translate

Create a Behavior

A behavior is an action that is executed when we change the state of a component or invoke one of its method.

In a behavior you can use all the properties, links, collections, methods or events that your have defined for the current model. You invoke this methods on this object that represents your current component.

Behavior creation

To create a behavior in System Designer:

  • click on the Behaviors tab,
  • select a system, a model or a component on the right panel,
  • click on the '+' button on the left toolbar,
  • a dialog is shown,
  • select a state,
  • then click on Create button,
  • a new behavior is now created and appears in the Behaviors list:

Image Alt

What is a state?

A state is an event, a method or a change of a property of the model.

Why some behaviors are already there?

When you define a method for a schema, System Designer generates by default their behaviors.

Behavior edition

  • click on a behavior,
  • an editor will open the content of the behavior,
  • you can implement now your behavior:

Image Alt

Use a property

When you define in the schema a property, you have access to it on the component. For example, if you have added in the schema:

{
  "_id": "fff15dad-7b8d-4a16-8de8-0c8890f75550",
  "_name": "Jedi",
  "name": "property"
}

You can directly use it in your code:

// get the value
this.name();

// set a value
this.name('luke');

Model properties are exposed as methods

For every property set in the model, there is a method to get / get its value.

Use a link

When you define in the schema a link, you have access to it on the component. For example, if you have added in the schema:

{
  "_id": "fff15dad-7b8d-4a16-8de8-0c8890f75550",
  "_name": "Jedi",
  "father": "link"
}

You can directly use it in your code:

// get the value of the link
this.father();

// get a component
const vader = this.require('vader');

// set the link value with the component
this.father(vader);

Use a collection

When you define in the schema a collection, you have access to it on the component. For example, if you have added in the schema:

{
  "_id": "fff15dad-7b8d-4a16-8de8-0c8890f75550",
  "_name": "Jedi",
  "children": "collection"
}

You can directly use it in your code:

// get collection value

// get all the collection
// it will be an array of components
this.children();

// get the firt element of the collection,
// a component
this.children(0);

// set collection value

// init the collection
this.children([]);

// get a component
const vader = this.require('vader');

// add the component at the first place of the collection
this.children(0, vader);

// add the component at the last place of the collection
this.children().push(vader);

Use a method

When you define in the schema a method, you have access to it on the component. For example, if you have added in the schema:

{
  "_id": "fff15dad-7b8d-4a16-8de8-0c8890f75550",
  "_name": "Jedi",
  "fullName": "method"
}

You can directly use it in your code:

// invoke the method
this.fullName();

Use an event

When you define in the schema a event, you have access to it on the component. For example, if you have added in the schema:

{
  "_id": "fff15dad-7b8d-4a16-8de8-0c8890f75550",
  "_name": "Jedi",
  "changed": "event"
}

You can directly use it in your code:

// trigger an event
this.changed();

Use _Component class APIs

By default, your component inherits from _Component model, so you can use:

  • this.id(): to get the id of the component,
  • this.destroy(): to destroy a component (you can override this method for your needs) and
  • this.require(id : string) : _Component: to require a component.
// require a component
this.require('luke').name();

Call a parent method

In certain cases, you will need to call the parent method in your code. To do it just require the parent class and pass the context as first parameter. Example:

// call fullName method of Person with current context
this.require('Person').fullName(this);

Use logger component APIS

You can require the logger component to log messages. You can use:

  • this.require('logger').debug(msg: any): to log a debug message,
  • this.require('logger').info(msg: any): to a log an information message,
  • this.require('logger').warn(msg: any): to a log a warning and
  • this.require('logger').error(msg: any): to a log an error.

You can also specify the level of your logs:

  • this.require('logger').level(level: ['off', 'debug', 'info', 'warn', 'error']): set a level for your logs.
// log an information message
this.require('logger').info('this is an message');

Use db component APIS

All the components are stored at runtime in a data store that you can access with System Runtime APIs. You can use them in your behaviors by requiring the db component.

Let's imagine you have created a Person schema and that you want to get the number of person component created:

  • require the db component,
  • call collections method to get all the collections of models,
  • get Person collection and
  • call count method on this collection.
// get the number of created components
this.require('db').collections().Person.count();

You can use all these APIs on a collection:

  • count(): number: count the number of created components,
  • find(query: object): find components with a query,
this.require('db').collections().Person.find({
  'firstName': 'Luke'  
});
  • insert(component: object): create a component,
this.require('db').collections().Person.insert({
  '_id': 'luke',
  'firstName': 'Luke'  
});
  • update(query: object, update: object): update a component and
this.require('db').collections().Person.update({
  '_id': 'luke' 
}, {
  'firstName': 'Luke'
});
  • remove(query: object): delete a component.
this.require('db').collections().Person.remove({
  '_id': 'luke' 
});

For more information go to the System Runtime documentation

Advanced mode

First, you need to activate advanced mode. To do so, go to System Designer configuration panel and click on Advanced mode checkbox. Then you a new tab called Behavior will appear when you edit a behavior. Click on this tab to override some internal values for the current behavior.

Image Alt

You can for example

  • enable the use of internal APIs with useCoreAPI property or
  • avoid the exportation of the method with core property.

You will find here the list of internal APIS that you can use.

← Edit a modelCreate a Type →
  • Behavior creation
  • Behavior edition
  • Use a property
  • Use a link
  • Use a collection
  • Use a method
  • Use an event
  • Use _Component class APIs
  • Call a parent method
  • Use logger component APIS
  • Use db component APIS
  • Advanced mode
System Designer is distributed under Apache License 2.0 - Copyright © 2024 Erwan Carriou