BPMN 2.0 Modeling, Execution and Presistence, an open source Workflow Server for Node.js
This package is designed specifically for Node.js and TypeScript
A web based modeler is included based on http://bpmn.io , models definitions are saved at your server
bpmn-server provides an bpmnEngine to execute your workflow definition supporting all of BPMN 2.0 elements with advanced extensions
bpmn-server is highly scalable solution, allow you to run multiple nodeJS either in same machine or in a distributed mode against same MongoDB
provides an environment to presist execution Instances while running and communicate with your application.
Applications can monitor and communicate to Instances whether they are running or offline, allowing user interface to query and process Workflow steps
Since instances are saved in MongoDB you can easily query your instances (running or completed)
Included is a sample web application (running Node.js and Express.js) to allow you to visualize your workflow
This package requires Node.js and an access to MongoDB () if you don't have MongoDB already installed you can create a free cloud account here
$ mkdir myBPMN
$ cd myBPMN
$ npm install bpmn-server
Copy demo app into local folder
$ cp node_modules/bpmn-server/WebApp/. ./ -r
Windows:
xcopy /e /i /s /y node_modules\bpmn-server\WebApp\*.* .
Edit .env file to have MongoDB point to your server or free cloud account
API_KEY=12345
MONGO_DB_URL=mongodb://0.0.0.0:27017/bpmn <---- point to your MONGODB
MONGO_DB_NAME=bpmn
DEFINITIONS_PATH="./processes/"
SESSION_SECRET=omni-secret
SERVER_ID=PRIMARY
Run database setup
node setup.js
npm run start
Console will display:
bpmn-server WebApp.ts version 1.4.0
MongoDB URL mongodb://0.0.0.0:27017/bpmn
db connection open
App is running at http://localhost:3000 in development mode
Press CTRL-C to stop
Use your browser to view the bpmn-server running
$ npm update bpmn-server
a full demo site is available @ http://bpmn.omniworkflow.com
const server = new BPMNServer(configuration, logger);
let response = await server.execute('Buy Used Car');
// let us get the items
const items = response.items.filter(item => {
return (item.status == 'wait');
});
items.forEach(item => {
console.log(` waiting for <${item.name}> -<${item.elementId}> id: <${item.id}> `);
});
console.log('Invoking Buy');
response = await server.invoke({instanceId: response.execution.id, elementId: 'task_Buy' },
{ model: 'Thunderbird', needsRepairs: false, needsCleaning: false });
console.log("Ready to drive");
response = await server.invoke({ instanceId: response.execution.id, elementId: 'task_Drive' });
console.log(`that is it!, process is now complete status=<${response.execution.status}>`)
for more complete examples see Examples
This project is licensed under the terms of the MIT license.
The bpmn-server resides upon the excellent library bpmn-io/bpmn-moddle developed by bpmn.io
The bpmn-server is inspired by the library bpmn-engine