@5minds/node-red-contrib-processcube 0.11.0-feature-1a3680-lyc1y00u → 0.11.0-feature-34fec2-lydislpd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2785,6 +2785,7 @@
2785
2785
  "engine": "d042a4c68f51d6ab",
2786
2786
  "query": "{\"flowNodeId\":\"PlaceAnOrderUserTask\"}",
2787
2787
  "query_type": "json",
2788
+ "only_for_new": true,
2788
2789
  "x": 350,
2789
2790
  "y": 160,
2790
2791
  "wires": [
@@ -2845,8 +2846,8 @@
2845
2846
  "z": "0825fee24edbf04b",
2846
2847
  "name": "",
2847
2848
  "pauseType": "delay",
2848
- "timeout": "1",
2849
- "timeoutUnits": "milliseconds",
2849
+ "timeout": "5",
2850
+ "timeoutUnits": "seconds",
2850
2851
  "rate": "1",
2851
2852
  "nbRateUnits": "1",
2852
2853
  "rateUnits": "second",
@@ -2856,7 +2857,7 @@
2856
2857
  "drop": false,
2857
2858
  "allowrate": false,
2858
2859
  "outputs": 1,
2859
- "x": 350,
2860
+ "x": 340,
2860
2861
  "y": 240,
2861
2862
  "wires": [
2862
2863
  [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5minds/node-red-contrib-processcube",
3
- "version": "0.11.0-feature-1a3680-lyc1y00u",
3
+ "version": "0.11.0-feature-34fec2-lydislpd",
4
4
  "license": "MIT",
5
5
  "description": "Node-RED nodes for ProcessCube",
6
6
  "authors": [
@@ -45,7 +45,7 @@
45
45
  "UserTaskFinishedListener": "usertask-finished-listener.js",
46
46
  "UserTaskInput": "usertask-input.js",
47
47
  "UserTaskOutput": "usertask-output.js",
48
- "WaitForUsertask": "wait_for_usertask.js"
48
+ "WaitForUsertask": "wait-for-usertask.js"
49
49
  }
50
50
  },
51
51
  "dependencies": {
@@ -6,7 +6,8 @@
6
6
  name: {value: ""},
7
7
  engine: {value: "", type: "processcube-engine-config"},
8
8
  query: {value: "payload"},
9
- query_type: {value: "msg"}
9
+ query_type: {value: "msg"},
10
+ only_for_new: {value: false}
10
11
  },
11
12
  inputs: 1,
12
13
  outputs: 1,
@@ -44,6 +45,13 @@
44
45
  <label for="node-input-query"><i class="fa fa-tag"></i> Query</label>
45
46
  <input type="text" id="node-input-query">
46
47
  </div>
48
+ <div class="form-row" style="display:flex; margin-bottom: 3px;">
49
+ <label for="node-input-only_for_new" style="vertical-align:top"><i class="fa fa-list-alt"></i> Only for new</label>
50
+ <div>
51
+ <input type="checkbox" checked id="node-input-only_for_new" style="display: inline-block; width: auto; margin: 0px 0px 0px 4px;">
52
+ <label style="width:auto" for="node-input-multisend">Trigger only for new user task or *checked* also for old ones?</label>
53
+ </div>
54
+ </div>
47
55
  </script>
48
56
 
49
57
  <script type="text/markdown" data-help-name="wait-for-usertask">
@@ -59,7 +67,8 @@ Waiting for Usertasks of the connected ProcessCube Engine.
59
67
 
60
68
  ### Details
61
69
 
62
- `msg.payload` or a constant json to filter the UserTasks for Waiting for
70
+ - `msg.payload` or a constant json to filter the UserTasks for Waiting for
71
+ - `Only for new` will trigger only for new UserTasks if checked and also for old ones if not checked.
63
72
 
64
73
  ### References
65
74
 
@@ -0,0 +1,82 @@
1
+ const process = require('process');
2
+
3
+ const engine_client = require('@5minds/processcube_engine_client');
4
+ const { userInfo } = require('os');
5
+
6
+ module.exports = function (RED) {
7
+ function WaitForUsertask(config) {
8
+ RED.nodes.createNode(this, config);
9
+ var node = this;
10
+ var nodeContext = node.context();
11
+
12
+ this.engine = this.server = RED.nodes.getNode(config.engine);
13
+
14
+ const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
15
+
16
+ var client = nodeContext.get('client');
17
+
18
+ if (!client) {
19
+ nodeContext.set('client', new engine_client.EngineClient(engineUrl));
20
+ client = nodeContext.get('client');
21
+ }
22
+
23
+ node.on("close", async () => {
24
+ if (client != null) {
25
+ client.dispose();
26
+ client = null;
27
+ }
28
+ });
29
+
30
+ node.on('input', async function (msg) {
31
+
32
+ const query = RED.util.evaluateNodeProperty(config.query, config.query_type, node, msg)
33
+
34
+ const sub = await client.userTasks.onUserTaskWaiting(async (userTaskWaitingNotification) => {
35
+
36
+ const newQuery = {
37
+ 'flowNodeInstanceId': userTaskWaitingNotification.flowNodeInstanceId,
38
+ ...query
39
+ };
40
+
41
+ const matchingFlowNodes = await client.userTasks.query(newQuery);
42
+
43
+ if (matchingFlowNodes.userTasks && matchingFlowNodes.userTasks.length == 1) {
44
+ const userTask = matchingFlowNodes.userTasks[0];
45
+
46
+ msg.payload = { userTask: userTask };
47
+ node.send(msg);
48
+ } else {
49
+ }
50
+
51
+ // remove subscription
52
+ client.userTasks.removeSubscription(sub);
53
+ });
54
+
55
+ console.debug('Handling old userTasks config.only_for_new', config.only_for_new);
56
+
57
+ if (config.only_for_new === false) {
58
+ // only check suspended user tasks
59
+ const suspendedQuery = {
60
+ 'state': 'suspended',
61
+ ...query
62
+ };
63
+
64
+ const matchingFlowNodes = await client.userTasks.query(suspendedQuery);
65
+
66
+ if (matchingFlowNodes.userTasks && matchingFlowNodes.userTasks.length >= 1) {
67
+ const userTask = matchingFlowNodes.userTasks[0];
68
+
69
+ msg.payload = { userTask: userTask };
70
+ node.send(msg);
71
+
72
+ // remove subscription
73
+ client.userTasks.removeSubscription(sub);
74
+ } else {
75
+ // let the *sub* be active
76
+
77
+ }
78
+ }
79
+ });
80
+ }
81
+ RED.nodes.registerType("wait-for-usertask", WaitForUsertask);
82
+ }
@@ -1,52 +0,0 @@
1
- const process = require('process');
2
-
3
- const engine_client = require('@5minds/processcube_engine_client');
4
-
5
- module.exports = function (RED) {
6
- function WaitForUsertask(config) {
7
- RED.nodes.createNode(this, config);
8
- var node = this;
9
- let client = null;
10
-
11
- this.engine = this.server = RED.nodes.getNode(config.engine);
12
-
13
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
-
15
- node.on("close", async () => {
16
- if (client != null) {
17
- client.dispose();
18
- client = null;
19
- }
20
- });
21
-
22
- node.on('input', function (msg) {
23
-
24
- const query = RED.util.evaluateNodeProperty(config.query, config.query_type, node, msg)
25
-
26
- client = new engine_client.EngineClient(engineUrl);
27
- client.userTasks.onUserTaskWaiting((userTaskWaitingNotification) => {
28
-
29
- query['flowNodeInstanceId'] = userTaskWaitingNotification.flowNodeInstanceId;
30
-
31
- client.userTasks.query(query).then((matchingFlowNodes) => {
32
-
33
- if (matchingFlowNodes.userTasks && matchingFlowNodes.userTasks.length == 1) {
34
- userTask = matchingFlowNodes.userTasks[0];
35
-
36
- msg.payload = { userTask: userTask };
37
- node.send(msg);
38
- } else {
39
- // do nothing, cause we are waiting for a specific user task
40
- }
41
-
42
- // dispose the client
43
- if (client != null) {
44
- client.dispose();
45
- client = null;
46
- }
47
- });
48
- });
49
- });
50
- }
51
- RED.nodes.registerType("wait-for-usertask", WaitForUsertask);
52
- }