Zum Hauptinhalt springen

Enums

Enums dienen dazu, eine Menge vordefinierter Konstanten festzulegen, die verschiedene Zustände, Typen oder Konfigurationen innerhalb der Bibliothek repräsentieren können. Enums sind in ein Runtime Entity Object eingebettet und benötigen keine Navigation über Assoziationen.

Typischerweise werden Enums verwendet, um Folgendes zu definieren:

  • Zustände: Enums können den Zustand eines Objekts definieren, etwa Active, Inactive, Pending usw.
  • Konfigurationen: Enums können Konfigurationen definieren, etwa High, Medium, Low usw.
  • Status: Enums können den Status eines Objekts definieren, etwa Success, Failure, Pending usw.
  • Kategorien: Enums können Kategorien definieren, etwa Electronics, Clothing, Furniture usw.
  • Berechtigungen: Enums können Berechtigungen definieren, etwa Read, Write, Delete usw.
  • Priorität: Enums können Prioritätsstufen definieren, etwa High, Medium, Low usw.
  • Schweregrad: Enums können Schweregrade definieren, etwa Critical, Major, Minor usw.
  • Häufigkeit: Enums können die Häufigkeit definieren, etwa Daily, Weekly, Monthly usw.
  • Richtung: Enums können die Richtung definieren, etwa Inbound, Outbound, Bidirectional usw.

Enums erstellen​

Erstellen Sie eine YAML-Datei und fügen Sie den folgenden Inhalt hinzu, um ein Enum zu definieren:

$schema: https://schemas.meshmakers.cloud/construction-kit-elements.schema.json
enums:
- enumId: Priority
useFlags: false
isExtensible: false
values:
- key: 1
name: Low
description: Low priority
- key: 2
name: Medium
description: Medium priority
- key: 3
name: High
description: High priority

Die folgende Tabelle beschreibt die Felder in der Enum-Definition:

FeldBeschreibungPflichtfeldStandardwert
enumIdDer eindeutige Bezeichner für das Enum.Ja
useFlagsEin boolescher Wert, der angibt, ob das Enum als Flags verwendet werden soll.Neinfalse
isExtensibleEin boolescher Wert, der angibt, ob das Enum über die API erweiterbar istNeinfalse
valuesEin Array aus Schlüssel-Wert-Paaren, die die Werte des Enums definieren.Ja
keyDer Schlüssel für den Enum-Wert. Muss eine innerhalb der Liste eindeutige Ganzzahl seinJa
nameDer Name des Enum-Werts. Muss ein Name ohne Sonderzeichen oder Leerzeichen seinJa
descriptionDie Beschreibung des Enum-Werts.Nein

Customization Extensions

Customization Extensions dienen dazu, die Werteliste eines vordefinierten Enums zu erweitern.

warnung

Diese Funktion ist nützlich, um Stammdaten zu erstellen, die sich nicht stark ändern. Es wird nicht empfohlen, diese Funktion für sich häufig ändernde Daten zu verwenden, da ein vollständiges Neuladen des Tenants erforderlich ist, um die Änderungen anzuwenden.

Das folgende Beispiel zeigt, wie man das Priority-Enum um einen neuen Wert erweitert:

Schritt 1: Die Enum-Definition erweiterbar machen​

Wir erstellen eine neue Enum-Definition für das Priority-Enum, bei der das Feld isExtensible auf true gesetzt ist.

$schema: https://schemas.meshmakers.cloud/construction-kit-elements.schema.json
enums:
- enumId: Priority
useFlags: false
isExtensible: true # This field is updated to true
values:
- key: 1
name: Low
description: Low priority
- key: 2
name: Medium
description: Medium priority
- key: 3
name: High
description: High priority

Schritt 2: Den Construction Kit in OctoMesh importieren​

Nachdem Sie die Enum-Definition aktualisiert haben, kompilieren Sie den Construction Kit und importieren Sie ihn in OctoMesh. Das Priority-Enum ist nun erweiterbar, und Sie können ihm über die API neue Werte hinzufügen.

octo-cli -c importck -f '<path of directory for construction kit>' -w

Weitere Informationen finden Sie unter Construction Kits importieren.

Schritt 3: Das Enum über die API erweitern​

Wir erstellen über die API einen neuen Wert namens Urgent mit dem Schlüssel 1 für das Priority-Enum. Wir verwenden die INSERT-Operation, um den neuen Wert zum Enum hinzuzufügen.

mutation {
constructionKit {
enums(ckId: "ConstructionKitLibrary/Priority") {
updateValueExtensions(
values: [
{
operation: INSERT
value: { key: 4, name: "Urgent", description: "Urgent priority" }
}
]
) {
ckEnumId
isExtensible
values {
key
name
description
isExtension
}
}
}
}
}

Das Ergebnis dieser Abfrage sieht wie folgt aus

{
"data": {
"constructionKit": {
"enums": {
"updateValueExtensions": [
{
"ckEnumId": "ConstructionKitLibrary/Priority",
"isExtensible": true,
"values": [
{
"key": 1,
"name": "Low",
"description": "Low priority",
"isExtension": false
},
{
"key": 2,
"name": "Medium",
"description": "Medium priority",
"isExtension": false
},
{
"key": 3,
"name": "High",
"description": "High priority",
"isExtension": false
},
{
"key": 4,
"name": "Urgent",
"description": "Urgent priority",
"isExtension": true
}
]
}
]
}
}
}
}

Beachten Sie:

  • Der Name muss innerhalb des Enums eindeutig sein. Wenn Sie versuchen, einen Wert mit einem bereits vorhandenen Namen einzufügen, schlägt die Operation fehl.
  • Der Name darf nicht leer sein und keine Sonderzeichen oder Leerzeichen enthalten. Regex-Muster: ^[_a-zA-Z][_a-zA-Z0-9]*$
  • Der Schlüssel muss innerhalb des Enums eindeutig sein. Wenn Sie versuchen, einen Wert mit einem bereits vorhandenen Schlüssel einzufügen, schlägt die Operation fehl.
  • Der Schlüssel muss eine Ganzzahl größer als 0 sein.

Es ist außerdem möglich, Werte eines Enums zu löschen oder zu aktualisieren. Das folgende Beispiel zeigt, wie man einen Wert im Priority-Enum löscht und einfügt:

mutation {
constructionKit {
enums(ckId: "ConstructionKitLibrary/Priority") {
updateValueExtensions(
values: [
{
operation: DELETE
value: { key: 4, name: "Urgent", description: "Urgent priority" }
},
{
operation: INSERT
value: { key: 4, name: "Critical", description: "Critical priority" }
}
]
) {
ckEnumId
isExtensible
values {
key
name
description
isExtension
}
}
}
}
}

Verhalten beim Import eines Construction Kits​

Wenn Sie ein Construction-Kit-Modell importieren oder aktualisieren, bewahrt das System benutzerdefinierte Erweiterungswerte, die über die API hinzugefügt wurden. So bleiben Ihre Anpassungen über Modellaktualisierungen hinweg erhalten.

Erweiterungswerte bleiben erhalten​

Wenn eine neue Version eines Construction Kits importiert wird:

  1. Erweiterungswerte werden automatisch bewahrt: Alle Werte mit isExtension: true werden vor dem Import gespeichert und danach wiederhergestellt.
  2. Neue CK-definierte Werte werden hinzugefügt: Werte, die im neuen Construction-Kit-Modell definiert sind, werden normal importiert.
  3. Erweiterungswerte haben Vorrang: Hat ein Erweiterungswert denselben Schlüssel wie ein CK-definierter Wert, überschreibt der Erweiterungswert den CK-definierten Wert.

Beispielszenario​

Betrachten Sie ein Enum Priority mit den folgenden anfänglichen CK-definierten Werten:

KeyNameIsExtension
1Lowfalse
2Mediumfalse
3Highfalse

Sie fügen über die API einen benutzerdefinierten Erweiterungswert hinzu:

KeyNameIsExtension
4Criticaltrue

Nun importieren Sie eine neue Version des Construction Kits, die einen neuen Wert mit dem Schlüssel 4 hinzufügt:

KeyNameIsExtension
1Lowfalse
2Mediumfalse
3Highfalse
4VeryHighfalse

Nach dem Import lautet das Ergebnis:

KeyNameIsExtension
1Lowfalse
2Mediumfalse
3Highfalse
4Criticaltrue

Der Erweiterungswert Critical (Schlüssel 4) überschreibt den CK-definierten Wert VeryHigh, weil Erweiterungswerte Vorrang haben.

Best Practice

Wählen Sie beim Hinzufügen von Erweiterungswerten Schlüssel, die voraussichtlich nicht mit künftigen CK-Aktualisierungen kollidieren. Erwägen Sie, für benutzerdefinierte Erweiterungen höhere Schlüsselwerte zu verwenden (z. B. beginnend bei 100 oder 1000).

warnung

Wenn Sie einen bestimmten Schlüssel verwenden müssen, der im Construction Kit definiert ist, können Sie ihn mit einem Erweiterungswert überschreiben. Beachten Sie jedoch, dass dies zu Problemen führen kann, wenn der CK-definierte Wert eine bestimmte Bedeutung in der Systemlogik hat.