Erweiterungssyntax für Schemadefinitionen

Eine Schemadefinitionserweiterung entspricht den folgenden syntaktischen Konventionen:

  • Die Erweiterung für die Zielressource wird durch ein JSON-Objekt definiert, das im Feld definitions der Schemaerweiterungsdatei enthalten ist
  • Der Name der Erweiterung muss mit dem der Schemadefinition für die Zielressource übereinstimmen
  • Die Erweiterung muss über ein properties-Attribut verfügen, in dem die erweiterten Eigenschaften gespeichert werden
  • Der Name jeder erweiterten Eigenschaft trägt das Suffix _Ext
  • Jede erweiterte Eigenschaft enthält eine Wertetypdeklaration

Das folgende Beispiel ist für eine Schemadefinitionserweiterung für die Activity-Ressource in der Common API. Die Erweiterung fügt der Ressource die Eigenschaft shortSubject_Ext hinzu und definiert den Wertetyp der Eigenschaft als Zeichenfolge:

{
  . . .
  "definitions": {
    "Activity": {
      "properties": {
        "shortSubject_Ext": {
          "type": "string"
        }
      }
    }
  }
}
  • Activity: Der Name der Schemadefinition für die zu erweiternde Ressource
  • shortSubject_Ext: Der Name der Eigenschaftserweiterung
  • type: Eine Deklaration des Wertetyps der Eigenschaft

Eigenschaftsnamen

Guidewire empfiehlt, für den Namen von Eigenschaften Groß- und Kleinschreibung zu verwenden und ihnen _Ext hinzuzufügen. Dieses System zur Namensgebung ist wichtig, um Aktualisierungskonflikte zu vermeiden, wenn dem Kernprodukt in der Zukunft eine Eigenschaft mit demselben Namen hinzugefügt wird. Das Suffix _Ext ist auch dann erforderlich, wenn Eigenschaften aus einer Basisentität hinzugefügt werden.

Wenn ein ClaimCenter-Entitätsfeldname beispielsweise ShortSubject lautet, lautet der Name der erweiterten Ressourceneigenschaft shortSubject_Ext.

Wertetyp der Eigenschaft

Jede durch die Schemadefinition erweiterte Eigenschaft muss eine Deklaration des Wertetyps der Eigenschaft enthalten und dieser Typ muss mit dem Feldtyp der zugehörigen ClaimCenter-Entität übereinstimmen. Diese Typen fallen in die folgenden allgemeinen Kategorien:

  • Skalare
  • Objekte
  • Arrays

Darüber hinaus können Wertetypen von Eigenschaften mit einem der folgenden Attribute definiert werden:

  • type: Nutzt eine Zeichenfolge, die den Wertetyp der Eigenschaft angibt. Verwenden Sie dieses Attribut für Skalare und Array-Wertetypen.
  • $ref: Nutzt einen URI-Verweis auf eine Definition an einer anderen Stelle im Schema. Verwenden Sie dieses Attribut für Wertetypen für Objekte.

Skalare

Sie können einen Eigenschaftswertetyp für einen Skalar deklarieren, indem Sie ein type-Attribut zur Ressourceneigenschaft hinzufügen und ihm einen primitiven JSON-Schema-Typ zuweisen, bei dem es sich entweder um boolean, integer, number oder string handelt. Wenn der Skalar ein Datums- oder Datums-/Uhrzeitfeld ist, sollten Sie ihm auch ein format-Attribut hinzufügen und ihm den Wert date bzw. date-time zuweisen.

Tabelle 1. ClaimCenter-Skalar-Typen mit den zugehörigen primitiven JSON-Typen
ClaimCenter-Skalar-Typ Primitiver JSON-Typ
bit boolean
dateonly string im Format date
datetime string im Format date-time
decimal number
integer integer
longint integer
longtext string
mediumtext string
money number
percentage number
shorttext string
text string
varchar string

Das folgende Beispiel zeigt die Basisressourcen-Eigenschaften, die die ClaimCenter-Wertetypen datetime, bit und varchar unterstützen:

{
  . . .
  "definitions": {
    "Activity": {
      "properties": {
        "closeDate": {
          "type": "string",
          "format": "date-time"
        },
        "mandatory": {
          "type": "boolean"
        },
        "shortSubject": {
          "type": "string"
        }
      }
    }
  }
}

Objekte

Sie können einen Eigenschaftswertetyp für ein Objekt deklarieren, indem Sie ihm einen URI-Verweis auf ein Inline-Ressourcenschema zuweisen. In der Regel werden Objekte über das SimpleReference-Schema formatiert. Weitere Details zu Inline-Ressourcen finden Sie im Cloud-API-Geschäftsabläufe- und Konfigurationshandbuch.

Im folgenden Beispiel ist assignedByUser_Ext eine Eigenschaftserweiterung mit dem Wertetyp „Objekt“. Dieser Wertetyp wird über eine URI-Referenz zum SimpleReference-Schema deklariert:

{
  . . .
  "definitions": {
    "Activity": {
      "properties": {
        "assignedByUser_Ext": {
          "$ref": "#/definitions/SimpleReference"
        }
      }
    }
  }
}

In den Schemas werden Eigenschaftswertetypen, die mit ClaimCenter-Typenschlüsseln übereinstimmen, im Allgemeinen als Objekte formatiert. Um einen Eigenschaftswertetyp für einen Typenschlüssel zu deklarieren, weisen Sie ihm einen URI-Verweis auf das TypeKeyReference-Schema zu. Es ist auch notwendig, den Typenschlüssel explizit über das x-gw-extensions.typelist-Attribut mit seiner ClaimCenter-Typenliste zu verknüpfen.

Das folgende Beispiel zeigt eine AssignmentStatus_Ext-Eigenschaftserweiterung. Der Wertetyp ist ein Typenschlüssel, der mit der Typenliste AssignmentStatus verknüpft ist:

{
  . . .
  "definitions": {
    "Activity": {
      "properties": {
        "assignmentStatus_Ext": {
          "$ref": "#/definitions/TypeKeyReference",
          "x-gw-extensions": {
            "typelist": "AssignmentStatus"
          }
        }
      }
    }
  }
}

Arrays

Sie können einen Eigenschaftswertetyp für ein Array deklarieren, indem Sie ein type-Attribut zur Ressourceneigenschaft hinzufügen und ihr den Wert des array zuweisen. Außerdem muss der Wertetyp der Array-Mitglieder angegeben werden. Dies kann durch Hinzufügen eines items.type-Attributs für Skalare oder eines URI-Verweises für Objekte erfolgen.

Die folgende Eigenschaftsdeklaration gilt für ein Zeichenfolgenarray:

{
  . . .
  "definitions": {
    "Activity": {
      "properties": {
        "exceptionSubtypes_Ext": {
          "type": "array",
          "items": {
            "type": string"
          }
        }
      }
    }
  }
}

Die folgende Eigenschaftsdeklaration für die data-Eigenschaft der RelatedCollections-Ressource verwendet einen URI-Verweis, um den Typ der Array-Mitglieder als Objekt festzulegen, das dem Schema SimpleReference entspricht:

{
  . . .
  "definitions": {
    "RelatedCollection": {
      "properties": {
        . . .
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SimpleReference"
          }
        }
      }
    }
  }
}

Virtuelle Eigenschaften

Viele ClaimCenter-Entitätsfelder sind virtuelle Eigenschaften, die ihren Wert über eine Gosu-Methode ableiten. Der von der Methode zurückgegebene Wert ist in der Regel dynamisch, z. B. eine Verkettung anderer Felder oder ein Zeiger auf ein bestimmtes Mitglied eines Arrays (z. B. das zuletzt hinzugefügte Mitglied). Im ClaimCenter-Datenwörterbuch listet der Feldeintrag für die virtuelle Eigenschaft den Rückgabetyp der Methode auf, die dem Feld zugrunde liegt. Dieser Typ ist entweder ein Skalar, ein Objekt, ein Typenschlüssel oder ein Array, wie oben beschrieben. Nachdem Sie den Rückgabetyp ermittelt haben, können Sie den oben beschriebenen Anweisungen zur spezifischen Formatierung folgen.

Fremdschlüssel

ClaimCenter-Entitätsfelder basieren häufig auf Fremdschlüsseln zu anderen Entitäten oder Typenlisten. Um einen Eigenschaftswertetyp für einen Fremdschlüssel zu deklarieren, müssen Sie zunächst den abschließenden Wertetyp der Fremdschlüsselreferenz in der ursprünglichen Quelle ermitteln. Dieser Typ ist entweder ein Skalar, ein Objekt, ein Typenschlüssel, ein Array oder eine virtuelle Eigenschaft, wie oben beschrieben. Anschließend können Sie den spezifischen Formatierungsanleitungen für den jeweiligen Typ folgen.

Beispielsweise hat die ClaimContact-Entität einen Fremdschlüssel zur Contact-Entität, die eine
DisplayName
Eigenschaft vom Zeichenfolgentyp ist. Der verkettete Name dieser Eigenschaft lautet ClaimContact.Contact.DisplayName. Die Schemadefinition für diese Eigenschaft lautet wie folgt:
"ClaimContact": {
  "type": "object",
  "x-gw-extensions": {
    "discriminatorProperty": "contactSubtype"
  },
  "properties": {
    . . .
    "displayName": {
      "type": "string",
      "readOnly": true
    },
    . . .
  }
}