Projekte
Die Project-Entität ist das zentrale Objekt in InLoox. Über die OData-API können Sie Projekte erstellen, aktualisieren, löschen und umfangreiche Aktionen wie Mitgliederverwaltung, Kategorisierung oder Planungsversionen durchführen.
Alle Endpunkte verwenden den Basispfad /odata/Project. Für die abgeflachte Listenansicht steht /odata/DynamicProject zur Verfügung.
Datenmodell
Die folgende Tabelle zeigt die wichtigsten Eigenschaften der ApiProject-Entität:
| Property | Type | Description |
|---|---|---|
ProjectId | Guid (UUID) | Eindeutiger Bezeichner des Projekts (Primärschlüssel). |
Name | string | Name des Projekts. |
NumberPrefix | string? | Präfix der Projektnummer. |
NumberIncremential | int32? | Fortlaufende Nummer der Projektnummer. |
NumberSuffix | string? | Suffix der Projektnummer. |
Number | string? | Berechnete vollständige Projektnummer (Präfix + laufende Nummer + Suffix). |
ClientId | Guid? | Verknüpfter Kunde (Kunden-ID). |
DivisionId | Guid? | Zugehörige Abteilung. |
ProjectStatusId | Guid? | Aktueller Projektstatus (Fremdschlüssel). |
ComputedProgress | double? | Berechneter Fortschritt (0–1). |
Priority | int32 | Priorität des Projekts (ganzzahlig). |
LockMode | int32 | Sperrmodus (0 = nicht gesperrt). |
IsLocked | boolean | Gibt an, ob das Projekt gesperrt ist. |
StartDate | DateTimeOffset | Tatsächliches Startdatum. |
EndDate | DateTimeOffset | Tatsächliches Enddatum. |
PlannedStartDate | DateTimeOffset? | Geplantes Startdatum. |
PlannedEndDate | DateTimeOffset? | Geplantes Enddatum. |
IsEndDateFixed | boolean | Gibt an, ob das Enddatum fixiert ist. |
BackwardScheduling | boolean | Rückwärtsterminierung aktiviert. |
Private | boolean | Gibt an, ob das Projekt privat ist. |
IsRecycled | boolean | Gibt an, ob das Projekt im Papierkorb liegt. |
IsArchived | boolean | Gibt an, ob das Projekt archiviert ist. |
IsRequest | boolean | Gibt an, ob es sich um einen Projektantrag handelt. |
CreatedByContactId | Guid | Kontakt-ID des Erstellers. |
ChangedByContactId | Guid? | Kontakt-ID des letzten Bearbeiters. |
ImageId | Guid? | ID des Projektbilds. |
PortfolioId | Guid? | Zugehöriges Portfolio. |
DescriptionText | string? | Projektbeschreibung als Klartext. |
DescriptionHTML | string? | Projektbeschreibung als HTML. |
Categories | string? | Kommagetrennte Kategorien. |
Note | string? | Projektnotiz. |
NotificationsSuppressed | boolean | Benachrichtigungen unterdrückt. |
Die ApiProject-Entität enthält viele weitere berechnete Felder wie AmountPlannedCosts, AmountActualCosts, TotalEffort, ProjectDuration usw. Diese sind schreibgeschützt und werden serverseitig berechnet.
Endpunkte
CRUD-Operationen
/odata/ProjectAlle Projekte abrufen. Unterstützt OData-Abfrageparameter ($filter, $select, $expand, $orderby, $top, $skip).
/odata/ProjectNeues Projekt erstellen.
| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiProject> | ✅ | JSON-Objekt mit den Projekteigenschaften. |
/odata/Project({key})Ein einzelnes Projekt anhand seiner ID abrufen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId des Projekts. |
/odata/Project({key})Projekt teilweise aktualisieren (Partial Update).
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId des Projekts. |
Body | Delta<ApiProject> | ✅ | JSON-Objekt mit den zu aktualisierenden Feldern. |
/odata/Project({key})Projekt löschen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId des zu löschenden Projekts. |
Das Löschen eines Projekts entfernt es und alle zugehörigen Daten (Aufgaben, Zeiteinträge, Dokumente usw.) dauerhaft. Diese Aktion kann nicht rückgängig gemacht werden.
/odata/Project/$countGesamtanzahl aller Projekte abrufen.
Mitglieder & Kontakte
/odata/Project({key})/AddMemberEin Mitglied zum Projekt hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Kontakt-ID und Rolle des neuen Mitglieds. |
/odata/Project({key})/RemoveMemberEin Mitglied aus dem Projekt entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Kontakt-ID des zu entfernenden Mitglieds. |
/odata/Project({key})/GetProjectContactRelations()Alle Kontaktbeziehungen eines Projekts abrufen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Kategorien
/odata/Project({key})/GetAssignedCategories()Zugewiesene Kategorien eines Projekts abrufen.
/odata/Project({key})/AssignCategory(categoryId={categoryId})Eine Kategorie dem Projekt zuweisen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
categoryId | Guid | ✅ | Die ID der zuzuweisenden Kategorie. |
/odata/Project({key})/UnAssignCategory(categoryId={categoryId})Eine Kategorie vom Projekt entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
categoryId | Guid | ✅ | Die ID der zu entfernenden Kategorie. |
/odata/Project({key})/SetCategoriesAlle Kategorien eines Projekts ersetzen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Liste der Kategorie-IDs. |
Notizen
/odata/Project({key})/AddNoteEine Notiz zum Projekt hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit Notizinhalt. |
/odata/Project({key})/DeleteNoteEine Notiz vom Projekt entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Notiz-ID. |
Projektnummern
/odata/Project({key})/UpdateProjectNumberDie Projektnummer aktualisieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit den neuen Nummernbestandteilen. |
/odata/Project({key})/CheckIfProjectNumberExists(projectNumber={projectNumber})Prüfen, ob eine Projektnummer bereits existiert.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
projectNumber | string | ✅ | Die zu prüfende Projektnummer. |
/odata/Project({key})/CorrectIncrementIfNecessary(projectNumber={projectNumber})Den Inkrement-Wert der Projektnummer korrigieren, falls erforderlich.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
projectNumber | string | ✅ | Die Projektnummer zum Abgleich. |
Status & Aktionen
/odata/Project({key})/ApproveRequestEinen Projektantrag genehmigen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId des Projektantrags. |
/odata/Project({key})/RejectRequestEinen Projektantrag ablehnen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId des Projektantrags. |
/odata/Project({key})/ToggleFavorite(isFavorite={isFavorite})Favoritenstatus eines Projekts umschalten.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
isFavorite | boolean | ✅ | true zum Markieren als Favorit, false zum Entfernen. |
/odata/Project({key})/CopyProject()Ein Projekt duplizieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId des zu kopierenden Projekts. |
/odata/Project({key})/GenerateImage()Ein Projektbild generieren (KI-gestützt).
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
/odata/Project({key})/GenerateProjectDescription(language={language})Eine Projektbeschreibung per KI generieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
language | string | — | Sprache der generierten Beschreibung (z. B. "de", "en"). |
Planungsversionen (Snapshots)
/odata/Project({key})/CreatePlanningSnapshot(name={name})Einen Planungssnapshot erstellen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
name | string | ✅ | Name des Snapshots. |
/odata/Project({key})/DeletePlanningSnapshotEinen Planungssnapshot löschen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
/odata/Project({key})/RenamePlanningSnapshotEinen Planungssnapshot umbenennen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit dem neuen Namen. |
Projektgruppen
/odata/Project({key})/AddProjectGroupEine Projektgruppe hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit den Gruppendetails. |
/odata/Project({key})/DeleteProjectGroupEine Projektgruppe löschen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Gruppen-ID. |
/odata/Project({key})/SetProjectGroupColorDie Farbe einer Projektgruppe setzen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Gruppen-ID und Farbe. |
Verknüpfungen
/odata/Project({key})/AddRelationEine Verknüpfung zum Projekt hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit den Verknüpfungsdetails. |
/odata/Project({key})/RemoveRelationEine Verknüpfung vom Projekt entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Verknüpfungs-ID. |
Benachrichtigungen
/odata/Project({key})/AddNotificationFollowersBenachrichtigungsabonnenten hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit den Kontakt-IDs der Abonnenten. |
/odata/Project({key})/RemoveNotificationFollowerEinen Benachrichtigungsabonnenten entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
Body | object | ✅ | JSON-Objekt mit der Kontakt-ID. |
/odata/Project({key})/GetNotificationFollowerContacts()Alle Kontakte abrufen, die Benachrichtigungen für dieses Projekt abonniert haben.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die ProjectId. |
DynamicProject
Der Endpunkt /odata/DynamicProject bietet eine schreibgeschützte, abgeflachte Ansicht, die Daten aus Projekt, Portfolio und Berechtigungen zusammenführt. Alle Eigenschaften sind mit einem Präfix versehen (z. B. Project_Name, Portfolio_Name, ProjectPermission_PermissionProjectRead).
/odata/DynamicProjectAbgeflachte Projektliste mit Portfolio- und Berechtigungsdaten abrufen.
/odata/DynamicProject/$countGesamtanzahl der DynamicProject-Einträge abrufen.
DynamicProject unterstützt ausschließlich GET-Anfragen. Zum Erstellen oder Bearbeiten verwenden Sie die regulären /odata/Project-Endpunkte.
OData-Abfragebeispiele
Alle aktiven Projekte abrufen
GET /odata/Project?$filter=IsArchived eq false and IsRecycled eq false
Projekte eines bestimmten Kunden filtern
GET /odata/Project?$filter=ClientId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Projekte nach Priorität sortieren (absteigend)
GET /odata/Project?$orderby=Priority desc&$top=10
Nur bestimmte Felder auswählen
GET /odata/Project?$select=ProjectId,Name,Number,StartDate,EndDate,ComputedProgress
Projektanträge filtern
GET /odata/Project?$filter=IsRequest eq true
Projekt erstellen
POST /odata/Project
Content-Type: application/json
{
"Name": "Neues Projekt",
"StartDate": "2025-01-15T00:00:00Z",
"EndDate": "2025-06-30T00:00:00Z",
"Priority": 2
}
Projekt aktualisieren
PATCH /odata/Project('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
Content-Type: application/json
{
"Name": "Aktualisierter Projektname",
"ComputedProgress": 0.5
}
Verwenden Sie $top und $skip für die Paginierung großer Ergebnismengen:
GET /odata/Project?$top=50&$skip=100&$orderby=Name