---
id: identity-context
title: Identity attribute context in transforms
pagination_label: Identity Attribute Context
sidebar_label: Identity Attribute Context
sidebar_class_name: identityContextTransform
keywords: ['transforms', 'guides', 'nested', 'lifecycle']
description: Examples on how you might use the identity attribute context.
sidebar_position: 5
slug: /extensibility/transforms/guides/identity-context-examples
tags: ['Transforms', 'Guides', 'identity']
---

## Overview

Transforms ship with the Apache Velocity template engine, which allows a transform to reference, transform, and render values passed into the transform context.

The following variables are available to the Apache Velocity template engine when a transform is used to source an identity attribute:

| Variable | Type | Description |
| --- | --- | --- |
| identity | sailpoint.object.Identity | This is the identity the attribute promotion is performed on. |
| attributeDefinition | sailpoint.object.AttributeDefinition | This is the definition of the attribute being promoted. |
| oldValue | Object | This is the attribute's previous value. |

For available methods on these objects see our [Rules Java Docs](https://developer.sailpoint.com/docs/extensibility/rules/java-docs).

## Examples

These examples will help you learn what you can do with the identity context.

:::info

You can use `$identity`, as well as the other variables, in all transform operations.

:::

### Get the ID of the identity's manager

You must use a `firstValid`. If the identity does not have a manager, `getManager()` returns null.

```json
{
  "type": "firstValid",
  "attributes": {
    "values": [
      "$identity.getManager().getId()",
      "no manager exists"
    ]
  }
}
```

### Get a custom attribute of the identity's manager

You must use a `firstValid`. If the identity does not have a manager, `getManager()` returns null.

```json
{
  "type": "firstValid",
  "attributes": {
    "values": [
      "$identity.getManager().getStringAttribute('country')",
      "no manager exists"
    ]
  }
}
```

### Get managerial status of the identity

This example would get a boolean response indicating whether the identity is listed as the manager of another identity.

```json
{
  "type": "static",
  "attributes": {
    "value": "$identity.getManagerStatus()"
  }
}
```

### Get an identity's accounts

This example would get an identity's various associated source accounts.

```json
{
  "type": "static",
  "attributes": {
    "value": "$identity.getLinks()"
  }
}
```

### Get details of an account on a specified application/source

The below examples pull in the SailPoint-generated account ID for the first account an identity has on a source, but you can replace `id` with the name of the attribute you're interested in retrieving.

To retrieve an attribute from an identity's account in a specific source, by Source ID:

```json
{
  "type": "firstValid",
    "attributes": {
        "values": [
            {
                "type": "static",
                "attributes": {
                    "value": "$identity.getLinksByAppIdOrName(\"2c918088814e6a610181686b56977fa8\",null)[0].id"
                }
            },
            null
        ],
        "ignoreErrors": true
    }
}
```

To retrieve an attribute from an identity's account in a specific source, by Source Name:

:::caution

Note the `[source]` at the end of the Source Name in the below example. This is required for all sources other than the internal IdentityNow source.

:::

```json
{
  "type": "firstValid",
    "attributes": {
        "values": [
            {
                "type": "static",
                "attributes": {
                    "value": "$identity.getLinksByAppIdOrName(null,\"Active Directory [source]\")[0].id"
                }
            },
            null
        ],
        "ignoreErrors": true
    }
}
```

### Get a comma separated list of account names from an application/source

This is the velocity logic of the transform:

```java
/* Loop through accounts returned from get accounts by application id */
#foreach($account in $identity.getLinksByAppIdOrName("2c918088814e6a610181686b56977fa8",null))
    #if($foreach.index + 1 != $identity.getLinks().size()) /* If we are not on the last item, include a comma */
        $account.getNativeIdentity(),
    #else
        $account.getNativeIdentity()
    #end
#end
```

```json
{
  "type": "static",
  "attributes": {
    "value": "#foreach($account in $identity.getLinksByAppIdOrName(\"2c918088814e6a610181686b56977fa8\",null))#if($foreach.index + 1 != $identity.getLinks().size())$account.getNativeIdentity(),#else$account.getNativeIdentity()#end#end"
  }
}
```

## Notes

:::caution

If you assign a variable with the identity attribute context, doing so will cast the type to a string.

:::

For example, you may do this if you wanted to assign the identity's manager object to a variable and then get additional data from it.

:::warning Invalid

```json
{
  "type": "static",
  "attributes": {
    "manager": "$identity.getManager()",
    "value": "$manager.getStringAttribute('country')"
  }
}
```

:::

:::tip Valid

```json
{
  "type": "static",
  "attributes": {
    "managerCountry": "$identity.getManager().getStringAttribute('country')",
    "value": "$managerCountry"
  }
}
```

:::
