Updater case 1: Root and resolved value have no common ancestor
In some cases, the root entity and the resolved value do not share a common ancestor. This typically occurs when one or both entities are not part of any graph, such as the claim graph or policy graph.
For example, suppose you add a foreign key from Activity to
User to track an activity's backup user. In this situation, there
is no entity (such as a claim or an account) that owns both the activity and the
user.
Using the KeyableBeanJsonValueResolver
When the two entities do not share a common parent, you can use the
KeyableBeanJsonValueResolver
(gw.rest.core.pl.framework.v1.refs.KeyableBeanJsonValueResolver).
For example:
"updaters": {
"Activity": {
"properties": {
"backupUser_Ext": {
"path": "Activity.BackupUser_Ext",
"valueResolver": {
"typeName": "gw.rest.core.pl.framework.v1.refs.KeyableBeanJsonValueResolver"
}
}
}
}
}
Disabling reference by refid
KeyableBeanValueResolver supports both reference by
id and refid. You can disable reference by refid
by adding the following code to the valueResolver
property:"setByRefid": falseFor example, the following updater for backupUser_Ext disables
reference by refid.
"updaters": {
"Activity": {
"properties": {
"backupUser_Ext": {
"path": "Activity.BackupUser_Ext",
"valueResolver": {
"typeName": "gw.rest.core.pl.framework.v1.refs.KeyableBeanJsonValueResolver",
"setByRefid:" false
}
}
}
}
}
Using an entity-specific value resolver
Cloud API also provides value resolvers for specific base configuration entities. For
example, there is a UserJsonValueResolver for foreign key fields
that reference the User entity. You could use this in place of the
KeyableBeanJsonValueResolver. For example:
"updaters": {
"Activity": {
"properties": {
"backupUser_Ext": {
"path": "Activity.BackupUser_Ext",
"valueResolver": {
"typeName": "gw.rest.core.pl.admin.v1.group.UserJsonValueResolver"
}
}
}
}
}
You can find a list of entity-specific value resolvers in Studio by executing a command (CTRL + SHIFT + N) and entering "valueresolver". Be aware that the entity-specific value resolvers may have special behaviors to enable common Cloud API use cases. These behaviors may not be appropriate for an updater to a custom foreign key. Whenever you use a entity-specific value resolver, Guidewire recommends testing the associated PATCH and POST behaviors thoroughly.
Complete code sample for case 1
The following code snippets define a new foreign key property where the root and foreign
key entities have no common ancestor. In this example, the Activity
resource has a backupUser_Ext property that references the
User entity.
Data model extension
File name: Activity.etx
<extension
xmlns="http://guidewire.com/datamodel"
entityName="Activity">
...
<foreignkey
fkentity="User"
name="BackupUser_Ext"
nullok="true"/>
...
Schema file extension
File name: common_ext-1.0.schema.json
"definitions": {
"Activity": {
"properties": {
"backupUser_Ext": {
"title": "BackupUser_Ext",
"description": "The backup user who can complete the activity if the assigned user is on vacation",
"$ref": "#/definitions/SimpleReference",
"x-gw-extensions": {
"resourceType": "User"
}
},
...
Mapping extension file
File name: common_ext-1.0.mapping.json
"mappers": {
"Activity": {
"properties": {
"backupUser_Ext": {
"path": "Activity.BackupUser_Ext.RestV1_AsReference",
"mapper": "#/mappers/ResourceReference"
},
Updater extension file
File name: common_ext-1.0.updater.json
(This example assumes use of the entity-specific
UserJsonValueResolver, and reference by refid
is allowed.)
"updaters": {
"Activity": {
"properties": {
"backupUser_Ext": {
"path": "Activity.BackupUser_Ext",
"valueResolver": {
"typeName": "gw.rest.core.pl.admin.v1.group.UserJsonValueResolver"
}
},