Zum Hauptinhalt springen

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.

OData-Endpunktbasis

Alle Endpunkte verwenden den Basispfad /odata/Project. Für die dynamische Listenansicht einschließlich eigener Felder steht /odata/DynamicProject zur Verfügung.


Datenmodell

Die folgende Tabelle zeigt die wichtigsten Eigenschaften der ApiProject-Entität:

EigenschaftTypBeschreibung
ProjectIdGuid (UUID)Eindeutiger Bezeichner des Projekts (Primärschlüssel).
NamestringName des Projekts.
NumberPrefixstring?Präfix der Projektnummer.
NumberIncrementialint32?Fortlaufende Nummer der Projektnummer.
NumberSuffixstring?Suffix der Projektnummer.
Numberstring?Berechnete vollständige Projektnummer (Präfix + laufende Nummer + Suffix, schreibgeschützt).
ProjectNumberAndNamestring?Kombinierte Projektnummer und Name (schreibgeschützt).
ClientIdGuid?Verknüpfter Kunde (Kunden-ID).
ClientNamestring?Name des verknüpften Kunden (schreibgeschützt).
ClientNumberstring?Kundennummer (schreibgeschützt).
ClientNumberNamestring?Kombinierte Kundennummer und Name (schreibgeschützt).
DivisionIdGuid?Zugehörige Abteilung.
DivisionNamestring?Name der Abteilung (schreibgeschützt).
DivisionDescriptionstring?Beschreibung der Abteilung (schreibgeschützt).
ProjectStatusIdGuid?Aktueller Projektstatus (Fremdschlüssel).
ProjectStatusNamestring?Name des aktuellen Projektstatus (schreibgeschützt).
ProjectStatusProgressint32?Fortschrittswert des Projektstatus (schreibgeschützt).
StatusLabelstring?Anzeigebezeichnung für den Projektstatus (schreibgeschützt).
ComputedProgressdouble?Berechneter Fortschritt (0–1, schreibgeschützt).
PercentCompleteint32?Fertigstellungsgrad in Prozent (schreibgeschützt).
Completeint32Anzahl erledigter Aufgaben (schreibgeschützt).
CompleteActualdoubleTatsächlicher Fertigstellungsgrad (schreibgeschützt).
CompletePlanint32Anzahl geplanter erledigter Aufgaben (schreibgeschützt).
CompletePlanActualint32Geplante vs. tatsächliche Fertigstellung (schreibgeschützt).
Priorityint32Priorität des Projekts. Werte: 0 = Niedrig, 1 = Normal, 2 = Hoch. Standard ist 1 (Normal).
LockModeint32Sperrmodus. Werte: 0 = Keiner, 1 = Gesperrt, 2 = Keine Benachrichtigungen.
IsLockedbooleanGibt an, ob das Projekt gesperrt ist.
StartDateDateTimeOffsetStartdatum.
EndDateDateTimeOffsetEnddatum.
PlannedStartDateDateTimeOffset?Geplantes Startdatum.
PlannedEndDateDateTimeOffset?Geplantes Enddatum.
IsEndDateFixedbooleanGibt an, ob das Enddatum fixiert ist.
BackwardSchedulingbooleanRückwärtsterminierung aktiviert.
IsRecycledbooleanGibt an, ob das Projekt im Papierkorb liegt.
IsArchivedbooleanGibt an, ob das Projekt archiviert ist.
IsRequestbooleanGibt an, ob es sich um einen Projektantrag handelt.
IsFavoriteboolean?Gibt an, ob das Projekt vom aktuellen Benutzer als Favorit markiert ist.
CreatedByContactIdGuidKontakt-ID des Erstellers.
CreatedByNamestring?Anzeigename des Erstellers (schreibgeschützt).
CreatedByContactImageIdGuid?Bild-ID des Ersteller-Kontakts (schreibgeschützt).
CreatedDateTimeDateTimeOffset?Erstellungsdatum und -uhrzeit (schreibgeschützt).
ChangedByContactIdGuid?Kontakt-ID des letzten Bearbeiters.
LastChangedByNamestring?Anzeigename des letzten Bearbeiters (schreibgeschützt).
ChangedByContactImageIdGuid?Bild-ID des letzten Bearbeiter-Kontakts (schreibgeschützt).
LastChangedDateTimeDateTimeOffset?Datum und Uhrzeit der letzten Änderung (schreibgeschützt).
ClosedByNamestring?Anzeigename des Kontakts, der das Projekt geschlossen hat (schreibgeschützt).
ClosedDateTimeDateTimeOffset?Datum und Uhrzeit der Schließung des Projekts (schreibgeschützt).
ImageIdGuid?ID des Projektbilds.
PortfolioIdGuid?Zugehöriges Portfolio.
DescriptionTextstring?Projektbeschreibung als Klartext.
DescriptionHTMLstring?Projektbeschreibung als HTML.
Categoriesstring?Kommagetrennte Kategorien.
Notestring?Projektnotiz.
NotificationsSuppressedbooleanBenachrichtigungen unterdrückt.
ClusterNamestring?Name des Clusters, dem das Projekt zugeordnet ist (schreibgeschützt).
StoreTypeint32Dokumentenspeichertyp des Projekts.
DocumentFolderstring?Pfad zum Projektdokumentenordner.
FirstManagerstring?Anzeigename der ersten Projektleitung (schreibgeschützt).
FirstTeamMemberstring?Anzeigename des ersten Teammitglieds (schreibgeschützt).
FirstCustomerstring?Anzeigename des ersten Kundenkontakts (schreibgeschützt).
FirstPartnerstring?Anzeigename des ersten Partnerkontakts (schreibgeschützt).
FirstAdditionalContactstring?Anzeigename des ersten weiteren Kontakts (schreibgeschützt).
ManagerProjectContactstring?Kommagetrennte Liste der Projektleitungsnamen (schreibgeschützt).
TeamProjectContactstring?Kommagetrennte Liste der Teammitgliedsnamen (schreibgeschützt).
CustomerProjectContactstring?Kommagetrennte Liste der Kundenkontaktnamen (schreibgeschützt).
PartnerProjectContactstring?Kommagetrennte Liste der Partnerkontaktnamen (schreibgeschützt).
AdditionalProjectContactstring?Kommagetrennte Liste der weiteren Kontaktnamen (schreibgeschützt).
ReviewerProjectContactstring?Kommagetrennte Liste der Prüferkontaktnamen (schreibgeschützt).
AmountPlannedCostsdoubleGesamtbetrag geplanter Kosten (schreibgeschützt).
AmountActualCostsdoubleGesamtbetrag tatsächlicher Kosten (schreibgeschützt).
AmountPlannedProfitdoubleGeplanter Gesamtgewinn (schreibgeschützt).
AmountProfitdoubleTatsächlicher Gesamtgewinn (schreibgeschützt).
AmountProfitDifferencedoubleDifferenz zwischen geplantem und tatsächlichem Gewinn (schreibgeschützt).
PlannedCostsOpexdoubleGeplante Betriebskosten (OpEx, schreibgeschützt).
ActualCostsOpexdoubleTatsächliche Betriebskosten (OpEx, schreibgeschützt).
PlannedCostsResourcesdoubleGeplante Ressourcenkosten (schreibgeschützt).
PlannedCostsOtherdoubleGeplante sonstige Kosten (schreibgeschützt).
CostsOtherdoubleTatsächliche sonstige Kosten (schreibgeschützt).
PlannedRevenuesdoubleGeplante Erlöse gesamt (schreibgeschützt).
RevenuesdoubleTatsächliche Erlöse gesamt (schreibgeschützt).
ActivityCostAmountdoubleGesamtbetrag aktivitätsbasierter Kosten (schreibgeschützt).
PlannedWorkAmountdoubleGeplanter Arbeitsaufwand in Stunden gesamt (schreibgeschützt).
BudgetIndicatorboolean?Gibt an, ob ein Budgetindikator gesetzt ist (schreibgeschützt).
AllPositionsBilledboolean?Gibt an, ob alle Positionen abgerechnet sind (schreibgeschützt).
TotalEffortdouble?Gesamtaufwand aller Aufgaben in Stunden (schreibgeschützt).
TotalEffortCompletedouble?Aufwand erledigter Aufgaben in Stunden (schreibgeschützt).
TotalEffortRemainingdouble?Verbleibender Aufwand in Stunden (schreibgeschützt).
TotalEffortPlandouble?Geplanter Gesamtaufwand in Stunden (schreibgeschützt).
TotalEffortOverdueint32Anzahl überfälliger Aufwände (schreibgeschützt).
TotalEffortPlanDueint32Anzahl geplanter fälliger Aufwände (schreibgeschützt).
TotalEffortTimeEntriesdouble?Gesamtaufwand aus Zeiteinträgen in Stunden (schreibgeschützt).
TimeEntriesDurationdoubleGesamtdauer der Zeiteinträge in Stunden (schreibgeschützt).
UnassignedTimeEntriesDurationdoubleDauer nicht zugewiesener Zeiteinträge (schreibgeschützt).
ProjectDurationdoubleGesamtlaufzeit des Projekts in Tagen (schreibgeschützt).
ProjectDurationRemainingdoubleVerbleibende Projektlaufzeit in Tagen (schreibgeschützt).
PlannedDurationdoubleGeplante Projektlaufzeit in Tagen (schreibgeschützt).
PlannedDurationRemainingdoubleVerbleibende geplante Laufzeit in Tagen (schreibgeschützt).
FirstNotCompletedPlanningDateDateTimeOffset?Datum des ersten nicht abgeschlossenen Planungselements (schreibgeschützt).
TimeWarningPlanningEndExceededboolean?Gibt an, ob das Planungsenddatum überschritten wurde (schreibgeschützt).
TimeWarningProjectEndExceededboolean?Gibt an, ob das Projektenddatum überschritten wurde (schreibgeschützt).
RiskScoreint32Risikobewertungswert (schreibgeschützt).
ValueScoreint32Wertbewertungswert (schreibgeschützt).
SizeScoreint32Größenbewertungswert (schreibgeschützt).
CalculatedScoredoubleBerechneter Gesamtscore (schreibgeschützt).
Schreibgeschützte Felder

Als schreibgeschützt gekennzeichnete Felder werden serverseitig berechnet und können nicht über POST- oder PATCH-Anfragen gesetzt werden. Verwenden Sie diese zum Filtern, Sortieren und Anzeigen in GET-Anfragen.


Endpunkte

CRUD-Operationen

Alle Projekte abrufen

GET/odata/Project

Unterstützt OData-Abfrageparameter ($filter, $select, $orderby, $top, $skip).


Ein einzelnes Projekt anhand seiner ID abrufen

GET/odata/Project({key})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId des Projekts.

Neues Projekt erstellen

POST/odata/Project
ParameterTypErforderlichBeschreibung
BodyDelta<ApiProject>JSON-Objekt mit den Projekteigenschaften.
tipp

Lassen Sie ProjectId weg, damit der Server automatisch eine ID generiert.


Projekt aktualisieren

PATCH/odata/Project({key})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId des Projekts.
BodyDelta<ApiProject>JSON-Objekt mit den zu aktualisierenden Feldern.

Projekt löschen

DELETE/odata/Project({key})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId des zu löschenden Projekts.
warnung

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.


Mitglieder & Kontakte

Alle Mitglieder eines Projekts abrufen

GET/odata/Project({key})/GetProjectContactRelations()
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.

Die Antwort enthält eine Liste von Kontaktbeziehung-Datensätzen mit folgender Struktur:

EigenschaftTypBeschreibung
IdguidEindeutiger Bezeichner der Kontaktbeziehung.
MemberIdguidID des Projektmitglieds.
RoleTypeintProjektrolle. Werte: 2 = Projektleitung, 4 = Team, 8 = Partner, 16 = Kunde, 32 = Weitere, 64 = Projektantragsprüfer, 128 = Weitere 1, 256 = Weitere 2, 512 = Weitere 3, 1024 = Weitere 4, 2048 = Weitere 5.
OrdinalPositionintSortierposition des Mitglieds.
DisplayNamestringAnzeigename des Kontakts.
EmailstringE-Mail-Adresse des Kontakts.
SourceTypeintArt des Kontaktbeziehung-Datensatzes. Werte: 0 = Einzelner Kontakt, 1 = Gruppe von Kontakten.
IsRecycledboolGibt an, ob der Kontakt im Papierkorb liegt.
IsIdentityboolGibt an, ob der Kontakt eine Identität (Benutzerkonto) besitzt.
EmailConfirmedboolGibt an, ob die E-Mail-Adresse bestätigt ist.
InvitationAcceptedboolGibt an, ob die Einladung angenommen wurde.
SkillsstringKommagetrennte Liste der Fertigkeiten.
ImageIdguid?ID des Kontaktbilds.

Ein Mitglied zum Projekt hinzufügen

POST/odata/Project({key})/AddMember
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den folgenden Feldern:

contactId (guid, erforderlich) — Der hinzuzufügende Kontakt.
role (int, erforderlich) — Wert: 2 = Projektleitung, 4 = Team, 8 = Partner, 16 = Kunde, 32 = Weitere, 64 = Projektantragsprüfer, 128 = Weitere 1, 256 = Weitere 2, 512 = Weitere 3, 1024 = Weitere 4, 2048 = Weitere 5..
type (int?, optional) — Wert: 0 = Einzelner Kontakt, 1 = Gruppe von Kontakten.
ordinalPosition (int?, optional) — Sortierposition.
warnung

Das Hinzufügen eines Mitglieds ist eine sicherheitsrelevante Aktion. Dadurch werden Projekt-Rollenberechtigungen für den angegebenen Kontakt erteilt.


Ein Mitglied aus dem Projekt entfernen

POST/odata/Project({key})/RemoveMember
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den folgenden Feldern:

contactId (guid, erforderlich) — Der zu entfernende Kontakt.
role (int, erforderlich) — Wert: 2 = Projektleitung, 4 = Team, 8 = Partner, 16 = Kunde, 32 = Weitere, 64 = Projektantragsprüfer, 128 = Weitere 1, 256 = Weitere 2, 512 = Weitere 3, 1024 = Weitere 4, 2048 = Weitere 5.
type (int?, optional) — Wert: 0 = Einzelner Kontakt, 1 = Gruppe von Kontakten.
warnung

Das Entfernen eines Mitglieds ist eine sicherheitsrelevante Aktion. Dadurch werden Projekt-Rollenberechtigungen für den angegebenen Kontakt entzogen.


Kategorien

Zugewiesene Kategorien eines Projekts abrufen

GET/odata/Project({key})/GetAssignedCategories()

Eine Kategorie dem Projekt zuweisen

GET/odata/Project({key})/AssignCategory(categoryId={categoryId})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
categoryIdGuidDie ID der zuzuweisenden Kategorie.

Eine Kategorie vom Projekt entfernen

GET/odata/Project({key})/UnAssignCategory(categoryId={categoryId})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
categoryIdGuidDie ID der zu entfernenden Kategorie.

Alle Kategorien eines Projekts ersetzen

POST/odata/Project({key})/SetCategories
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den folgenden Feldern:

categoryIds (guid[], erforderlich) — Array der Kategorie-IDs, die dem Projekt zugewiesen werden sollen.
info

SetCategories ersetzt alle vorhandenen Kategoriezuweisungen. Um eine einzelne Kategorie hinzuzufügen oder zu entfernen, verwenden Sie stattdessen AssignCategory oder UnAssignCategory.


Kommentare

Die ProjectNote-Entität ist das zugrunde liegende Datenmodell für Projektkommentare. Jeder Kommentar wird als ProjectNote gespeichert und mit einem bestimmten Projekt verknüpft.

EigenschaftTypBeschreibung
ProjectNoteIdguidEindeutige ID der Notiz.
ProjectIdguidID des zugehörigen Projekts.
NotestringNotiztext (Klartext).
NoteHtmlstringNotiztext (HTML-formatiert).
ShortDescriptionstringKurzbeschreibung der Notiz.
CreateDateTimeDateTimeOffsetErstellungszeitpunkt.
CreatedByContactIdguidID des Erstellers.

Alle Projektkommentare aller Projekte abrufen

GET/odata/ProjectNote

Filtern Sie nach Projekt:

GET /odata/ProjectNote?$filter=ProjectId eq xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&$orderby=CreateDateTime desc

Einen Projektkommentar nach ID abrufen

GET/odata/ProjectNote({key})
ParameterTypErforderlichBeschreibung
keyguidDie ProjectNoteId.

Einen Kommentar zum Projekt hinzufügen

POST/odata/Project({key})/AddNote
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den folgenden Feldern:

htmlText (string, erforderlich) — HTML-formatierter Kommentarinhalt.
notificationContactIds (guid[], erforderlich) — Kontakt-IDs, die benachrichtigt werden sollen. Übergeben Sie ein leeres Array, wenn keine Benachrichtigungen erforderlich sind.

Einen Kommentar vom Projekt entfernen

POST/odata/Project({key})/DeleteNote
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den folgenden Feldern:

noteRelationId (guid, erforderlich) — Die ID der zu löschenden Kommentarverknüpfung.
warnung

Das Löschen eines Kommentars kann nicht rückgängig gemacht werden.


Projektnummern

Prüfen, ob eine Projektnummer bereits existiert

GET/odata/Project({key})/CheckIfProjectNumberExists(projectNumber={projectNumber})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
projectNumberstringDie zu prüfende Projektnummer.

Eine Projektnummer aktualisieren

POST/odata/Project({key})/UpdateProjectNumber
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den folgenden Feldern:

prefix (string, erforderlich) — Das Präfix der Projektnummer.
suffix (string, erforderlich) — Das Suffix der Projektnummer.

Die Laufnummernteil der Projektnummer korrigieren

GET/odata/Project({key})/CorrectIncrementIfNecessary(projectNumber={projectNumber})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
projectNumberstringDie Projektnummer zum Abgleich.

Status & Aktionen

Einen Projektantrag genehmigen

POST/odata/Project({key})/ApproveRequest
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId des Projektantrags.

Einen Projektantrag ablehnen

POST/odata/Project({key})/RejectRequest
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId des Projektantrags.

Favoritenstatus eines Projekts umschalten

GET/odata/Project({key})/ToggleFavorite(isFavorite={isFavorite})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
isFavoritebooleantrue zum Markieren als Favorit, false zum Entfernen.

Ein Projekt duplizieren

GET/odata/Project({key})/CopyProject()
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId des zu kopierenden Projekts.

Ein Projektbild generieren

GET/odata/Project({key})/GenerateImage()
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.

Eine Projektbeschreibung per KI generieren

GET/odata/Project({key})/GenerateProjectDescription(language={language})
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
languagestringSprache der generierten Beschreibung (z. B. "de", "en").
info

Dieser Endpunkt ist nur in InLoox Cloud verfügbar.


Verknüpfungen

Eine Verknüpfung zum Projekt hinzufügen

POST/odata/Project({key})/AddRelation
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den Verknüpfungsdetails.

Eine Verknüpfung vom Projekt entfernen

POST/odata/Project({key})/RemoveRelation
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit der Verknüpfungs-ID.

Benachrichtigungen

Alle Kontakte abrufen, die Benachrichtigungen für dieses Projekt abonniert haben

GET/odata/Project({key})/GetNotificationFollowerContacts()
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.

Benachrichtigungsabonnenten hinzufügen

POST/odata/Project({key})/AddNotificationFollowers
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit den Kontakt-IDs der Abonnenten.

Einen Benachrichtigungsabonnenten entfernen

POST/odata/Project({key})/RemoveNotificationFollower
ParameterTypErforderlichBeschreibung
keyGuidDie ProjectId.
BodyobjectJSON-Objekt mit der Kontakt-ID.

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). Eigene Felder folgen dem Muster CF_<Feldname>.


Abgeflachte Projektliste mit Portfolio- und Berechtigungsdaten abrufen

GET/odata/DynamicProject
Nur lesender Zugriff

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",
}
Paginierung

Verwenden Sie $top und $skip für die Paginierung großer Ergebnismengen:

GET /odata/Project?$top=50&$skip=100&$orderby=Name