Complete code sample for one-to-ones
The following code snippets define a new entity and a new one-to-one referencing that
entity. In this example, the Activity
resource has a
activityLegalInfo_Ext
inline object whose fields map to the
ActivityLegalInfo_Ext
entity.
Data model extension
File name: Activity.etx
<extension
xmlns="http://guidewire.com/datamodel"
entityName="Activity">
...
<onetoone
fkentity="ActivityLegalInfo_Ext"
name="ActivityLegalInfo_Ext"
nullok="true"/>
...
File name: ActivityLegalInfo_Ext.eti
<?xml version="1.0"?>
<entity
xmlns="http://guidewire.com/datamodel"
entity="ActivityLegalInfo_Ext"
table="activitylegalinfo_ext"
type="retireable">
<column
name="LegalCaseNumber"
nullok="true"
type="varchar">
<columnParam
name="size"
value="30"/>
</column>
<column
name="LegalReviewDate"
nullok="true"
type="datetime"/>
<foreignkey
fkentity="Activity"
name="Activity"
nullok="false"/>
<implementsEntity
name="Extractable"/>
</entity>
Schema extension file
File name: common_ext-1.0.schema.json
"definitions": {
"Activity": {
"properties": {
"activityLegalInfo_Ext": {
"title": "ActivityLegalInfo_Ext",
"description": "One-to-one association to ActivityLegalInfo_Ext",
"$ref": "#/definitions/ActivityLegalInfo_Ext"
}
}
},
"ActivityLegalInfo_Ext": {
"properties": {
"id": {
"title": "ID",
"description": "Object ID",
"type": "string",
"readOnly": true
},
"legalCaseNumber": {
"title": "LegalCaseNumber",
"description": "Legal case number",
"type": "string"
},
"legalReviewDate": {
"title": "LegalReviewDate",
"description": "Legal review date",
"type": "string",
"format": "date-time"
}
}
}
}
...
Mapping extension file
File name: common_ext-1.0.mapping.json
"mappers": {
"Activity": {
"properties": {
"activityLegalInfo_Ext": {
"path": "Activity.ActivityLegalInfo_Ext",
"mapper": "#/mappers/ActivityLegalInfo_Ext"
}
}
},
"ActivityLegalInfo_Ext": {
"schemaDefinition": "ActivityLegalInfo_Ext",
"root": "entity.ActivityLegalInfo_Ext",
"properties": {
"id": {
"path": "ActivityLegalInfo_Ext.RestId"
},
"legalCaseNumber": {
"path": "ActivityLegalInfo_Ext.LegalCaseNumber"
},
"legalReviewDate": {
"path": "ActivityLegalInfo_Ext.LegalReviewDate"
}
}
}
}
Updater extension file
File name: common_ext-1.0.updater.json
"updaters": {
"Activity": {
"properties": {
"activityLegalInfo_Ext": {
"path": "Activity.ActivityLegalInfo_Ext",
"create": "new ActivityLegalInfo_Ext(Activity)",
"updaterRef": "#/updaters/ActivityLegalInfo_Ext"
}
}
},
"ActivityLegalInfo_Ext": {
"schemaDefinition": "ActivityLegalInfo_Ext",
"root": "entity.ActivityLegalInfo_Ext",
"properties": {
"legalCaseNumber": {
"path": "ActivityLegalInfo_Ext.LegalCaseNumber"
},
"legalReviewDate": {
"path": "ActivityLegalInfo_Ext.LegalReviewDate"
}
}
}
}
Resource extension (to reserve IDs and extend checksums)
File name: ActivityExtResource.gs
package gw.rest.ext.cc.common.v1.activities
uses gw.api.modules.rest.framework.v1.batch.BatchUpdateMap
uses gw.api.modules.rest.framework.v1.checksum.ChecksumUtil
uses gw.api.modules.rest.framework.v1.json.DataEnvelope
uses gw.rest.core.cc.common.v1.activities.ActivityCoreResource
@Export
class ActivityExtResource extends ActivityCoreResource {
override function finishCreate(data : DataEnvelope, batchUpdateMap : BatchUpdateMap) {
super.finishCreate(data, batchUpdateMap)
reserveIdsIfNecessary({this.Element.ActivityLegalInfo_Ext})
}
override property get Checksum() : String {
return ChecksumUtil.extendChecksumWithEntities(super.Checksum, {this.Element.ActivityLegalInfo_Ext})
}
}