Skip to main content

Workday

Teams

Workday is cloud-based enterprise software that unifies finance and workforce management in a single platform. By integrating Workday with Cortex, you can easily manage teams and hierarchies, enforce ownership, and drive operational excellence.

Setup and configuration

Getting started

The Workday integration is limited to ownership and team data, so the first step is generating an ownership report in Workday.

Depending on how you want to manage teams and the corresponding hierarchy, you can create Cortex teams based on supervisory organizations or Workday teams.

Regardless of the approach you choose, your report will need the following fields:

  • email: Email address for employee. Use the same address that employees will use to access Cortex.
  • employeeId: Unique ID for each employee.
  • firstName: Employee first name. This will be displayed in Cortex.
  • lastName: Employee last name. This will be displayed in Cortex.
  • employeeRole (optional): Employee role. This will be displayed in Cortex.

Supervisory organizations

If you want to manage teams using Workday supervisory organizations, the report should include the following fields in addition to those above:

  • employeeSupervisoryOrgId: The ID for the supervisory organization that the employee is in. Cortex uses this field to group employees.
  • teamDisplayName: A display name for individual teams based on the employeeSupervisoryOrgId; this should be the same across all employees who belong to the same supervisory org. This will become the Cortex team name and tag.
  • managerEmail: Email address for the employee's manager. If Cortex detects an employee with the same email as the managerEmail, that employee will be added to the team with a "Manager" role.
  • teamSupervisoryOrgId: The supervisory org ID for the team that the employee is part of. The organization registered in this field will become a "parent" in the team hierarchy, while the org registered in employeeSupervisoryOrgId will become a "child" in the hierarchy.
  • teamListKey (for One Employee - Multiple Teams): Key for the list of teams associated with a given user.
caution

Any changes to the employeeSupervisoryOrgId will result in the creation of a new team because this field is how Cortex identifies teams.

Workday teams

If you want to manage teams in Cortex based on Workday teams instead of supervisory organization IDs, fill out these fields in addition to the five (listed above)(#getting-started):

  • teamName: Team name for employee. This field is what we use to group employees into teams in Cortex.
  • teamDisplayName (optional): Display name for the team. This will be used for the title and the tag for any teams imported from Workday at time of import. If not included, teamName will be used instead. This should be the same for all employees on the same team.
  • managerEmail: Email address for the employee's manager. Cortex uses this field to create team hierarchies. If Cortex detects an employee with the same email as the managerEmail, that employee will be added to the team with a "Manager" role.
    • Omit this field if you do not want to auto-import teams and the corresponding hierarchy from Workday.
caution

Any changes to the teamName will result in the creation of a new team because this field is how Cortex identifies teams.

Configuration

Once you have generated the report, you can set up the integration by adding credentials for an institutionalized user and the report link in Workday settings in Cortex:

  • Username: Username associated with the account used to generate the ownership report.
  • Password: Password for the Workday account.
  • Ownership Report URL: Full URL for the ownership report you generated. Do not include query parameters.
caution

If you do not see the settings page you're looking for, you likely don't have the proper permissions and need to contact your admin.

Once you save the authentication credentials and ownership report, you'll then define how you want the fields to map to different elements in Cortex. The options available in each dropdown menu will mirror the fields included when generating the ownership report.

Under Employee Attributes, you'll map report fields that pertain to employees.

  • Employee ID
  • Email
  • First Name
  • Last Name
  • Role (optional) → Imports employees' roles and populates a badge that appears next to an employee's name.
  • Manager Email → When added, lists the corresponding manager for a given employee. The report should also include an entry for the manager to populate the field.

Under Team Attributes, you'll map report fields that pertain to employees' teams. There are two ways to map team fields: One Employee - One Team or One Employee - Multiple Teams. This option is available under Team type.

The One Employee - One Team configuration is best if your report includes employees who belong to a single team.

  • Team ID → New teams are imported based on this ID. If the identifier (i.e. teamName) changes, Cortex will create a new team.
  • Team Name → Display name for the team in the Cortex UI. Cortex will update this name if changes are detected in Workday.

The One Employee - Multiple Teams configuration is recommended if employees have a list of teams they belong to. This is best if you are configuring the integration based on supervisory orgs and/or if users manage teams they belong to.

  • Team List Key → List that contains teams you want imported into Cortex for a given employee entry.
    • Requires the teamListKey field in the Workday report.
  • Team ID
  • Team ID - Fallback → Fallback team for a user who does not have an associated teamListKey.
  • Team Name
  • Team Name - Fallback → Name for the fallback team defined above.

The Hierarchy Fields configuration set is required for auto-import of Workday teams.

  • Field on parent team → Value selected becomes a parent team for value selected in Field on child team.
  • Is List → Toggle on when an entry for the parent field is a parent to multiple teams.
  • Field on child team → Value selected is defined as child team.
  • Root Team IDs → ID for the team you expect to be at the top of the hierarchy.
    • If set, Cortex will use this to break cycles that may be in the hierarchy.

Automatic import

If you want to auto-import teams and the hierarchy, you'll want to enable auto import in the Teams tab in Settings → Entities.

The next auto-import will occur when entities sync at 9 a.m. UTC, but you can sync entities to skip the waiting period.

Registration

Discovery

By default, Cortex will use the entity tag (e.g. my-entity) as the "best guess" for Workday team. For example, if your entity tag is my-entity, then the corresponding team in Workday should also be my-entity.

If your Workday team don’t cleanly match the Cortex entity tag, you can override this in the Cortex entity descriptor.

danger

The team name is case-sensitive and should be exactly the same as in the report's teamName field.

Entity descriptor

x-cortex-owners:
- type: group
name: Engineering
provider: WORKDAY
description: This is a description for this owner.
FieldDescriptionRequired
typeOwnership type (in this case, group)
nameteamName provided in the report; this value is case-sensitive and should match teamName exactly
providerIdentity provider (in this case, WORKDAY)
descriptionDescription for the owner

Expected results

Entity pages

Once the integration is set up, Cortex will automatically import and structure your team hierarchy. Any teams imported from Workday will appear with a description: "Automatically created by Cortex".

On each team's details page, any team members Cortex detects will populate under the Members tab. If you included the "Role" field in your Workday report, members' roles will appear in a badge next to their names.

Scorecards and CQL

With the Workday integration, you can create Scorecard rules and write CQL queries based on Workday .

All ownership details

A special built-in type that supports a null check or a count check to enforce ownership of entities.

  • Ownership

    • All owners
    • Teams
  • Team

    • Description
    • ID
    • Identity provider groups
    • Is archived
    • Is fallback
    • Is inherited
    • Members
    • Tag
  • Team member

    • Description
    • Email
    • Has Cortex user
    • Identity provider sources
    • Name
    • Notifications enabled
  • Team member role

    • Tag
    • Type
  • Identity provider group

    • Group identifier
    • Source

    Definition: ownership

Example

To enforce ownership in a Scorecard, you can use this rule to make sure that each entity has an owner:

ownership != null
All owner details

List of owners, including team members and individual users, for each entity.

  • Team member

    • Description
    • Email
    • Has Cortex user
    • Identity provider sources
    • Name
    • Notifications enabled
    • Roles
  • Team member role

    • Tag
    • Type
  • Identity provider group

    • Group identifier
    • Source

    Definition: ownership.allOwners()

Examples

You can use this expression to wrie a rule making sure that entities have an owner, whether specified directly or coming from a team:

ownership.allOwners().length > 0

If team owners should follow a naming convention, then a best practices Scorecard could check teams' adherence to the standard:

ownership.allOwners().filter((member) => member.name.matchesIn("example")).length > 0

This rule will pass if an entity has at least one owner with a name that contains "example." You can use the same expression in the Query builder to find all owners that contain "example."

Team details

List of teams for each entity.

  • Team

    • Description
    • ID
    • Identity provider groups
    • Is archived
    • Is fallback
    • Is inherited
    • Members
    • Tag
  • Team member

    • Description
    • Email
    • Has Cortex user
    • Identity provider sources
    • Name
    • Notifications enabled
    • Roles
  • Team member role

    • Tag
    • Type
  • Identity provider group

    • Group identifier
    • Source

    Definition: ownership.teams()

Examples

To query for entities owned by a Workday team, you can use this expression with the team's ID:

ownership.teams().any(team => team.id == "en2cb1b712a51043hd")

Or you can use this expression in a best practices Scorecard to make sure that team owners have a description and are not archived:

ownership.teams().all(team => team.description != null and team.isArchived == false)

Background sync

Cortex syncs teams from the report every day at 9 a.m. UTC.

You can sync teams manually at any time by clicking the Sync teams for Workday button from Workday settings in Cortex. Doing so will not auto-import teams.

Limitations

Cortex does not support hierarchies with cycles. For example, let's say Employee A is on the platform team, Employee B is on the frontend team, and both report to Manager C on the engineering team. If Manager C reported to someone on the platform team, that would create a cycle between the platform and engineering teams.

Still need help?

The following are all the ways to get assistance from our customer engineering team. Please use the option that is best for your users:

  • Email: help@cortex.io, or open a support ticket in the in app Resource Center
  • Chat: Available in the Resource Center
  • Slack: Users with a connected Slack channel will have a workflow added to their account. From here, you can either @CortexTechnicalSupport or add a :ticket: reaction to a question in Slack, and the team will respond directly.

Don’t have a Slack channel? Talk with your customer success manager.