@5minds/processcube_app_sdk 8.2.3-develop-17340a-mlmezagc → 8.2.3
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.
- package/README.md +0 -88
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,94 +46,6 @@ Es können nur Komponenten und Funktionen importiert werden, die im Browser funk
|
|
|
46
46
|
import { DynamicLink } from '@5minds/processcube_app_sdk/client';
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
### External Tasks
|
|
50
|
-
|
|
51
|
-
External Tasks ermöglichen es, Logik in einer Next.js App auszuführen, die von der ProcessCube Engine als Aufgabe vergeben wird. Dazu wird eine Datei `external_task.ts` (oder `.js`) im `app/`-Verzeichnis der Next.js App angelegt. Der Verzeichnispfad bestimmt das Topic, unter dem die Engine den Task erkennt — z.B. wird `app/order/process/external_task.ts` zum Topic `order/process`.
|
|
52
|
-
|
|
53
|
-
Die External Tasks werden automatisch erkannt und als eigene Worker-Prozesse gestartet, wenn `useExternalTasks: true` in der SDK-Konfiguration gesetzt ist:
|
|
54
|
-
|
|
55
|
-
```javascript
|
|
56
|
-
// next.config.js
|
|
57
|
-
const { withApplicationSdk } = require('@5minds/processcube_app_sdk/server');
|
|
58
|
-
|
|
59
|
-
module.exports = withApplicationSdk({
|
|
60
|
-
applicationSdk: {
|
|
61
|
-
useExternalTasks: true,
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
#### Handler-Signatur
|
|
67
|
-
|
|
68
|
-
Der Handler wird als `default export` exportiert und erhält bis zu drei Parameter:
|
|
69
|
-
|
|
70
|
-
```typescript
|
|
71
|
-
export default async function handleExternalTask(
|
|
72
|
-
payload: any, // Prozess-Variablen
|
|
73
|
-
task: ExternalTask<any>, // Task-Metadaten (optional)
|
|
74
|
-
signal: AbortSignal, // Abort-Signal (optional)
|
|
75
|
-
) {
|
|
76
|
-
// Aufgabe bearbeiten
|
|
77
|
-
return { result: 'done' };
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Der Rückgabewert wird als Ergebnis an die Engine zurückgegeben und steht im Prozess als Variable zur Verfügung.
|
|
82
|
-
|
|
83
|
-
#### Konfiguration
|
|
84
|
-
|
|
85
|
-
Über einen benannten `config`-Export können Worker-Einstellungen angepasst werden:
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
import { ExternalTaskConfig } from '@5minds/processcube_app_sdk/server';
|
|
89
|
-
|
|
90
|
-
export const config: ExternalTaskConfig = {
|
|
91
|
-
lockDuration: 5000, // Lock-Dauer in ms (default: 30000)
|
|
92
|
-
maxTasks: 5, // Gleichzeitige Tasks (default: 10)
|
|
93
|
-
};
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Die `lockDuration` bestimmt, wie oft der Worker der Engine signalisiert, dass er noch aktiv ist. Der Standardwert ist 30 Sekunden.
|
|
97
|
-
|
|
98
|
-
#### Abort-Handling bei Boundary Events
|
|
99
|
-
|
|
100
|
-
Wenn ein Boundary Event (z.B. ein Timer) einen External Task abbricht, wird das `AbortSignal` ausgelöst. Damit der Worker schnell auf den Abbruch reagiert, sollte die `lockDuration` reduziert werden — die Engine kann den Abbruch erst beim nächsten Lock-Renewal mitteilen.
|
|
101
|
-
|
|
102
|
-
| lockDuration | Max. Verzögerung bis Abort |
|
|
103
|
-
| --------------- | -------------------------- |
|
|
104
|
-
| 30000 (default) | bis zu 30 Sekunden |
|
|
105
|
-
| 5000 | bis zu 5 Sekunden |
|
|
106
|
-
| 1000 | bis zu 1 Sekunde |
|
|
107
|
-
|
|
108
|
-
Vollständiges Beispiel mit Abort-Handling:
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
import { ExternalTaskConfig } from '@5minds/processcube_app_sdk/server';
|
|
112
|
-
|
|
113
|
-
export const config: ExternalTaskConfig = {
|
|
114
|
-
lockDuration: 5000,
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
export default async function handleExternalTask(payload: any, _task: any, signal: AbortSignal) {
|
|
118
|
-
signal.addEventListener(
|
|
119
|
-
'abort',
|
|
120
|
-
() => {
|
|
121
|
-
console.log('Task wurde durch Boundary Event abgebrochen');
|
|
122
|
-
},
|
|
123
|
-
{ once: true },
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
// Signal vor und nach asynchronen Operationen prüfen
|
|
127
|
-
if (signal.aborted) return;
|
|
128
|
-
|
|
129
|
-
const result = await doWork(payload);
|
|
130
|
-
|
|
131
|
-
if (signal.aborted) return;
|
|
132
|
-
|
|
133
|
-
return result;
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
49
|
## Wie kann ich das Projekt aufsetzen?
|
|
138
50
|
|
|
139
51
|
### Setup/Installation
|