Skip to content

Data Sources & Connectors

Data Sources connect external HR and directory systems as master sources to roleALPHA. Once a connector claims a target module, its entities are synchronized automatically — creating, editing and deleting these entities is locked for everyone, as the external system has sole data ownership. The lock applies to manual editing in the UI, to administrators and to the AI assistant rAlph (it cannot create drafts on synced entities). Only the sync system itself keeps writing.

PropertyWithout connectorWith connector
Create entitiesManually / via rAlphExternal system only (🔒 manual + rAlph locked)
Edit entitiesManually / via rAlphLocked (🔒 external system)
Delete entitiesManuallyLocked (🔒 source system only)
JSON schemaFreely configurableDetermined by connector
Sync source—External service (e.g. Entra ID)
Sign-in addressMaintained explicitly onlyFollows the person record automatically (🔒 manual editing locked)

Entities synchronized via connector show a cloud badge with the external system’s name in the list view.

The sign-in address follows. If a data source syncs people, it also owns the sign-in address (Manage sign-in in user management): the field is locked there, and after every sync the address is taken from the person record. Without that, an address change in the source system would mean a permanent lockout — the lock prevents the repair too. Remove the data source and the field is editable again straight away; the last address taken over stays.

One data source per target module: Each target module (People, Organigramm, Cost centers, …) may be served by at most one data source. Once, say, Entra ID syncs People, SuccessFactors (or SAP FI) cannot additionally be set up for People — that target is disabled in the setup dialog and saving is rejected with a notice. To switch the master, first remove the existing data source or adjust its targets. This guarantees two systems never compete over the same entities.

Entra ID (formerly Azure Active Directory) syncs employees as Persons and groups as Organigramm entries.

  1. Create an App Registration in Azure Portal
  2. Grant User.Read.All (Application) + GroupMember.Read.All permissions and provide admin consent
  3. Create a client secret

On the first sync, ra-connect stores the AAD Object ID as _syncId in each entity’s descJsonb data. On every subsequent sync, ra-connect loads all existing roleALPHA entities with _syncSource = "EntraID" and builds a map AAD-ID → roleALPHA-UUID — identical to the CSV importer pattern. For each record, ra-connect then decides:

ConditionAction
AAD ID not known in roleALPHACREATE draft with new UUID
AAD ID already existsUPDATE draft with known UUID
@removed in delta + knownDELETE draft → cascades all relationships
@removed + not knownSkipped (already deleted)

On full syncs, entities that exist in roleALPHA but are no longer in Entra ID are also deleted.

No separate mapping table: The mapping comes directly from descJsonb._syncId in the entity data — no additional storage, no synchronisation problem.

  1. Navigate to Settings → Data & Structure → Data Sources
  2. Click Connect next to Microsoft Entra ID
  3. Fill in the setup dialog:
    • Step 1 – Credentials: Enter Directory ID (Tenant), Application ID (Client), and Client Secret
    • Step 2 – Sync Targets: Select People and/or Organigramm
    • Step 3 – Options: Configure sync interval, conflict strategy, and auto-approval
  4. Save — the first sync starts automatically
  • First sync: All users and groups are imported as drafts.
  • Subsequent syncs (delta): Only changes since the last sync are transferred.
  • Fields: Default mapping imports name, email, title, department, phone, and office location.

SAP SuccessFactors (Employee Central) syncs employees as Persons, departments (FODepartment) as Organigramm entries, and the managerId as a manager relationship (EXECUTES) between persons.

  1. The OData API v2 must be enabled in your SuccessFactors instance
  2. An API user with read access to the User and FODepartment entities
  3. The API server URL for your data center (e.g. https://api4.successfactors.com) and the Company ID

The connector supports two methods — selectable in the setup dialog:

MethodFieldsWhen to use
BasicAPI username + passwordQuick start; SuccessFactors internally combines to user@CompanyID
OAuth2 (SAML assertion)OAuth client ID (API key), OAuth user ID, private key (PEM)Recommended for production; the connector automatically fetches a signed SAML assertion from the SF IdP and exchanges it for an access token

Password and private key are stored encrypted (AES-256-GCM) and are never returned to the UI in plaintext.

How SuccessFactors recognizes and maps entities

Section titled “How SuccessFactors recognizes and maps entities”

As with Entra ID, ra-connect stores the external ID as _syncId in the descJsonb data — the userId for persons and the externalCode for departments. The _syncSource is set to SuccessFactors. Before each sync, a map external ID → roleALPHA-UUID is built from this:

ConditionAction
ID not known in roleALPHACREATE draft with new UUID
ID already existsUPDATE draft with known UUID
status = inactive/terminated + knownDELETE draft → cascades all relationships
Full sync: in roleALPHA but no longer in SuccessFactorsDELETE draft
  1. Navigate to Settings → Data & Structure → Data Sources
  2. Click Connect next to SAP SuccessFactors
  3. Fill in the setup dialog:
    • Step 1 – Credentials: API server URL, Company ID, authentication method, and the corresponding fields
    • Step 2 – Sync Targets: Select People, Organigramm and/or Capacity & absences
    • Step 3 – Options: Configure sync interval, conflict strategy, and auto-approval
  4. Save — the first sync starts automatically
  • First sync (full): All active employees and departments are imported as drafts, then manager relationships are created.
  • Subsequent syncs (delta): Only records with a changed lastModifiedDateTime since the last sync are transferred.
  • Fields: Default mapping imports name, email, title, department, division, phone, and office location — plus, when demand planning is active, weekly hours, employment rate and employment type.

This is the one target that masters no entities: it delivers period-specific working time and absence periods to resource planning. Demands can therefore still be created and edited normally — nothing gets locked.

The absence type (leave, sickness, …) is discarded on import; roleALPHA has no field for it. What that means, and which rules apply to the nightly run, is described in Capacity from an HR system.

Connects a classic Active Directory or an LDAP directory service (e.g. OpenLDAP): users are synced as Persons, groups as Organigramm entries, and the manager attribute as a manager relationship (EXECUTES).

  1. A service account (bind DN) with read access to the directory tree
  2. The server URL — ldap://host:389 (plaintext) or ldaps://host:636 (TLS, recommended)
  3. The search base (base DN) under which users and groups live (e.g. dc=company,dc=com)
FieldDescriptionDefault
Server URLldap:// or ldaps:// incl. port—
Bind DNService account, e.g. cn=svc-readonly,ou=Service,dc=company,dc=com—
Bind passwordService account password (stored encrypted)—
Search baseBase DN for the search—
User filterLDAP filter for persons(&(objectCategory=person)(objectClass=user))
Group filterLDAP filter for groups(objectClass=group)

For OpenLDAP instead of AD, adjust the filters, e.g. users (objectClass=inetOrgPerson) and groups (objectClass=groupOfNames).

For ldaps:// with a self-signed certificate, certificate verification can optionally be disabled (checkbox in the dialog).

As the stable external ID, ra-connect uses objectGUID (Active Directory, binary → GUID string) or entryUUID (OpenLDAP), falling back to the DN. It is stored as _syncId with _syncSource = "LDAP" in the descJsonb data. Before each sync, a map objectGUID → roleALPHA-UUID is built from this:

ConditionAction
ID not known in roleALPHACREATE draft with new UUID
ID already existsUPDATE draft with known UUID
Full sync: in roleALPHA but no longer in the directoryDELETE draft → cascades all relationships

The manager relationship comes from the manager attribute (a DN pointing to another user) — resolved to EXECUTES relationships within a sync run.

  1. Navigate to Settings → Data & Structure → Data Sources
  2. Click Connect next to LDAP / Active Directory
  3. Fill in the setup dialog:
    • Step 1 – Credentials: Server URL, bind DN, bind password, search base, and optional filters
    • Step 2 – Sync Targets: Select People and/or Organigramm
    • Step 3 – Options: Configure sync interval, conflict strategy, and auto-approval
  4. Save — the first sync starts automatically
  • First sync (full): All matching users and groups are imported as drafts, then manager relationships are created.
  • Subsequent syncs (delta): Only entries with a changed whenChanged (Active Directory; OpenLDAP: modifyTimestamp) since the last sync.
  • Fields: Default mapping imports name, email, title, department, phone, and office location.

SAP FI connects Financial Accounting/CO from SAP S/4HANA and primarily syncs cost centers. Optionally, people (business partners) and org units (cost center standard hierarchy) can be imported too. The connection uses the OData v2 standard APIs (e.g. API_COSTCENTER_SRV, API_BUSINESS_PARTNER).

  1. Reachable OData v2 endpoints of the S/4HANA instance
  2. An API user with read access to cost center master data
  3. The OData server URL and the company code

How SAP FI recognizes and maps cost centers

Section titled “How SAP FI recognizes and maps cost centers”

The external cost center number (CostCenter) is stored as _syncId with _syncSource = "SAP-FI" in the descJsonb data. Before each sync a map CostCenter → roleALPHA-UUID is built (CREATE when unknown, UPDATE when known, full-sync DELETE for removed records). Because the cost center schema requires the mandatory field costCenterType, the connector sets the default value “Hauptkostenstelle”; further fields (description, company code, responsible, parent hierarchy) also land in descJsonb.

  1. Navigate to Settings → Data & Structure → Data Sources
  2. Click Connect next to SAP FI
  3. Fill in the setup dialog:
    • Step 1 – Credentials: OData server URL, company code, API username and password
    • Step 2 – Sync Targets: Cost centers (default) and optionally People/Organigramm
    • Step 3 – Options: Configure sync interval, conflict strategy, and auto-approval
  4. Save — the first sync starts automatically

MS Dynamics connects Microsoft Dynamics 365 Finance & Operations and primarily syncs cost centers (the “CostCenter” financial dimension). Optionally also workers (Workers) and org units (OMOperatingUnits). The connection uses the OData v4 data entities and authenticates via the Azure AD client-credentials flow.

  1. An app registration in Azure AD with access to the Dynamics environment
  2. Directory (tenant) ID, application (client) ID, and a client secret
  3. The Dynamics environment URL (e.g. https://contoso.operations.dynamics.com)

How MS Dynamics recognizes and maps cost centers

Section titled “How MS Dynamics recognizes and maps cost centers”

The CostCenterId is stored as _syncId with _syncSource = "MS-Dynamics". Before each sync a map CostCenterId → roleALPHA-UUID is built (CREATE/UPDATE/DELETE as with SAP FI). Cost centers flagged as deactivated via IsSuspended produce a DELETE draft. Here too the connector sets the mandatory field costCenterType to “Hauptkostenstelle”.

  1. Navigate to Settings → Data & Structure → Data Sources
  2. Click Connect next to MS Dynamics
  3. Fill in the setup dialog:
    • Step 1 – Credentials: Dynamics environment URL, directory ID, application ID, and client secret
    • Step 2 – Sync Targets: Cost centers (default) and optionally People/Organigramm
    • Step 3 – Options: Configure sync interval, conflict strategy, and auto-approval
  4. Save — the first sync starts automatically

By default, imported data lands as drafts in the normal approval flow. With the “Auto-approve sync drafts” option, drafts are approved by ra-connect immediately after import — no manual step required.

SettingBehavior
Disabled (default)Drafts appear in the Drafts view for review
EnabledDrafts are approved immediately after creation — data is visible right away

When to enable?

  • The tenant uses liberal approval mode (any tenant user may approve) — only then does ra-connect have the necessary rights
  • You fully trust the external system as the master source
  • You want no manual review step between import and visibility

When to leave disabled?

  • The tenant uses consensus, consent, or highlander mode — auto-approval would be rejected and logged as a warning
  • You want to review imported data before publishing (e.g. on the first import)

Note: With auto-approval enabled, the sync log shows “Auto-approve complete: X/Y approved”. Failed individual approvals generate a warning log entry but do not abort the sync.

Since August 2026 the platform enforces the entity type schema’s required fields on publish (see JSON Schema for Entity Types). If the source does not supply a required field, the draft stays put — nothing is lost, but it is not approved.

Worth knowing: such a failure appears only as a warning in the sync log, while the job itself still reports success. If data is missing after a sync, that is the first place to look. The bundled connectors fill the required fields themselves (first and last name for people, organisation type for org units); what typically trips this up are custom field mappings that leave a required field unserved.

In the active connector’s tile you’ll find the Sync History (last 5 jobs with status and stats).

The Platform Admin can view detailed logs via Settings → Services → Data Sources → Logs — including live tail and download.

When a person or department is deleted in Entra ID (delta sync: @removed), ra-connect creates a DELETE draft. After approval, roleALPHA automatically removes:

  • The entity itself (person / organigramm entry)
  • All relationships involving it (e.g. EXECUTES, MEMBER_OF)
  • Visibility grants for the entity
  • Open drafts of the entity
  • @-mentions referencing the entity

The Orphan Reaper (runs automatically daily) cleans up any remaining orphans if a sync job is interrupted.

Remove lifts the master binding. Existing entities are retained and become manually editable again. The JSON schema lock is lifted.

IssueSolution
Connector auto-disabled3 consecutive failures → check credentials, then re-enable
CONNECTOR_MANAGED_ENTITY when editingEntity is managed by connector — make changes directly in the source system
No badge on entitiesFirst sync not yet complete or drafts not yet approved
Auto-approval fails (in logs)Approval mode is more restrictive than liberal — disable the option or check approval mode
Drafts appear despite auto-approvalApproval mode blocks it → approve drafts manually in the Drafts overview