1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| async function visualizeProcessExecution(bpmnXml, executionHistory) { await modeler.importXML(bpmnXml); modeler.get('canvas').zoom('fit-viewport'); const canvas = modeler.get('canvas'); const registry = modeler.get('elementRegistry'); executionHistory.forEach((step, index) => { const element = registry.get(step.elementId); if (!element) return; if (step.status === 'completed') { canvas.addMarker(element, 'executed'); } else if (step.status === 'active') { canvas.addMarker(element, 'current-position'); } else if (step.status === 'failed') { canvas.addMarker(element, 'error'); } }); executionHistory.forEach((step, index) => { if (index < executionHistory.length - 1) { const nextStep = executionHistory[index + 1]; const fromEl = registry.get(step.elementId); const toEl = registry.get(nextStep.elementId); fromEl.outgoing.forEach(connection => { if (connection.target === toEl) { canvas.addMarker(connection, 'executed'); } }); } }); modeler.get('eventBus').on('element.click', (event) => { const element = event.element; const history = executionHistory.find(h => h.elementId === element.id); if (history) { showExecutionDetails({ name: element.businessObject.name, status: history.status, timestamp: history.timestamp, result: history.result }); } }); }
const bpmnXml = '...';
const executionHistory = [ { elementId: 'StartEvent_1', status: 'completed', timestamp: '10:00' }, { elementId: 'ApproveTask_1', status: 'completed', timestamp: '10:05' }, { elementId: 'Gateway_1', status: 'completed', timestamp: '10:06' }, { elementId: 'ShipTask_1', status: 'active', timestamp: '10:07' } ];
visualizeProcessExecution(bpmnXml, executionHistory);
|