BPMN Gateway in Vue Diagram component
28 Mar 202518 minutes to read
Gateway
Gateway is used to control the flow of a process and it is represented as a diamond shape. To create a gateway, the shape property of the node should be set as gateway and the gateway property can be set with any of the appropriate gateways. The following code example illustrates how to create a BPMN Gateway.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'></ejs-diagram>
</div>
</template>
<script setup>
import { provide } from "vue";
import { DiagramComponent as EjsDiagram, BpmnDiagrams } from '@syncfusion/ej2-vue-diagrams';
const nodes = [ {
// Position of the node
offsetX: 150,
offsetY: 150,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as Gateway
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as None
gateway: {
type: 'None',
},
},
},
{
// Position of the node
offsetX: 350,
offsetY: 150,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Inclusive
gateway: {
type: 'Inclusive',
},
},
},
{
// Position of the node
offsetX: 550,
offsetY: 150,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Exclusive
gateway: {
type: 'Exclusive',
},
},
},
{
// Position of the node
offsetX: 150,
offsetY: 350,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Parallel
gateway: {
type: 'Parallel',
},
},
},
{
// Position of the node
offsetX: 350,
offsetY: 350,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as ParallelEventBased
gateway: {
type: 'ParallelEventBased',
},
},
},
{
// Position of the node
offsetX: 550,
offsetY: 350,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as EventBased
gateway: {
type: 'EventBased',
},
},
},
{
// Position of the node
offsetX: 150,
offsetY: 550,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as ExclusiveEventBased
gateway: {
type: 'ExclusiveEventBased',
},
},
},
{
// Position of the node
offsetX: 350,
offsetY: 550,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Complex
gateway: {
type: 'Complex',
},
},
}]
const width = "100%";
const height = "600px";
provide('diagram', [BpmnDiagrams]);
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style><template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent, BpmnDiagrams } from '@syncfusion/ej2-vue-diagrams';
let nodes = [ {
// Position of the node
offsetX: 150,
offsetY: 150,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as Gateway
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as None
gateway: {
type: 'None',
},
},
},
{
// Position of the node
offsetX: 350,
offsetY: 150,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Inclusive
gateway: {
type: 'Inclusive',
},
},
},
{
// Position of the node
offsetX: 550,
offsetY: 150,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Exclusive
gateway: {
type: 'Exclusive',
},
},
},
{
// Position of the node
offsetX: 150,
offsetY: 350,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Parallel
gateway: {
type: 'Parallel',
},
},
},
{
// Position of the node
offsetX: 350,
offsetY: 350,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as ParallelEventBased
gateway: {
type: 'ParallelEventBased',
},
},
},
{
// Position of the node
offsetX: 550,
offsetY: 350,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as EventBased
gateway: {
type: 'EventBased',
},
},
},
{
// Position of the node
offsetX: 150,
offsetY: 550,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as ExclusiveEventBased
gateway: {
type: 'ExclusiveEventBased',
},
},
},
{
// Position of the node
offsetX: 350,
offsetY: 550,
// Size of the node
width: 100,
height: 100,
//Sets type as Bpmn and shape as event
shape: {
type: 'Bpmn',
shape: 'Gateway',
//Sets type of the gateway as Complex
gateway: {
type: 'Complex',
},
},
}]
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "600px",
nodes: nodes
}
},
provide: {
diagram: [BpmnDiagrams]
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>NOTE
By default, the
gatewaywill be set as none.
There are several types of gateways as tabulated:
| Shape | Image |
|---|---|
| Exclusive | ![]() |
| Parallel | ![]() |
| Inclusive | ![]() |
| Complex | ![]() |
| EventBased | ![]() |
| ExclusiveEventBased | ![]() |
| ParallelEventBased | ![]() |






