A process scripting language that makes developers and business experts happier!
Factscript is a process scripting language designed to make developers and business experts happier. It is currently implemented in pure Kotlin for the Java platform and available as a Tech Preview. Factscript is an "internal" domain specific language specialized to express non-atomic, multi-step business or software processes directly as code. Factscript allows to define the process flow in a type-safe manner and include all data aspects needed to control the flow. The scripts can be automatically rendered as standardized visual diagrams "on the fly" and are directly executable, e.g. with a workflow engine.
Factscript is a process scripting language designed to make developers and business experts happier. It is currently implemented in pure Kotlin for the Java platform and available as a Tech Preview. Factscript is an "internal" domain specific language specialized to express non-atomic, multi-step business or software processes directly as code. Factscript allows to define the process flow in a type-safe manner and include all data aspects needed to control the flow. The scripts can be automatically rendered as standardized visual diagrams "on the fly" and are directly executable, e.g. with a workflow engine.
A Factscript defines the lifecycle of a participant (process entity) 'Fulfillment', which will over time walk through a series of incoming and outgoing messages:
'2020-12-01 09:45:17' incoming 'FulfillOrder' command -> observed by [new] 'Fulfillment' participant [123]
'2020-12-01 09:45:17' outgoing 'FulfillmentOrderPlaced' event <- produced by 'Fulfillment' participant [123]
'2020-12-01 09:45:17' outgoing 'FetchGoods' command <- produced by 'Fulfillment' participant [123]
'2020-12-01 09:45:17' outgoing 'RetrievePayment' command <- produced by 'Fulfillment' participant [123]
'2020-12-01 09:46:01' incoming 'PaymentRetrieved' event -> observed by 'Fulfillment' participant [123]
'2020-12-01 12:15:03' incoming 'GoodsFetched' event -> observed by 'Fulfillment' participant [123]
'2020-12-01 12:15:03' outgoing 'OrderReadyToBeShipped' event <- produced by 'Fulfillment' participant [123]
'2020-12-01 12:15:03' outgoing 'ShipParcel' command <- produced by 'Fulfillment' participant [123]
'2020-12-02 17:39:20' incoming 'ParcelShipped' event -> observed by 'Fulfillment' participant [123]
'2020-12-02 17:39:20' outgoing 'OrderFulfilled' event <- produced by 'Fulfillment' participant [123]
By the way: the underlying principle of treating all incoming and outgoing messages as facts of a participant’s subjective history is what gave Factscript its name.
The concept and design of Factscript as well as its implementation in Kotlin is done by Martin Schimak, plexiti GmbH.
Factscript and its scientific environment is analyzed and described by Maxim Vidgof, Philipp Waibel and Jan Mendling, WU.
Factscript execution environments are extended and supported by Alex Seik and Peter Queteschiner, PHACTUM GmbH.