Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Overview
AddTypeAttribute is a projection operation that adds a user-specified type attribute to the final resolved entity. It is generally used after a CombineAttributes operation to create a type attribute that indicates the type that matches one of the entities from a polymorphic source, but can also be used by itself. Think of it like the $type property in a JSON object.
For example: We have an Account entity with the attribute "accountId" and a Contact entity with the attribute "contactId". Using CombineAttributes, we merge "accountId" and "contactId" into "customerId". We can then use AddTypeAttribute to create a "customerType" type attribute that is used to indicate whether "customerId" is an Account or a Contact type.
Because of this, the created type attribute is often an "entityName" data type. It will also have the trait is.linkedEntity.name.
Note: you can access the API reference for this operation on this link.
Examples
The examples below refer to the ContactKinds entity as defined here.
{
"entityName": "ContactKinds",
"hasAttributes": [
{
"name": "emailKind",
"entity": "Email"
},
{
"name": "phoneKind",
"entity": "Phone"
},
{
"name": "socialKind",
"entity": "Social"
}
]
}
| Phone | Social | |
|---|---|---|
| emailId | phoneId | socialId |
| address | number | account |
| isPrimary | isPrimary | isPrimary |
Using the AddTypeAttribute operation on an entity attribute
If we have an entity attribute, we can use AddTypeAttribute to add a type attribute. We can have an entity, Customer, that contains the following entity attribute definition (called contactAt) with a CombineAttributes operation (using ContactKinds as the source) that merges "emailId", "phoneId", and "socialId" into "contactId":
{
"name": "contactAt",
"isPolymorphicSource": true,
"entity": {
"operations": [
{
"$type": "addTypeAttribute",
"typeAttribute": {
"name": "contactType",
"dataType": "entityName",
"appliedTraits": []
}
}
],
"source": {
"operations": [
{
"$type": "combineAttributes",
"select": ["emailId", "phoneId", "socialId"],
"mergeInto": {
"name": "contactId",
"dataType": "entityId"
}
}
],
"source": "ContactKinds"
}
}
}
The resulting resolved contactAt entity typed attribute is:
| contactAt |
|---|
| address |
| isPrimary |
| number |
| account |
| contactId |
| contactType |
Using the AddTypeAttribute operation when extending an entity
If we have an entity that extends another entity, we can use AddTypeAttribute to add a type attribute.
Given the entity, Customer, that extends from the ContactKinds entity:
{
"entityName": "Customer",
"extendsEntity": {
"operations": [
{
"$type": "addTypeAttribute",
"typeAttribute": {
"name": "contactType",
"dataType": "entityName",
"appliedTraits": []
}
}
],
"source": {
"operations": [
{
"$type": "combineAttributes",
"select": [ "emailId", "phoneId", "socialId" ],
"mergeInto": {
"name": "contactId",
"dataType": "entityId"
}
}
],
"source": "ContactKinds"
}
},
"hasAttributes": []
}
The resulting resolved Customer entity is:
| Customer |
|---|
| address |
| isPrimary |
| number |
| account |
| contactId |
| contactType |
Using the AddTypeAttribute operation by itself
{
"name": "contactAt",
"entity": {
"source": "ContactKinds",
"operations": [
{
"$type": "addTypeAttribute",
"typeAttribute": {
"name": "someType",
"dataType": "entityName"
}
}
]
}
}
The resulting resolved contactAt entity typed attribute is:
| contactAt |
|---|
| emailId |
| address |
| isPrimary |
| phoneId |
| number |
| socialId |
| account |
| someType |