@5minds/node-red-contrib-processcube 1.1.4-develop-f12497-m0akrvxl → 1.1.4-develop-80ad6a-m0l0wxfa
Sign up to get free protection for your applications and to get access to all the features.
- package/endevent-finished-listener.html +2 -2
- package/externaltask-error.html +1 -1
- package/externaltask-event-listener.html +52 -0
- package/externaltask-event-listener.js +77 -0
- package/externaltask-input.html +1 -1
- package/externaltask-output.html +1 -1
- package/icons/endevent_finished_listener.svg +4 -0
- package/icons/externaltask_error.svg +5 -0
- package/icons/externaltask_event_listener.svg +4 -0
- package/icons/externaltask_input.svg +6 -0
- package/icons/externaltask_output.svg +6 -0
- package/icons/message_event_trigger.svg +5 -0
- package/icons/process_event_listener.svg +6 -0
- package/icons/process_start.svg +6 -0
- package/icons/processdefinition_query.svg +7 -0
- package/icons/processinstance_query.svg +6 -0
- package/icons/signal_event_trigger.svg +5 -0
- package/icons/usertask_event_listener.svg +4 -0
- package/icons/usertask_input.svg +5 -0
- package/icons/usertask_output.svg +5 -0
- package/message-event-trigger.html +1 -1
- package/package.json +3 -1
- package/process-event-listener.html +24 -2
- package/process-event-listener.js +261 -92
- package/process-start.html +1 -1
- package/processdefinition-query.html +1 -1
- package/processes/User-Task-Sample.bpmn +18 -2
- package/processinstance-query.html +1 -1
- package/signal-event-trigger.html +1 -1
- package/usertask-event-listener.html +75 -0
- package/usertask-event-listener.js +96 -0
- package/usertask-input.html +1 -1
- package/usertask-output.html +1 -1
- package/usertask-finished-listener.html +0 -45
- package/usertask-finished-listener.js +0 -68
- package/usertask-new-listener.html +0 -45
- package/usertask-new-listener.js +0 -69
@@ -0,0 +1,96 @@
|
|
1
|
+
module.exports = function (RED) {
|
2
|
+
function UserTaskEventListener(config) {
|
3
|
+
RED.nodes.createNode(this, config);
|
4
|
+
var node = this;
|
5
|
+
node.engine = RED.nodes.getNode(config.engine);
|
6
|
+
|
7
|
+
const register = async () => {
|
8
|
+
let currentIdentity = node.engine.identity;
|
9
|
+
|
10
|
+
const client = node.engine.engineClient;
|
11
|
+
|
12
|
+
if (!client) {
|
13
|
+
node.error('No engine configured.');
|
14
|
+
return;
|
15
|
+
}
|
16
|
+
|
17
|
+
let subscription;
|
18
|
+
const query = RED.util.evaluateNodeProperty(config.query, config.query_type, node);
|
19
|
+
|
20
|
+
function userTaskCallback() {
|
21
|
+
return async (userTaskNotification) => {
|
22
|
+
if (config.usertask != '' && config.usertask != userTaskNotification.flowNodeId) return;
|
23
|
+
const newQuery = {
|
24
|
+
flowNodeInstanceId: userTaskNotification.flowNodeInstanceId,
|
25
|
+
...query,
|
26
|
+
};
|
27
|
+
|
28
|
+
const matchingFlowNodes = await client.userTasks.query(newQuery, {
|
29
|
+
identity: currentIdentity,
|
30
|
+
});
|
31
|
+
|
32
|
+
if (matchingFlowNodes.userTasks && matchingFlowNodes.userTasks.length == 1) {
|
33
|
+
const userTask = matchingFlowNodes.userTasks[0];
|
34
|
+
|
35
|
+
node.send({
|
36
|
+
payload: {
|
37
|
+
flowNodeInstanceId: userTaskNotification.flowNodeInstanceId,
|
38
|
+
userTaskEvent: userTaskNotification,
|
39
|
+
userTask: userTask,
|
40
|
+
action: config.eventtype,
|
41
|
+
type: 'usertask',
|
42
|
+
},
|
43
|
+
});
|
44
|
+
}
|
45
|
+
};
|
46
|
+
}
|
47
|
+
|
48
|
+
async function subscribe() {
|
49
|
+
switch (config.eventtype) {
|
50
|
+
case 'new':
|
51
|
+
return await client.userTasks.onUserTaskWaiting(userTaskCallback(), {
|
52
|
+
identity: currentIdentity,
|
53
|
+
});
|
54
|
+
case 'finished':
|
55
|
+
return await client.userTasks.onUserTaskFinished(userTaskCallback(), {
|
56
|
+
identity: currentIdentity,
|
57
|
+
});
|
58
|
+
case 'reserved':
|
59
|
+
return await client.userTasks.onUserTaskReserved(userTaskCallback(), {
|
60
|
+
identity: currentIdentity,
|
61
|
+
});
|
62
|
+
case 'reservation-canceled':
|
63
|
+
return await client.userTasks.onUserTaskReservationCanceled(userTaskCallback(), {
|
64
|
+
identity: currentIdentity,
|
65
|
+
});
|
66
|
+
default:
|
67
|
+
console.error('no such event: ' + config.eventtype);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
if (node.engine.isIdentityReady()) {
|
72
|
+
subscription = subscribe();
|
73
|
+
}
|
74
|
+
|
75
|
+
node.engine.registerOnIdentityChanged(async (identity) => {
|
76
|
+
if (subscription) {
|
77
|
+
client.userTasks.removeSubscription(subscription, currentIdentity);
|
78
|
+
}
|
79
|
+
currentIdentity = identity;
|
80
|
+
|
81
|
+
subscription = subscribe();
|
82
|
+
});
|
83
|
+
|
84
|
+
node.on('close', async () => {
|
85
|
+
if (node.engine && node.engine.engineClient && client) {
|
86
|
+
client.userTasks.removeSubscription(subscription, currentIdentity);
|
87
|
+
}
|
88
|
+
});
|
89
|
+
};
|
90
|
+
|
91
|
+
if (node.engine) {
|
92
|
+
register();
|
93
|
+
}
|
94
|
+
}
|
95
|
+
RED.nodes.registerType('usertask-event-listener', UserTaskEventListener);
|
96
|
+
};
|
package/usertask-input.html
CHANGED
package/usertask-output.html
CHANGED
@@ -1,45 +0,0 @@
|
|
1
|
-
<script type="text/javascript">
|
2
|
-
RED.nodes.registerType('usertask-finished-listener', {
|
3
|
-
category: 'ProcessCube Events',
|
4
|
-
color: '#02AFD6',
|
5
|
-
defaults: {
|
6
|
-
name: { value: '' },
|
7
|
-
engine: { value: '', type: 'processcube-engine-config' },
|
8
|
-
multisend: { value: false },
|
9
|
-
},
|
10
|
-
inputs: 0,
|
11
|
-
outputs: 1,
|
12
|
-
icon: 'font-awesome/fa-envelope',
|
13
|
-
label: function () {
|
14
|
-
return this.name || 'usertask-finished-listener';
|
15
|
-
},
|
16
|
-
});
|
17
|
-
</script>
|
18
|
-
|
19
|
-
<script type="text/html" data-template-name="usertask-finished-listener">
|
20
|
-
<div class="form-row">
|
21
|
-
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
22
|
-
<input type="text" id="node-input-name" placeholder="Name" />
|
23
|
-
</div>
|
24
|
-
<div class="form-row">
|
25
|
-
<label for="node-input-engine"><i class="fa fa-tag"></i> Engine-URL</label>
|
26
|
-
<input type="text" id="node-input-engine" placeholder="http://engine:8000" />
|
27
|
-
</div>
|
28
|
-
</script>
|
29
|
-
|
30
|
-
<script type="text/markdown" data-help-name="usertask-finished-listener">
|
31
|
-
A node which listens for finished usertasks in the ProcessCube.
|
32
|
-
|
33
|
-
## Outputs
|
34
|
-
|
35
|
-
: flowNodeInstanceId (string): The flow node instance id of the finished usertask.
|
36
|
-
: userTaskEvent (object): The user task event object.
|
37
|
-
: action (string): The action of the event.
|
38
|
-
: type (string): The type of the event.
|
39
|
-
|
40
|
-
### References
|
41
|
-
|
42
|
-
- [The ProcessCube Developer Network](https://processcube.io) - All documentation for the ProcessCube© platform
|
43
|
-
- [Node-RED Integration in ProcessCube©](https://processcube.io/docs/node-red) - Node-RED integration in ProcessCube©
|
44
|
-
|
45
|
-
</script>
|
@@ -1,68 +0,0 @@
|
|
1
|
-
module.exports = function (RED) {
|
2
|
-
function UserTaskFinishedListener(config) {
|
3
|
-
RED.nodes.createNode(this, config);
|
4
|
-
var node = this;
|
5
|
-
node.engine = RED.nodes.getNode(config.engine);
|
6
|
-
|
7
|
-
const register = async () => {
|
8
|
-
let currentIdentity = node.engine.identity;
|
9
|
-
|
10
|
-
const client = node.engine.engineClient;
|
11
|
-
|
12
|
-
if (!client) {
|
13
|
-
node.error('No engine configured.');
|
14
|
-
return;
|
15
|
-
}
|
16
|
-
|
17
|
-
let subscription;
|
18
|
-
|
19
|
-
if (node.engine.isIdentityReady()) {
|
20
|
-
subscription = await client.userTasks.onUserTaskFinished(
|
21
|
-
(userTaskFinishedNotification) => {
|
22
|
-
node.send({
|
23
|
-
payload: {
|
24
|
-
flowNodeInstanceId: userTaskFinishedNotification.flowNodeInstanceId,
|
25
|
-
userTaskEvent: userTaskFinishedNotification,
|
26
|
-
action: 'finished',
|
27
|
-
type: 'usertask',
|
28
|
-
},
|
29
|
-
});
|
30
|
-
},
|
31
|
-
{ identity: currentIdentity },
|
32
|
-
);
|
33
|
-
}
|
34
|
-
|
35
|
-
node.engine.registerOnIdentityChanged(async (identity) => {
|
36
|
-
if (subscription) {
|
37
|
-
client.userTasks.removeSubscription(subscription, currentIdentity);
|
38
|
-
}
|
39
|
-
currentIdentity = identity;
|
40
|
-
|
41
|
-
subscription = await client.userTasks.onUserTaskFinished(
|
42
|
-
(userTaskFinishedNotification) => {
|
43
|
-
node.send({
|
44
|
-
payload: {
|
45
|
-
flowNodeInstanceId: userTaskFinishedNotification.flowNodeInstanceId,
|
46
|
-
userTaskEvent: userTaskFinishedNotification,
|
47
|
-
action: 'finished',
|
48
|
-
type: 'usertask',
|
49
|
-
},
|
50
|
-
});
|
51
|
-
},
|
52
|
-
{ identity: currentIdentity },
|
53
|
-
);
|
54
|
-
});
|
55
|
-
|
56
|
-
node.on('close', async () => {
|
57
|
-
if (node.engine && node.engine.engineClient && client) {
|
58
|
-
client.userTasks.removeSubscription(subscription, currentIdentity);
|
59
|
-
}
|
60
|
-
});
|
61
|
-
};
|
62
|
-
|
63
|
-
if (node.engine) {
|
64
|
-
register();
|
65
|
-
}
|
66
|
-
}
|
67
|
-
RED.nodes.registerType('usertask-finished-listener', UserTaskFinishedListener);
|
68
|
-
};
|
@@ -1,45 +0,0 @@
|
|
1
|
-
<script type="text/javascript">
|
2
|
-
RED.nodes.registerType('usertask-new-listener', {
|
3
|
-
category: 'ProcessCube Events',
|
4
|
-
color: '#02AFD6',
|
5
|
-
defaults: {
|
6
|
-
name: { value: '' },
|
7
|
-
engine: { value: '', type: 'processcube-engine-config' },
|
8
|
-
multisend: { value: false },
|
9
|
-
},
|
10
|
-
inputs: 0,
|
11
|
-
outputs: 1,
|
12
|
-
icon: 'font-awesome/fa-envelope-open',
|
13
|
-
label: function () {
|
14
|
-
return this.name || 'usertask-new-listener';
|
15
|
-
},
|
16
|
-
});
|
17
|
-
</script>
|
18
|
-
|
19
|
-
<script type="text/html" data-template-name="usertask-new-listener">
|
20
|
-
<div class="form-row">
|
21
|
-
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
22
|
-
<input type="text" id="node-input-name" placeholder="Name" />
|
23
|
-
</div>
|
24
|
-
<div class="form-row">
|
25
|
-
<label for="node-input-engine"><i class="fa fa-tag"></i> Engine-URL</label>
|
26
|
-
<input type="text" id="node-input-engine" placeholder="http://engine:8000" />
|
27
|
-
</div>
|
28
|
-
</script>
|
29
|
-
|
30
|
-
<script type="text/markdown" data-help-name="usertask-new-listener">
|
31
|
-
A node which listens for new usertasks in the ProcessCube.
|
32
|
-
|
33
|
-
## Outputs
|
34
|
-
|
35
|
-
: flowNodeInstanceId (string): The flow node instance id of the new usertask.
|
36
|
-
: userTaskEvent (string) : The user task event object.
|
37
|
-
: action (string) : The action of the event.
|
38
|
-
: type (string) : The type of the event.
|
39
|
-
|
40
|
-
### References
|
41
|
-
|
42
|
-
- [The ProcessCube Developer Network](https://processcube.io) - All documentation for the ProcessCube© platform
|
43
|
-
- [Node-RED Integration in ProcessCube©](https://processcube.io/docs/node-red) - Node-RED integration in ProcessCube©
|
44
|
-
|
45
|
-
</script>
|
package/usertask-new-listener.js
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
module.exports = function (RED) {
|
2
|
-
function UserTaskNewListener(config) {
|
3
|
-
RED.nodes.createNode(this, config);
|
4
|
-
var node = this;
|
5
|
-
node.engine = RED.nodes.getNode(config.engine);
|
6
|
-
|
7
|
-
const register = async () => {
|
8
|
-
const client = node.engine.engineClient;
|
9
|
-
|
10
|
-
if (!client) {
|
11
|
-
node.error('No engine configured.');
|
12
|
-
return;
|
13
|
-
}
|
14
|
-
|
15
|
-
let currentIdentity = node.engine.identity;
|
16
|
-
|
17
|
-
let subscription;
|
18
|
-
|
19
|
-
if (node.engine.isIdentityReady()) {
|
20
|
-
subscription = await client.userTasks.onUserTaskWaiting(
|
21
|
-
(userTaskWaitingNotification) => {
|
22
|
-
node.send({
|
23
|
-
payload: {
|
24
|
-
flowNodeInstanceId: userTaskWaitingNotification.flowNodeInstanceId,
|
25
|
-
userTaskEvent: userTaskWaitingNotification,
|
26
|
-
action: 'new',
|
27
|
-
type: 'usertask',
|
28
|
-
},
|
29
|
-
});
|
30
|
-
},
|
31
|
-
{ identity: currentIdentity },
|
32
|
-
);
|
33
|
-
}
|
34
|
-
|
35
|
-
node.engine.registerOnIdentityChanged(async (identity) => {
|
36
|
-
if (subscription) {
|
37
|
-
client.userTasks.removeSubscription(subscription, currentIdentity);
|
38
|
-
}
|
39
|
-
|
40
|
-
currentIdentity = identity;
|
41
|
-
|
42
|
-
subscription = await client.userTasks.onUserTaskWaiting(
|
43
|
-
(userTaskWaitingNotification) => {
|
44
|
-
node.send({
|
45
|
-
payload: {
|
46
|
-
flowNodeInstanceId: userTaskWaitingNotification.flowNodeInstanceId,
|
47
|
-
userTaskEvent: userTaskWaitingNotification,
|
48
|
-
action: 'new',
|
49
|
-
type: 'usertask',
|
50
|
-
},
|
51
|
-
});
|
52
|
-
},
|
53
|
-
{ identity: currentIdentity },
|
54
|
-
);
|
55
|
-
});
|
56
|
-
|
57
|
-
node.on('close', () => {
|
58
|
-
if (node.engine && node.engine.engineClient && client) {
|
59
|
-
client.userTasks.removeSubscription(subscription, currentIdentity);
|
60
|
-
}
|
61
|
-
});
|
62
|
-
};
|
63
|
-
|
64
|
-
if (node.engine) {
|
65
|
-
register();
|
66
|
-
}
|
67
|
-
}
|
68
|
-
RED.nodes.registerType('usertask-new-listener', UserTaskNewListener);
|
69
|
-
};
|