node-red-camunda8
Version:
Camunda 8 nodes for Node-RED
65 lines (54 loc) • 2.37 kB
JavaScript
const status = require('../util/nodeStatus');
module.exports = function (RED) {
function ModifyProcessInstance(config) {
RED.nodes.createNode(this, config);
const node = this;
node.on('input', async function (msg) {
// Input validation
if (!msg.payload) {
node.error('Missing payload in message', msg);
status.error(node, 'Missing payload');
return;
}
if (!msg.payload.processInstanceKey) {
node.error('Missing processInstanceKey in payload', msg);
status.error(node, 'Missing processInstanceKey');
return;
}
if (!msg.payload.modifications) {
node.error('Missing modifications in payload', msg);
status.error(node, 'Missing modifications');
return;
}
// Validate camunda connection
const camundaConfig = RED.nodes.getNode(config.camunda);
if (!camundaConfig || !camundaConfig.zbc) {
node.error('Invalid or missing Camunda configuration', msg);
status.error(node, 'No Camunda connection');
return;
}
this.zbc = camundaConfig.zbc;
try {
const result = await this.zbc.modifyProcessInstance({
processInstanceKey: msg.payload.processInstanceKey,
activateInstructions: msg.payload.modifications.activateInstructions || [],
terminateInstructions: msg.payload.modifications.terminateInstructions || [],
});
// Add result to the existing message payload
msg.payload = {
...msg.payload,
result: result,
processInstanceModified: true,
timestamp: new Date().toISOString(),
};
node.send(msg);
status.success(node, `Process instance modified: ${msg.payload.processInstanceKey}`);
} catch (err) {
node.error(err.message, msg);
status.error(node, err.message);
node.error(err);
}
});
}
RED.nodes.registerType('modify-process-instance', ModifyProcessInstance);
};