Functions
Das ProcessCube® App-SDK bietet Server-Side Helper Functions für die Interaktion mit der ProcessCube® Engine.
Übersicht
Alle Functions werden aus dem Server-Pfad importiert und können in Next.js Server Components und Server Actions verwendet werden.
import {
getWaitingUserTasks,
finishUserTask,
startProcessInstance
} from '@5minds/processcube_app_sdk/server';Verfügbare Functions
User Task Functions
getWaitingUserTasks
Ruft alle wartenden User Tasks ab.
const { userTasks } = await getWaitingUserTasks();getUserTaskByFlowNodeInstanceId
Ruft eine spezifische User Task ab.
const userTask = await getUserTaskByFlowNodeInstanceId(flowNodeInstanceId);finishUserTask
Schließt eine User Task ab.
await finishUserTask({
flowNodeInstanceId: 'task-123',
userTaskResult: { approved: true }
});Process Functions
getProcessModels
Ruft alle verfügbaren Prozessmodelle ab.
const processModels = await getProcessModels();startProcessInstance
Startet eine Prozessinstanz.
const result = await startProcessInstance({
processModelId: 'OrderProcess',
startEventId: 'StartEvent_1',
initialToken: { orderId: '12345' }
});getProcessInstancesByCorrelationId
Ruft Prozessinstanzen nach Correlation ID ab.
const instances = await getProcessInstancesByCorrelationId(correlationId);Correlation Functions
getActiveCorrelations
Ruft alle aktiven Correlations ab.
const correlations = await getActiveCorrelations();Function Groups
| Gruppe | Functions | Beschreibung |
|---|---|---|
| User Tasks | getWaitingUserTasks, finishUserTask, getUserTaskByFlowNodeInstanceId | User Task Management |
| Processes | getProcessModels, startProcessInstance, getProcessInstancesByCorrelationId | Prozess-Verwaltung |
| Correlations | getActiveCorrelations | Correlation Management |
| External Tasks | getAvailableExternalTasks, finishExternalTask | External Task Handling |
Verwendung
In Server Components
app/tasks/page.tsx
import { getWaitingUserTasks } from '@5minds/processcube_app_sdk/server';
export default async function TasksPage() {
const { userTasks } = await getWaitingUserTasks();
return (
<div>
<h1>Meine Aufgaben</h1>
{userTasks.map((task) => (
<div key={task.flowNodeInstanceId}>
{task.flowNodeName}
</div>
))}
</div>
);
}In Server Actions
app/actions.ts
'use server';
import { finishUserTask } from '@5minds/processcube_app_sdk/server';
import { revalidatePath } from 'next/cache';
export async function completeTask(flowNodeInstanceId: string, result: any) {
await finishUserTask({
flowNodeInstanceId,
userTaskResult: result
});
revalidatePath('/tasks');
}In API Routes
app/api/tasks/route.ts
import { getWaitingUserTasks } from '@5minds/processcube_app_sdk/server';
export async function GET() {
const tasks = await getWaitingUserTasks();
return Response.json(tasks);
}TypeScript Support
Alle Functions sind vollständig typisiert:
import type {
UserTask,
ProcessModel,
ProcessInstance
} from '@5minds/processcube_app_sdk/server';
const tasks: UserTask[] = await getWaitingUserTasks();
const processes: ProcessModel[] = await getProcessModels();Error Handling
Behandeln Sie Fehler mit try-catch:
import { finishUserTask } from '@5minds/processcube_app_sdk/server';
try {
await finishUserTask({
flowNodeInstanceId: taskId,
userTaskResult: result
});
} catch (error) {
console.error('Fehler beim Abschließen der Task:', error);
throw error;
}Best Practices
1. Server Components bevorzugen
Verwenden Sie Server Components statt Client-Side Fetching:
✅ Empfohlen:
// Server Component
export default async function Tasks() {
const { userTasks } = await getWaitingUserTasks();
return <TaskList tasks={userTasks} />;
}❌ Nicht empfohlen:
// Client Component mit useEffect
'use client';
export default function Tasks() {
const [tasks, setTasks] = useState([]);
useEffect(() => {
fetch('/api/tasks').then(r => r.json()).then(setTasks);
}, []);
return <TaskList tasks={tasks} />;
}2. Custom Engine URL
Überschreiben Sie die Engine-URL wenn nötig:
const tasks = await getWaitingUserTasks({
engineUrl: 'https://custom-engine.com'
});3. Access Token für geschützte Engines
Verwenden Sie Access Tokens für gesicherte Engines:
import { getServerSession } from 'next-auth';
const session = await getServerSession();
const tasks = await getWaitingUserTasks({
accessToken: session.accessToken
});Vollständiges Beispiel
app/tasks/page.tsx
import { getWaitingUserTasks, finishUserTask } from '@5minds/processcube_app_sdk/server';
import { revalidatePath } from 'next/cache';
export default async function TasksPage() {
const { userTasks } = await getWaitingUserTasks();
async function handleComplete(flowNodeInstanceId: string) {
'use server';
await finishUserTask({
flowNodeInstanceId,
userTaskResult: { completed: true }
});
revalidatePath('/tasks');
}
return (
<div className="container">
<h1>Meine Aufgaben</h1>
{userTasks.length === 0 ? (
<p>Keine wartenden Aufgaben</p>
) : (
<div className="grid gap-4">
{userTasks.map((task) => (
<div key={task.flowNodeInstanceId} className="card">
<h3>{task.flowNodeName}</h3>
<p>Prozess: {task.processName}</p>
<form action={handleComplete.bind(null, task.flowNodeInstanceId)}>
<button type="submit">Abschließen</button>
</form>
</div>
))}
</div>
)}
</div>
);
}Nächste Schritte
- Components - Client-Side React Components
- Examples - Vollständige Beispiele
- Configuration - Environment Variables