Skip to main content
When Iru reads users from a connected source, it needs to know which incoming field fills which Iru profile attribute, and sometimes how to reshape the value along the way. You describe that with an attribute mapping: for each Iru profile attribute, you write an expression that produces its value from the source’s fields.
Where attribute mapping applies. You write attribute mappings when you connect a source system (the Workday and BambooHR connectors, which expose their own fields for you to map. It does not apply to CSV import: a CSV uses a fixed set of predefined columns, so there are no expressions to write.
Mapping expressions are written in IQL, the same expression language Iru uses for application claim and attribute mapping, Auto Group rules, and list filters. Here you’ll map a connected source system’s fields into your directory’s profile attributes; see IQL expressions for the full syntax.

How a mapping works

Each row in a mapping pairs one target (an Iru profile attribute) with an expression that draws from the source fields.
1

Discover the source fields

Iru reads the set of fields your source makes available. Those field names become the identifiers you can reference in expressions. See Directory Sync for how discovery fits into setup.
2

Write an expression per attribute

For each Iru attribute you want to fill, write an IQL expression. A valid field name can stand alone. Any other name is looked up on __source. Longer expressions combine or transform those values.
3

Iru validates it

Expressions are checked as you type and again when you save, so mistakes (an unknown field, a type error) surface before they ever reach a sync.
4

It runs on every sync

When the sync runs, Iru evaluates each expression against the incoming row and writes the result to the attribute.
Choose one stable, unique source field for the identifier that ties a source record to an Iru user, so each sync resolves to exactly one user.

Writing expressions

Expressions reference your source’s fields and can transform them: upper/lower casing, splitting, concatenation, picking a list item, and so on. The full reference (objects, functions, operators, and examples) is on the IQL expressions page, since the same language powers both directory mapping and application mapping. A field name can stand alone when it is a valid IQL identifier. It starts with an ASCII letter or an underscore, and the rest is ASCII letters, numbers, and underscores. A name such as prénom falls outside that set, so it is read from __source.
When the name has a space, hyphen, colon, or other symbol, or when it is an IQL keyword such as in, null, true, or if, look it up by its exact name on __source. __source is a map of every field from the source. A dot between valid names reaches a nested value, as in name.givenName. A field name that includes a dot is still one key: __source["name.givenName"]. Written bare, Email - Work is subtraction, and in is the membership operator.
The mapping editor rewrites these fields to __source["…"] when you pick or type them. A valid name stays bare. You can still write __source["…"] for a valid name. If the name contains " or \, put a backslash before each one inside the brackets, as in __source["Title \"Legal\""]. The editor adds that escape when it rewrites the field. See Transform values with IQL for how this works on the Mapping tab.

Blank mapped values

A blank or null mapped value clears the existing value of that custom attribute. The sync continues. For a Boolean, Date, Integer, or Decimal custom attribute, a blank or null mapped value does not fail the sync. When you transform a text field that can be blank, such as splitting an email, guard the value on the Mapping tab.

Where to go next

IQL expressions

The full IQL reference: objects, functions, operators, and examples.

Directory Sync

Connect an HR system and set up the mappings these expressions power.

Profile attributes

The targets your expressions write into.

Auto Groups

Another place attributes drive automation in your directory.