Portal-Beispiele
Praktische Beispiele für ProcessCube® Portal-Anwendungen.
Beispiel 1: UserTask-Portal
Einfaches Portal für UserTask-Bearbeitung.
Flow-Struktur
Seite 1: Dashboard
[ui-page: Dashboard]
├─ [ui-text: Welcome Message]
├─ [ui-chart: Task Statistics]
└─ [ui-button: Go to Tasks]Seite 2: Task-Liste
[ui-page: Tasks]
├─ [inject: load on page open]
│ → [query-usertasks-node]
│ → [ui-table: tasks]
└─ [ui-table: row click]
→ [link-out: show-task]Seite 3: Task-Formular
[ui-page: Task Details]
├─ [link-in: show-task]
│ → [function: load task data]
│ → [ui-form: dynamic form]
└─ [ui-form: submit]
→ [finish-usertask-node]
→ [ui-notification: success]Code-Beispiele
Function: Load Task Data
const taskId = msg.payload.id;
const task = flow.get(`task_${taskId}`);
msg.payload = {
taskId: taskId,
formFields: task.formFields,
processName: task.processModelId
};
return msg;Function: Finish Task
msg.userTaskInstanceId = msg.payload.taskId;
msg.payload = {
approved: msg.payload.approved,
comment: msg.payload.comment
};
return msg;Beispiel 2: Field Service App
Mobile App für Techniker im Außendienst.
Features
- Auftrags-Liste: Offene Aufträge anzeigen
- Navigation: GPS-Navigation zum Kundenstandort
- Foto-Upload: Bilder vom Einsatzort hochladen
- Unterschrift: Digitale Unterschrift des Kunden
- Offline-Support: Arbeiten ohne Internet
Flow-Beispiel
[ui-page: Service Orders]
├─ [ui-table: orders]
├─ [ui-button: Navigate] // Opens Maps
├─ [ui-file-upload: photos]
├─ [ui-signature-pad: customer signature]
└─ [ui-button: Complete Order]
→ [finish-usertask-node]Beispiel 3: Process Monitoring Dashboard
Dashboard für Process-Überwachung.
Widgets
[ui-page: Monitoring]
├─ [ui-chart: Processes per Day]
├─ [ui-gauge: Active Processes]
├─ [ui-table: Recent Processes]
└─ [ui-chart: Average Duration]Data-Flow
[inject: every 10 seconds]
→ [query-process-instances-node]
→ [function: calculate statistics]
→ [ui-chart: update]Statistics Function:
const processes = msg.payload;
// Active Processes
msg.activeCount = processes.filter(p => p.state === 'running').length;
// Processes per Day
const today = processes.filter(p =>
new Date(p.startedAt).toDateString() === new Date().toDateString()
).length;
// Average Duration
const finished = processes.filter(p => p.state === 'finished');
msg.avgDuration = finished.reduce((sum, p) =>
sum + (new Date(p.finishedAt) - new Date(p.startedAt)), 0
) / finished.length / 1000 / 60; // in minutes
return msg;Beispiel 4: Approval Portal
Genehmigungs-Portal für Manager.
Features
- Pending Approvals: Liste offener Genehmigungen
- Details: Antrags-Details anzeigen
- Quick Actions: Approve/Reject Buttons
- Kommentare: Kommentar-Feld
- History: Genehmigungs-Historie
Flow
[ui-page: Approvals]
├─ [ui-table: pending approvals]
│ Columns: [Request, Requester, Amount, Date]
│
├─ [ui-table: row click]
│ → [function: load details]
│ → [ui-card: show details]
│
└─ [ui-button-group]
├─ [Approve] → [finish-usertask: approved=true]
└─ [Reject] → [finish-usertask: approved=false]PWA-Konfiguration
Alle Beispiele als PWA konfigurieren:
manifest.json
{
"name": "ProcessCube Portal",
"short_name": "Portal",
"start_url": "/portal",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#f7a823",
"icons": [
{
"src": "/icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icon-512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}Best Practices
- Mobile-First Design: Immer für Mobile optimieren
- Offline-Support: Service Worker für Offline-Funktionalität
- Error Handling: UI-Notifications für Fehler
- Loading States: Progress-Indicator anzeigen
- Touch-Optimierung: Große Buttons (min. 44x44px)
Nächste Schritte
- Portal-Integration - Technische Details
- Use Cases - Weitere UI-Beispiele
- Dashboard-2 Docs - UI-Komponenten