Lernprogramm: Ressourcen-Erweiterung erstellen
In diesem Lernprogramm können Sie den gesamten Prozess zum Erstellen einer System-API-Ressourcenerweiterung durchspielen. Durch das Erstellen der Ressourcenerweiterung erweitern Sie Ressourcen so, dass sie beim Ausführen der folgenden Aufgaben eine Vielzahl von Eigenschaftentypen unterstützen:
- Schemadefinition erweitern
- Mapper erweitern
- Updater erweitern
- Erweiterte Ressource überprüfen
Werkzeuge
Im Rahmen dieser Übung werden Sie Studio, Swagger UI und Postman nutzen. In diesem Lernprogramm wird davon ausgegangen, dass Sie mit der Arbeit in Studio bereits vertraut sind. Weitere Informationen zur Swagger UI oder zum Einrichten von Postman finden Sie im Cloud-API-Geschäftsabläufe- und Konfigurationshandbuch.
Szenario
Sie wurden aufgefordert, eine Ressourcenerweiterung für die Activity-Ressource in der Common API zu erstellen. Diese Ressource basiert auf der ClaimCenter Activity-Entität. Sie werden die Ressourceneigenschaften so erweitern, dass die folgenden Entitätsfelder unterstützt werden:
| Entitätsfeldname | Name der Ressourceneigenschaft | Werttyp | Unterstützung von POST und PATCH? |
ActivityClass |
activityClass_Ext |
Typenschlüssel für die ActivityClass-Typenliste |
|
CreateTime |
createTime_Ext |
Datum/Uhrzeit | |
CreateUser |
createUser_Ext |
Fremdschlüssel für die User-Entität |
|
ShortSubject |
shortSubject_Ext |
varchar (10) | ja |
IsAutogenerated_Ext (vom Benutzer erstellte Felderweiterung) |
isAutogenerated_Ext |
bit | ja |
Beachten Sie, dass der letzte Eintrag eine Erweiterung für benutzerdefinierte Entitätsfelder ist. Sie erstellen dieses Feld zunächst in Studio. Anschließend konfigurieren Sie die Ressourcen-, Mapping- und Updater-Erweiterungen, um diese Eigenschaften über die System-API verfügbar zu machen. Abschließend verifizieren Sie die Ressourcenerweiterung in Swagger UI und Postman.
Eine Entitätsfelderweiterung erstellen
Damit über eine System-API auf eine benutzerdefinierte Entitätserweiterung zugegriffen werden kann, muss diese Erweiterung zuerst vorhanden sein. Sie können eine benutzerdefinierte Entitätserweiterung wie folgt erstellen:
- Öffnen Sie in Studio die Activity-Entität zur Bearbeitung. Diese Datei finden Sie unter Project > configuration > config > Extensions > Entity > Activity.etx.
- Klicken Sie auf + und wählen Sie column aus.
- Geben Sie in der neuen Spalte die folgenden Paare, bestehend aus Namen und Wert, ein:
- Geben Sie im Feld name den Wert IsAutogenerated_Ext ein
- Geben Sie im Feld type den Wert bit ein
- Geben Sie im Feld nullok den Wert true ein
- Speichern Sie die Datei.
- Um Ihre Änderungen zu integrieren, starten Sie den Entwicklungsserver im Debugging-Modus, indem Sie Ausführen > „Server“ debuggen auswählen.
- Um Ihre Arbeit zu überprüfen, erstellen Sie das Datenwörterbuch für ClaimCenter neu und bestätigen Sie dann, dass diese Erweiterung im Wörterbuch vorhanden ist.
Schemadefinition erweitern
- Öffnen Sie in Studio die der Common API zugeordneten Schemaerweiterungsdatei.
Diese Datei befindet sich unter Integration > schemas > ext > common > v1 > common_ext-1.0.schema.json.
{ "$schema": "http://json-schema.org/draft-04/schema#", "x-gw-combine": [ "gw.content.cc.common.v1.common_content-1.0", "ext.framework.v1.framework_ext-1.0" ], "definitions": {} } } - Erstellen Sie im Definitionsfeld eine Schemadefinitionserweiterung für
Activityund fügen Sie diesem einproperties-Attribut hinzu.{ . . . "definitions": { "Activity": { "properties": {} } } } - Erstellen Sie innerhalb des Attributs
propertiesFelder für jede der zu erweiternden Ressourceneigenschaften, wie im Abschnitt „Szenario“ oben beschrieben.{ . . . "definitions": { "Activity": { "properties": { "activityClass_Ext": {}, "createTime_Ext": {}, "createUser_Ext": {}, "shortSubject_Ext": {}, "isAutogenerated_Ext": {} } } } }Hinweise zu Namenskonventionen für Eigenschaften finden Sie im Abschnitt „Eigenschaftennamen“ von Erweiterungssyntax für Schemadefinitionen.
- Fügen Sie im Eigenschaftenfeld
activityClass_Exteinen Eigenschaftswertetyp für Typenschlüssel hinzu.Der Typenschlüsseltyp ist im Schema durch eine URI-Referenz definiert. Um den Wertetyp der Eigenschaft festzulegen, geben Sie ein
$ref-Attribut ein und weisen ihm den Wert#/definitions/TypeKeyReferencezu.Darüber hinaus muss der Typenschlüssel mit einer Typenliste verknüpft sein. Um die Typenliste festzulegen, fügen Sie der Eigenschaft ein
x-gw-extensions-Attribut hinzu und weisen Sie dann dem Typenlistenfeld die entsprechende Typenliste zu. In diesen Beispiel heißt die TypenlisteActivityClass.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "definitions": { "Activity": { "properties": { "activityClass_Ext": { "$ref": "#/definitions/TypeKeyReference", "x-gw-extensions": { "typelist": "ActivityClass" } }, . . . } } } } - Fügen Sie im Eigenschaftenfeld
createTime_Exteinen Eigenschaftswertetyp für datetime hinzu.Um den Wertetyp der Eigenschaft festzulegen, geben Sie ein Typen-Attribut ein und weisen Sie ihm den Wert „string“ zu. Fügen Sie anschließend ein Formatattribut hinzu und weisen Sie ihm den Wert
date-timezu.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "definitions": { "Activity": { "properties": { . . . "createTime_Ext": { "type": "string", "format": "date-time" }, . . . } } } } - Fügen Sie im Eigenschaftenfeld
createUser_Exteinen Eigenschaftswertetyp für das Objekt hinzu.Sie können einen Eigenschaftswertetyp für ein Objekt deklarieren, indem Sie ein
$ref-Attribut zur Ressourceneigenschaft hinzufügen und ihr einen URI-Verweis für eine eingebettete Ressource zuweisen (weitere Informationen finden Sie im Abschnitt „Attribute“ in diesem Handbuch). Geben Sie hier ein$ref-Attribut ein und weisen Sie ihm den Wert#/definitionen/SimpleReferencezu.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "definitions": { "Activity": { "properties": { . . . "createUser_Ext": { "$ref": "#/definitions/SimpleReference" }, . . . } } } } - Fügen Sie im Eigenschaftenfeld
shortSubject_Exteinen Wertetyp für die Eigenschaft Zeichenfolge hinzu.Um den Wertetyp der Eigenschaft festzulegen, geben Sie ein Typen-Attribut ein und weisen ihm den Wert
stringzu.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "definitions": { "Activity": { "properties": { . . . "shortSubject_Ext": { "type": "string" }, . . . } } } } - Fügen Sie im Eigenschaftenfeld
isAutogenerated_Exteinen Eigenschaftswertetyp für das Bit hinzu.Um den Wertetyp der Eigenschaft festzulegen, geben Sie ein Typen-Attribut ein und weisen ihm den Wert
booleanzu.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "definitions": { "Activity": { "properties": { . . . "isAutogenerated_Ext": { "type": "boolean" } } } } } - Speichern Sie Ihre Änderungen.
Mapper erweitern
- Öffnen Sie in Studio die der Common API zugeordnete Mapper-Erweiterungsdatei.
Diese Datei befindet sich unter Integration > mappings > ext > common > v1 > common_ext-1.0.mapping.json.
Die Basisdatei wird wie folgt angezeigt:
{ "schemaName": "ext.common.v1.common_ext-1.0", "combine": [ "gw.content.cc.common.v1.common_content-1.0", "ext.framework.v1.framework_ext-1.0" ], "mappers": {} } - Erstellen Sie im Feld
mapperseine Mapper-Erweiterung fürActivity.{ . . . "mappers": { "Activity": {} } } - Fügen Sie in der
Activity-Mapper-Erweiterung eineschemaDefinition-Eigenschaft hinzu und geben Sie ihr den WertActivity. Dadurch wird der Mapper mit der RessourceActivityverknüpft.{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity" } } } - Fügen Sie eine Stammeigenschaft hinzu und weisen Sie ihr den Wert
entity.Activityzu. So wird dieActivity-Ressource mit der ClaimCenterActivity-Entität verknüpft.{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity" } } } - Fügen Sie die Eigenschaft
propertieshinzu und erstellen Sie darin Felder für jede der Eigenschaften, die Sie zuvor der Schemadefinitionserweiterung hinzugefügt haben.{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { "activityClass_Ext": {}, "createTime_Ext": {}, "createUser_Ext": {}, "shortSubject_Ext": {}, "isAutogenerated_Ext": {} } } } } - Konfigurieren Sie die Eigenschaft
activityClass_Ext.- Fügen Sie ein Pfad-Attribut hinzu und weisen Sie ihm den Wert
Activity.ActivityClasszu.Dadurch wird die Ressourceneigenschaft dem
ActivityClass-Entitätsfeld zugeordnet. - Fügen Sie ein
mapper-Attribut hinzu und weisen Sie ihm den Wert#/mappers/TypeKeyReferencezu.Jede Eigenschaft, deren Typ durch einen URI-Verweis deklariert wird, muss über eine Zuordnung zu einem URI-Verweis für das zugehörige Zuordnungsschema verfügen.
Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { "activityClass_Ext": { "path": "Activity.ActivityClass", "mapper": "#/mappers/TypeKeyReference" }, . . . } } } } - Fügen Sie ein Pfad-Attribut hinzu und weisen Sie ihm den Wert
- Fügen Sie in der Eigenschaft
createTime_Extein Pfad-Attribut hinzu und weisen Sie ihm den WertActivity.CreateTimezu.Dadurch wird die Ressourceneigenschaft dem
CreateTime-Entitätsfeld zugeordnet.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { . . . "createTime_Ext": { "path": "Activity.CreateTime" }, . . . } } } } - Konfigurieren Sie die Eigenschaft
createUser_Ext.- Fügen Sie ein
path-Attribut hinzu und weisen Sie ihm den WertActivity.CreateUserzu.Dadurch wird die Ressourceneigenschaft dem
CreateUser-Entitätsfeld zugeordnet. - Fügen Sie ein
mapper-Attribut hinzu und weisen Sie ihm den Wert#/mappers/SimpleReferencezu.Jede Eigenschaft, deren Typ durch einen URI-Verweis deklariert wird, muss über eine Zuordnung zu einem URI-Verweis für das zugehörige Zuordnungsschema verfügen.
Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { . . . "createUser_Ext": { "path": "Activity.CreateUser", "mapper": "#/mappers/SimpleReference" }, . . . } } } } - Fügen Sie ein
- Fügen Sie in der Eigenschaft
shortSubject_Extein Pfad-Attribut hinzu und weisen Sie ihm den WertActivity.ShortSubjectzu.Dadurch wird die Ressourceneigenschaft dem
ShortSubject-Entitätsfeld zugeordnet.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { . . . "shortSubject_Ext": { "path": "Activity.ShortSubject" }, . . . } } } } - Fügen Sie der Eigenschaft
isAutogenerated_Exteinpath-Attribut hinzu und weisen Sie ihm den WertActivity.IsAutogenerated_Extzu.Dadurch wird die Ressourceneigenschaft dem
IsAutogenerated_Ext-Entitätsfeld zugeordnet.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "mappers": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { . . . "isAutogenerated_Ext": { "path": "Activity.IsAutogenerated_Ext" } } } } } - Speichern Sie Ihre Änderungen.
Updater erweitern
Dem Updater müssen Sie nur Ressourceneigenschaften hinzufügen, die durch einen POST- oder PATCH-Vorgang aktualisiert werden können. Verfügt eine Ressourcenerweiterung nicht über solchen Eigenschaften, muss keine Updater-Erweiterung erstellt werden.
Um einen Updater zu erstellen, der POST- oder PATCH-Operationen für die Eigenschaften isAutogenerated_Ext unterstützt, führen Sie die folgenden Schritte aus.
- Öffnen Sie in Studio die mit der Common API verknüpften Erweiterungsdatei des Updaters.
Diese Datei befindet sich unter Integration > updaters > ext > common > v1 > common_ext-1.0.updater.json.
Die Basisdatei wird wie folgt angezeigt:
{ "schemaName": "ext.common.v1.common_ext-1.0", "combine": [ "gw.content.cc.common.v1.common_content-1.0", "ext.framework.v1.framework_ext-1.0" ], "updaters": {} } - Erstellen Sie im Feld
updaterseine Updater-Erweiterung fürActivity.{ . . . "updaters": { "Activity": {} } } - Fügen Sie in der Updater-Erweiterung
ActivityeineschemaDefinition-Eigenschaft hinzu und weisen Sie ihr den WertActivityzu.Dadurch wird der Updater mit der Activity-Ressource verknüpft.
{ . . . "updaters": { "Activity": { "schemaDefinition": "Activity" } } } - Fügen Sie eine
root-Eigenschaft hinzu und weisen Sie ihr den Wertentity.Activityzu.So wird die
Activity-Ressource mit der ClaimCenterActivity-Entität verknüpft.{ . . . "updaters": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity" } } } - Fügen Sie eine
properties-Eigenschaft hinzu und erstellen Sie dann ein Feld für jede der unterstützten Eigenschaften, wie in der Schemadefinitionserweiterung definiert.{ . . . "updaters": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { "shortSubject_Ext": {}, "isAutogenerated_Ext": {} } } } } - Fügen Sie der Eigenschaft
isAutogenerated_Exteinpath-Attribut hinzu und weisen Sie ihm den WertActivity.IsAutogenerated_Extzu.Dadurch wird die Ressourceneigenschaft dem Entitätsfeld
IsAutogenerated_Extzugeordnet, sodass Eigenschaftsdaten in die InsuranceSuite-Datenbank geschrieben werden können.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "updaters": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { "isAutogenerated_Ext": { "path": "Activity.IsAutogenerated_Ext" }, . . . } } } } - Fügen Sie in der Eigenschaft
shortSubject_Exteinpath-Attribut hinzu und weisen Sie ihm den WertActivity.ShortSubjectzu.Dadurch wird die Ressourceneigenschaft dem
ShortSubject-Entitätsfeld zugeordnet, sodass Eigenschaftsdaten in die InsuranceSuite-Datenbank geschrieben werden können.Der folgende Codeblock zeigt, wie das abgeschlossene Eigenschaftsfeld aussieht:
{ . . . "updaters": { "Activity": { "schemaDefinition": "Activity", "root": "entity.Activity", "properties": { . . . "shortSubject_Ext": { "path": "Activity.ShortSubject" } } } } } - Speichern Sie Ihre Änderungen.
Erweiterte Ressource überprüfen
Nach dem Erstellen der Schemadefinitionserweiterung können Sie die überarbeitete Schemadefinition in der Swagger-Benutzeroberfläche überprüfen.
- Starten Sie die Swagger-Benutzeroberfläche und laden Sie dann die Common API.
Details hierzu entnehmen Sie dem Cloud-API-Geschäftsabläufe- und Konfigurationshandbuch.
- Wählen Sie den Endpunkt GET
/common/v1/activities/{activityId}aus. - Wählen Sie unter Responses die Ansicht Model aus.
- Überprüfen Sie im mit dem Abschnitt
data.attributesverknüpftenActivity-Schema das Vorhandensein der erweiterten Eigenschaften.
Darüber hinaus können Sie die überarbeitete Schemadefinition in Postman mit einigen Beispieldaten testen. In diesem Lernprogramm wird davon ausgegangen, dass Sie Postman in Ihrer Umgebung mit dem korrekten Beispieldatensatz eingerichtet haben. Weitere Informationen finden Sie im Cloud-API-Geschäftsabläufe- und Konfigurationshandbuch.
Zuerst können Sie das Antwortobjekt einer GET-Operation für die Erweiterungen der Ressourceneigenschaft überprüfen.
- Starten Sie in Postman eine neue Anforderung, indem Sie auf das + rechts neben der Registerkarte Launchpad klicken.
- Geben Sie als Basic Auth-Autorisierung den Benutzer
aapplegateund das Kennwortgwan. - Geben Sie den folgenden Aufruf ein und klicken Sie dann auf Senden:
GET
http://localhost:8080/cc/rest/common/v1/activites/cc:201 - Überprüfen Sie den Textkörper der Antwort. Dieser sieht wie folgt aus:
{ "data": { "attributes": { "activityClass_Ext": { "code": "task", "name": "Task" }, "activityPattern": "vendor_did_not_accept_work", "activityType": { "code": "general", "name": "General" }, "assignedByUser": { "displayName": "System User", "id": "systemTables:2" }, "assignedGroup": { "displayName": "Auto1 - TeamA", "id": "demo_sample:31" }, "assignedUser": { "displayName": "Andy Applegate", "id": "demo_sample:1" }, "assignmentStatus": { "code": "assigned", "name": "Assigned" }, "createTime_Ext": "2020-06-04T22:10:00.091Z", "createUser_Ext": { "displayName": "System User", "id": "systemTables:2" }, "description": "Follow up with vendor - work not accepted in timely manner", "dueDate": "2020-06-05T22:10:00.035Z", "escalated": false, "externallyOwned": false, "id": "cc:201", "importance": { "code": "high", "name": "High" }, "mandatory": false, "priority": { "code": "high", "name": "High" }, "recurring": false, "status": { "code": "open", "name": "Open" }, "subject": "Follow up with vendor - work not accepted in timely manner" }, . . . } } }
Sie können den Updater testen, indem Sie einen PATCH-Vorgang für dieselbe Ressource ausführen:
- Starten Sie in Postman eine neue Anforderung, indem Sie auf das + rechts neben der Registerkarte Launchpad klicken.
- Geben Sie als Basic Auth-Autorisierung den Benutzer
aapplegateund das Kennwortgwan. - Geben Sie den folgenden Aufruf ein, klicken Sie jedoch nicht auf Senden:
PATCH
http://localhost:8080/cc/rest/common/v1/activites/cc:201 - Geben Sie die Anforderungs-Nutzdaten an.
- Klicken Sie in der ersten Zeile der Registerkarten (die mit Params beginnt) auf Body.
- Wählen Sie in der Optionsfeldzeile raw aus.
- Ändern Sie am Ende der Zeile mit den Optionsfeldern den Wert der Dropdown-Liste von Text in JSON.
- Kopieren Sie Folgendes in das Textfeld unter den Optionsfeldern:
{ "data": { "attributes": { "isAutogenerated_Ext": true, "shortSubject_Ext": "shortsub" } } }
- Klicken Sie auf Senden. Die Antwort-Nutzdaten werden unterhalb der Anforderung-Nutzdaten angezeigt.
{ "data": { "attributes": { "activityClass_Ext": { "code": "task", "name": "Task" }, "activityPattern": "vendor_did_not_accept_work", "activityType": { "code": "general", "name": "General" }, "assignedByUser": { "displayName": "System User", "id": "systemTables:2" }, "assignedGroup": { "displayName": "Auto1 - TeamA", "id": "demo_sample:31" }, "assignedUser": { "displayName": "Andy Applegate", "id": "demo_sample:1" }, "assignmentStatus": { "code": "assigned", "name": "Assigned" }, "createTime_Ext": "2020-06-04T22:10:00.091Z", "createUser_Ext": { "displayName": "System User", "id": "systemTables:2" }, "description": "Follow up with vendor - work not accepted in timely manner", "dueDate": "2020-06-05T22:10:00.035Z", "escalated": false, "externallyOwned": false, "id": "cc:201", "importance": { "code": "high", "name": "High" }, "isAutogenerated_Ext": true, "mandatory": false, "priority": { "code": "high", "name": "High" }, "recurring": false, "shortSubject_Ext": "shortsub", "status": { "code": "open", "name": "Open" }, "subject": "Follow up with vendor - work not accepted in timely manner" }, . . . } }