State Machine
Prerequisites
In order to use the state machine functionality you have to set the
corresponding server setting: EXT_ENTITY_STATE=ENABLED
.
Also, a few RecordTypes and Properties are required. You can use the
script setup_state_model.py
to create those or you may have a look at it to see what is needed (setup_state_data_model
function).
Defining the State Machine
Now you are setup to create your own state machine. You can define States and Transitions
and bundle it all to a StateModel. The above mentioned setup_state_model.py
script defines
a publication cycle with the state “Unpublished”, “UnderReview” and “Published”.
Again, the setup_state_model.py
script provides orientation on how this
can be setup (setup_model_publication_cycle
function).
Note, that you can provide ACL to the state definition which will be applied to an entity once the state is reached. This is for example useful to change the visibility depending on a state change.
If you assign a state to a RecordType, this state will be the initial state of Records that have that parent. For example by executing:
rt = db.RecordType("Article").retrieve()
rt.state = db.State(name="UnPublished", model="Publish Life-cycle")
rt.update()