Skip to Content

REST API

Der Python Client bietet eine typisierte, synchrone REST-API zur Interaktion mit der ProcessCube® Engine. Alle Funktionen sind vollständig typisiert und bieten Type Hints.

Client-Klasse

Die Client-Klasse ist der Hauptzugangspunkt zur Engine-API:

from processcube_client.core.api import Client # Client erstellen client = Client('http://localhost:8000') # Mit Authentifizierung client = Client( 'http://localhost:8000', client_id='my-service', client_secret='secret-key', authority_url='http://localhost:11235' )

Application Info

Engine-Informationen abrufen

# Application Info info = client.info() print(f"Engine Version: {info['version']}") print(f"Name: {info['name']}")

Authority-Informationen

# Authority Info abrufen authority_info = client.authority_info() print(f"Authority URL: {authority_info['url']}") print(f"Authority Version: {authority_info['version']}")

Prozess-Definitionen

Prozess deployen

# Prozess aus Datei deployen with open('OrderProcess.bpmn', 'r') as file: bpmn_xml = file.read() response = client.process_definition_deploy( process_model_id='OrderProcess', xml=bpmn_xml ) print(f"Deployed: {response['processDefinitionId']}")

Prozess über Dateipfad deployen

# Direktes Deployment über Pfad response = client.process_definition_deploy_via_pathname( 'path/to/OrderProcess.bpmn' ) print(f"Deployed: {response['processDefinitionId']}")

Prozesse auflisten

# Alle Prozess-Modelle process_models = client.get_process_models() for model in process_models: print(f"Prozess: {model['id']} - {model['name']}")

Prozess-Instanzen

Prozess starten

from processcube_client.core.api import ProcessStartRequest, StartCallbackType # Start-Request erstellen request = ProcessStartRequest( return_on=StartCallbackType.CallbackOnProcessInstanceCreated, process_model_id='OrderProcess', initial_token={ 'customerName': 'Max Mustermann', 'orderAmount': 1500 } ) # Prozess starten response = client.process_model_start('OrderProcess', request) print(f"Prozess-Instanz: {response.process_instance_id}") print(f"Correlation-ID: {response.correlation_id}")

Prozess starten und auf Ende warten

# Start und warten auf Prozess-Ende request = ProcessStartRequest( return_on=StartCallbackType.CallbackOnProcessInstanceFinished, process_model_id='OrderProcess', initial_token={'orderAmount': 500} ) response = client.process_model_start('OrderProcess', request) print(f"Prozess beendet mit Result: {response.result}")

Prozess-Instanzen abfragen

# Query für Prozess-Instanzen instances = client.process_instances_query({ 'process_model_id': 'OrderProcess', 'state': 'running' }) for instance in instances: print(f"Instanz: {instance.process_instance_id}") print(f"Status: {instance.state}") print(f"Gestartet: {instance.created_at}")

Prozess-Instanz terminieren

# Prozess terminieren process_instance_id = 'abc-123-def' client.process_instance_terminate(process_instance_id) print(f"Prozess {process_instance_id} terminiert")

FlowNode-Instanzen

FlowNode-Instanzen abrufen

# Alle FlowNodes einer Prozess-Instanz process_instance_id = 'abc-123-def' flow_nodes = client.flow_node_instances_get(process_instance_id) for node in flow_nodes: print(f"FlowNode: {node['flowNodeId']}") print(f"Type: {node['flowNodeType']}") print(f"Status: {node['state']}")

Events

Signal senden

# Signal an alle wartenden Prozesse client.events_trigger_signal('OrderApproved', { 'orderId': '12345', 'approvedBy': 'manager@example.com' }) print("Signal gesendet")

Message senden

# Message an spezifische Prozess-Instanz correlation_id = 'order-12345' client.events_trigger_message( 'PaymentReceived', correlation_id, { 'amount': 1500, 'transactionId': 'TXN-67890' } ) print("Message gesendet")

User Tasks

User Tasks abrufen

# Alle verfügbaren User Tasks user_tasks = client.user_tasks_get() for task in user_tasks: print(f"Task: {task['userTaskInstanceId']}") print(f"Name: {task['flowNodeId']}") print(f"Token: {task['token']}")

User Task reservieren

# Task für Benutzer reservieren user_task_id = 'task-123' owner_id = 'user@example.com' client.user_tasks_reserve(user_task_id, owner_id) print(f"Task {user_task_id} reserviert für {owner_id}")

Reservierung aufheben

# Reservierung aufheben user_task_id = 'task-123' client.user_tasks_cancel_reservation(user_task_id) print("Reservierung aufgehoben")

User Task abschließen

# Task mit Result abschließen user_task_id = 'task-123' result = { 'approved': True, 'comment': 'Genehmigt am 2024-01-15' } client.user_tasks_finish(user_task_id, result) print("User Task abgeschlossen")

External Tasks

External Task abrufen und sperren

# Fetch and Lock external_tasks = client.external_task_fetch_and_lock( topic='ProcessPayment', max_tasks=10, lock_duration=60000, # 60 Sekunden worker_id='payment-worker' ) for task in external_tasks: print(f"External Task: {task['id']}") print(f"Topic: {task['topic']}")

External Task abschließen

# Task als erfolgreich markieren task_id = 'ext-task-123' result = { 'paymentStatus': 'success', 'transactionId': 'TXN-12345' } client.external_task_finish(task_id, result) print("External Task abgeschlossen")

Manual Tasks und Empty Tasks

Manual Tasks abrufen

# Alle Manual Tasks manual_tasks = client.manual_tasks_get() for task in manual_tasks: print(f"Manual Task: {task['id']}")

Manual Task abschließen

# Manual Task beenden manual_task_id = 'manual-123' client.manual_tasks_finish(manual_task_id, {}) print("Manual Task abgeschlossen")

Empty Tasks abrufen und abschließen

# Empty Tasks abrufen empty_tasks = client.empty_tasks_get() # Ersten Task abschließen if empty_tasks: task_id = empty_tasks[0]['id'] client.empty_tasks_finish(task_id) print(f"Empty Task {task_id} abgeschlossen")

Data Objects

DataObject-Instanzen abrufen

# DataObjects einer Prozess-Instanz process_instance_id = 'abc-123-def' data_objects = client.data_object_instances_get(process_instance_id) for obj in data_objects: print(f"DataObject: {obj['id']}") print(f"Value: {obj['value']}")

Best Practices

Fehlerbehandlung

from processcube_client.exceptions import ProcessCubeException try: response = client.process_model_start('OrderProcess', request) print(f"Erfolg: {response.process_instance_id}") except ProcessCubeException as e: print(f"Engine-Fehler: {e}") except Exception as e: print(f"Allgemeiner Fehler: {e}")

Type Hints verwenden

from typing import Dict, List, Any from processcube_client.core.api import Client def get_running_processes( client: Client, process_model_id: str ) -> List[Dict[str, Any]]: """Gibt alle laufenden Prozess-Instanzen zurück.""" return client.process_instances_query({ 'process_model_id': process_model_id, 'state': 'running' })

Wiederverwendbarer Client

import os from processcube_client.core.api import Client class ProcessCubeService: """Service-Klasse für ProcessCube-Operationen.""" def __init__(self): self.client = Client( os.getenv('ENGINE_URL', 'http://localhost:8000'), client_id=os.getenv('CLIENT_ID'), client_secret=os.getenv('CLIENT_SECRET'), authority_url=os.getenv('AUTHORITY_URL') ) def start_order_process(self, customer_name: str, amount: float): request = ProcessStartRequest( return_on=StartCallbackType.CallbackOnProcessInstanceCreated, process_model_id='OrderProcess', initial_token={ 'customerName': customer_name, 'orderAmount': amount } ) return self.client.process_model_start('OrderProcess', request) # Verwendung service = ProcessCubeService() response = service.start_order_process('Max Mustermann', 1500)

Nächste Schritte

Tipp: Alle API-Funktionen sind vollständig typisiert. Nutzen Sie Type Hints für bessere IDE-Unterstützung und Typsicherheit.