Projection - Operation Combine Attributes
Overview
CombineAttributes is a projection operation that allows you to merge multiple input attribute into one. This operation takes a list of attributes on the select
property and replace them with the data typed attribute supplied on the mergeInto
property. If the list of attributes to be merged is empty, this operation does not have any effect.
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 CombineAttributes operation on an entity attribute
If we have an entity attribute, we can use CombineAttributes to merge certain attributes we get from the referenced entity.
{
"name": "contactAt",
"isPolymorphicSource": true,
"entity": {
"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 CombineAttributes operation when extending an entity
If we have an entity that extends another entity, we can use CombineAttributes to merge certain attributes that are inherited from the entity we are extending from.
Given an entity, Child, that extends from the Person entity:
{
"entityName": "Customer",
"extendsEntity": {
"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 |