CK Language 2
Modelle mit ckLanguage: 2 ergänzen das Construction Kit um Interfaces, Methodendefinitionen und Zugriffsmodifikatoren. Die constructionKit-API stellt sie bereit. Die neuen aufzählungsartigen Werte sind Strings mit PascalCase-Namen (Public/Internal, Any/Model, ReadWrite/ReadOnly/MethodOnly/Hidden, Instance/Static); Werttypen (valueType, attributeValueType) verwenden das bestehende GraphQL-Enum (STRING, RECORD, ...). Elemente von Modellen in CK Language 1 liefern die v1-Standardwerte (Public, Any, ReadWrite, ckLanguage: 1).
Übersichtsabfrage
Das Beispiel verwendet das Modell Acme.Assets aus der Übersicht zu CK Language 2. Die System-Modelle sind noch CK Language 1 und liefern daher noch keine Interfaces oder Methoden.
query {
constructionKit {
types(rtCkId: "Acme.Assets/Device") {
items {
visibility
derivable
interfaces { rtCkInterfaceId }
methods {
methodId
kind
parameters { name valueType isOptional sensitive }
authorization { roles allowSelf }
}
attributes(first: 50) { items { attributeName access } }
}
}
interfaces(ckModelIds: ["Acme.Assets"]) {
items {
rtCkInterfaceId
extends { semanticVersionedFullName }
attributes { attributeName isOptional }
implementingTypes { semanticVersionedFullName }
}
}
models(first: 50) {
items {
id { name }
ckLanguage
dependencyRanges { range floor }
}
}
}
}
Interfaces
interfaces(ckModelIds, rtCkId, rtCkIds) liefert eine Connection von CkInterface:
| Feld | Beschreibung |
|---|---|
ckInterfaceId, rtCkInterfaceId | Versionierte und versionslose Id (Acme.Assets/Named-1) |
description | Beschreibung |
visibility | Public oder Internal |
deprecated | true, wenn der Vertrag als veraltet markiert ist |
extends, allExtends | Direkt erweiterte Interfaces / alle transitiv erweiterten Interfaces |
attributes | Attribut-Member inkl. der Member erweiterter Interfaces: ckAttributeId, attributeName, attributeValueType, isOptional |
associations | Assoziations-Member: ckAssociationRoleId, targetCkTypeId, targetCkInterfaceId, multiplicity, isOptional, declaringCkInterfaceId |
methods | Methodendefinitionen (siehe unten) |
implementingTypes | Typen, die das Interface implementieren (direkt oder geerbt) |
Types, Records, Enums, Attributes, Association Roles
| Typ | Felder |
|---|---|
CkType | visibility, derivable, declaredInterfaces (in implements deklariert), interfaces (deklariert, geerbt und erweitert), methods (eigene und geerbte) |
CkTypeAttribute | access |
CkRecord | visibility, derivable |
CkEnum, CkAttribute, CkAssociationRole | visibility |
Methoden
CkMethod beschreibt eine Methoden-Definition (der Aufruf von Methoden ist noch nicht verfügbar):
| Feld | Beschreibung |
|---|---|
methodId | z. B. ChangePassword-1 |
qualifiedMethodId | z. B. System.Identity/User.ChangePassword-1 (Methoden eines Typs) |
declaringCkTypeId / declaringCkInterfaceId | Wo die Methode deklariert ist |
kind | Instance oder Static |
description, visibility | |
parameters | name, valueType, valueCkRecordId, valueCkEnumId, isOptional, sensitive, description |
result | valueType, valueCkRecordId, valueCkEnumId; null, wenn die Methode kein Ergebnis hat |
errors | Deklarierte Fehlercodes (CkMethodErrorDefinition: code, description) |
authorization | roles, allowSelf, scopes |
execution | timeoutSeconds (wirksamer Wert), idempotent |
Modelle
| Feld | Beschreibung |
|---|---|
ckLanguage | 1 oder 2 (1, wenn nicht deklariert) |
minEngineVersion | Mindestversion der Engine: gesetzt für Modelle in CK Language 2 und range-retaining Modelle und vererbt an jedes Modell, das gegen eine solche Abhängigkeit kompiliert wird |
dependencyRanges | range und floor je deklarierter Abhängigkeit eines range-retaining Modells; null bei exakt gepinnten Modellen |