1. What it is
Cordex Relationship Map turns any Dataverse record into a live, interactive picture of everything connected to it - related records, the people around it, the organisation behind it, and the health of each - so a user can see the whole situation at a glance and act on it without leaving the form.
It installs as a managed or unmanaged solution and adds a Cordex Relationship Map tab (or dashboard) to the tables you choose. It is a hand-built set of self-contained web resources plus a small PCF control - no external services are required for the map itself, and nothing is sent anywhere unless a user explicitly asks Cordex AI a question.
Who it is for
- End users - account managers, case workers, dispatchers, marketers - open a record and read its relationships, tag stakeholders, draw influence, and ask the AI for a brief.
- Administrators - configure profiles per table in Studio, set actions, connect AI, and govern access.
2. Editions & tiers
Features unlock by licence tier. Each tier includes everything in the tier below it. A 30-day trial grants full Tier 03 - AI Enablement.
| Tier | Name | Unlocks |
|---|---|---|
| Tier 01 | Foundation | Interactive maps, all views, health, search, expand, relate, run workflows/flows, filter wizard, exports, domain focus, access control, the local white-space card. |
| Tier 02 | Intelligence | Stakeholder roles & sentiment, influence lines (custom kinds), engagement scoring, configurable health rules, saved layout, PowerPoint export. |
| Tier 03 | AI Enablement | Cordex AI brief / Q&A / next-best-action, all providers, model lookup, full-system-access queries, and the AI sentiment trend. |
The current tier shows in the map header, e.g. viewer v4.5.76 · Tier 03 - AI Enablement (Trial). Activate a licence
from the version badge (see Licensing).
3. Opening the map
The map appears wherever an administrator placed it:
- On a record form - a Cordex Relationship Map tab. It opens centred on that record ("Form - This record").
- As a dashboard - opens on you ("Dashboard - Me"), a map of your own reach across the org.
The toggle top-left (Form - This record / Dashboard - Me) switches between the record you are on and a personal view. The map loads the profile the administrator configured for that table; if none exists it falls back to a sensible default.
4. The toolbar
Left to right across the top bar:
| Control | What it does |
|---|---|
| Form / Dashboard toggle | Switch between this record and your personal map. |
| VIEW dropdown | Choose the view - Map, Related colleagues, External reach, Org chart, Estate, Who knows whom, Health map, Hierarchy (see Views). |
| Search | Type to highlight and jump to any circle on the map by name. |
| Legend chips | The relationship-kind counts (Many to One, One to Many, Many to Many) - click behaviour and colours follow Appearance. |
| Expand by + Expand / Reset | Grow the map outward by N levels of relationships, or reset to the focal record. |
| 2D / 3D | Switch between the flat map and a 3D orbit projection (if enabled for the profile). |
| Icon buttons | ✨ Cordex AI panel · ↻ refresh · grid/table · settings (⚙, admins only) · ⛶ full screen · ☀ theme · ? in-map help · ⤓ CSV · 🖼 PNG · 📽 PowerPoint · ⎙ print/PDF. |
| Zoom (bottom-right) | + / - zoom, ⤢ fit to screen. Keyboard: f or 0 fits. |
5. Views
The VIEW dropdown chooses how the same record is drawn. Each view answers a different question.
Map
The default. A radial map of the record's direct Dataverse relationships - lookups it points to (Many to One), records that point back at it (One to Many), and many-to-many links. Each circle is named after the field or relationship that creates the link. Group circles (numbered) collapse a set of related records; click to open them. This is the "what is connected to this record" view.
Related colleagues (internal reach)
Who inside your organisation can reach this record - the owner, owning and access teams, and colleagues who have worked an activity (email, call, task) against it. It answers "who else is already involved here". Individual record shares are not shown because Dataverse does not expose them.
External reach
The external parties connected to the record - contacts and accounts on the other side of the relationship.
Org chart
A top-down, expand/collapse tree of the organisation, in two modes toggled at the top:
- Business units - root business unit > teams > users, then child business units and their teams and users.
- Security roles - every security role, and under each the users and teams that hold it (gathered across all business-unit copies of the role and de-duplicated).
Every row carries a type badge - U user, T team, BU business unit, R role - so people and teams are never confused. Expand all / Collapse act on the whole tree. System and application accounts (integration users, service principals, non-interactive accounts, Microsoft's system-managed teams) are hidden by default - turn them on with Show system accounts in Studio.
Estate
A portfolio overview: one circle per configured table with its active record count, centred on the current record. Good for "how big is this account's world" at a glance.
Who knows whom
A person-to-person graph with avatars (Dataverse contact/user photos, or initials), drawing the ties between people - connections, influence lines and shared context - independent of the record hierarchy. It uses a force-directed layout so the people settle into a compact web, and Expand adds only the people around a person (not records), keeping the map readable. This is the relationship-mapping heart of the product.
Hierarchy
The record's own parent/child hierarchy (for tables that have one), drawn top-down.
Health map v4.5.54
A tables-and-charts lens over the same people and organisations the map is drawing, focused on their status rather than their layout. It is a read-only board - it never changes the graph, so switching to it and back is instant. It has four parts, top to bottom:
- Search and scope - a live search box over name, type, role and how each record is reached, plus an All / People / Organisations toggle.
- Filters - an OData-style condition builder (the same shape as the Studio filter wizard, applied client-side to the rows on screen). Add any number of conditions on Name, Type, Role, Reached by, Health or Sentiment, with operators is / is not / contains / does not contain / is one of / is set / is blank, combined with All (AND) or Any (OR). A badge shows how many conditions are active.
- Summary - count tiles (records shown, people, organisations, at-risk, stale, negative sentiment) and three distribution bar charts: by health, by sentiment and by type.
- Table - a sortable list (click any column header) of Name, Type, Role, Health, Sentiment and Reached by. Health and sentiment show a coloured dot. Click a row to open that record in the inspector. Export CSV downloads exactly what the filters currently show.
Sentiment values appear when the AI sentiment feature is enabled (Tier 03 - AI Enablement), and only for contacts, leads and customer accounts - Users, Teams and Business Units show a dash, because sentiment is a customer-side measure (see AI sentiment trend). Rows with a dash are not counted in the sentiment chart or the negative-sentiment tile. The health map is a good starting point for a review meeting - filter to Health is At risk or Sentiment is Negative, sort, and work the list.
Internal signals - engagement & workload v4.5.54
Turn on Internal signals (Studio › Cordex AI) to add the internal overview most CRM tooling lacks: an Engagement column and chart for your own people, teams and business units. It is built from objective activity data - volume (activities in the last 90 days), recency (how recently active), and overdue work - not an AI opinion, and every score explains itself on hover. Records are graded Active, Steady, Low or Idle. Customer-side records (contacts, accounts, leads) show a dash in this column - engagement is an internal measure, just as sentiment is a customer one. This is off by default. When you also want an AI read on staff and teams, the separate AI internal sentiment opt-in adds that on top - see the governance note under AI sentiment trend.
Who can see it. Internal signals carry their own visibility gate (Studio › Cordex AI, under Internal signals): Everyone (any user who can open the map), Specific people & teams (only the users and teams you list - membership is checked as the signed-in user), or No one (the feature stays configured but the engagement column and pill are hidden for all users - a quick off switch that keeps your settings). For a viewer outside the audience the column simply does not appear.
6. Circles, edges & health
Circles (nodes)
Each circle is a record, a person, a team or a group. The focal record sits at the centre with a soft halo. Numbered circles are groups - the number is how many records they hold; open them to see the records.
Edges (lines)
Lines show the relationship kind, distinguished by both colour and line style (so colour-blind users can still read them):
| Line | Meaning |
|---|---|
| Solid | Many to One / Belongs to - this record points out to another. |
| Dashed | One to Many / Has - other records point back at this one. |
| Dotted | Many to Many / Linked with - a two-way join. |
Switch to 3D to see direction arrows. Line style and colours are set per profile in Appearance.
Health
Every record circle is coloured by a hygiene state, driven by how recently it was touched (thresholds are set per profile):
| State | Meaning |
|---|---|
| Healthy | Recently active, within the stale threshold. |
| Stale | Past the stale threshold - overdue a touch. |
| At risk | Past the at-risk threshold - needs attention. |
| Inactive | Deactivated / closed. |
| No hygiene data | People, teams and rows with no activity signal to judge. |
The header strip tallies the counts (e.g. 8 healthy · 4 stale · 3 at risk) so the mix is visible
without reading every circle. Stale and at-risk day thresholds are configured in Studio › Intelligence.
7. The inspector
Click any circle to open its inspector panel (top-right). It carries, from top to bottom:
- Type & name, and a health pill explaining the current state and why.
- Dossier (people) - a one-line read on the person: their role and sentiment, the influence they carry (sways / swayed by), and a short "what to do" note that follows the map's domain focus.
- Sentiment trend (Tier 03 - AI Enablement, when enabled) - see AI sentiment trend.
- Fields - the key columns of the record (owner, value, dates, etc.), currency-aware.
- id - a collapsed toggle revealing the record GUID for support; click to copy.
- Actions - Set as focal (re-centre the map on this record), Expand, Open (open the record), + Add activity or note, and a row of icon buttons: Relate (link a record), Run workflow or flow, and Find on LinkedIn (people). Hover an icon button to see its name.
- Stakeholder section (people, Tier 02 - Intelligence) - tag a role and sentiment; see below.
- Influence lines section (people, Tier 02 - Intelligence) - list, add and edit the person's influence lines.
Which actions appear depends on the tier and on whether the administrator enabled Actions for the profile; when Actions are off the map is strictly read-only.
9. Stakeholders & sentiment Tier 02 - Intelligence
Turn people on the map into a stakeholder picture. In a person's inspector, the Stakeholder section sets:
- Role - the person's part in the decision. The labels follow the map's domain focus (for sales: Decision maker, Influencer, Champion, Blocker, Evaluator; for service, field service and marketing the wording adapts). Stored values stay standard so reporting is comparable across profiles.
- Sentiment - Positive / Neutral / Negative, shown on the map as a coloured ring around the person and named however you set the scale (traffic-light or smiley).
Press Save stakeholder tag to store it. People also carry an engagement pill - Engaged / Warm / Cold - computed from recent activity.
The role-coverage chip
The header shows a coverage chip that follows the focus - buying committee for sales, case contacts
for service, and so on - with a compact count of who is tagged in each role (e.g. D 1 · B 1). It is
your quick read on whether the key roles are covered.
10. Influence lines Tier 02 - Intelligence
Influence lines capture who really sways whom, independent of the org hierarchy. They are curved, dash-dot arrows drawn between two people.
Drawing one
Drag one person's circle onto another - a popup sets the kind and strength, and the dragged circle snaps back. Or use the Influence lines section in a person's inspector: pick a To person, a Kind and a Strength, and press Add influence line. The list shows lines drawn on the map first, then any pointing to someone off-map; click a line to edit it in place, or the ✕ to remove it.
Customising the kinds (Studio)
In Studio › Appearance › Influence lines you can, for the four built-in kinds and up to four custom kinds:
- Rename the built-in kinds (Supports, Blocks, Informs, Reports to).
- Recolour each kind and choose a line style (solid / dashed / dotted / dash-dot).
- Switch a kind off to hide it from the picker (existing lines keep showing).
- Add a custom kind - turn on a Custom row and name it.
Lines are stored per mapped record in the Cordex Relationship Map Influence table.
11. Domain focus
The map adapts to the world of the table it is opened on. Each profile has a Focus (domain) setting in Studio › Actions:
| Focus | Auto-detected from | Adapts |
|---|---|---|
| Sales | account, opportunity, lead, quote, order, invoice, contact | Buying committee, sales role labels, pipeline-framed AI. |
| Customer service | incident (case), entitlement, knowledge, contract | Case contacts; Case owner / Advocate / Detractor / Reviewer; SLA/CSAT-framed AI. |
| Field service | work orders, bookings, agreements, assets (msdyn_*, bookableresource*) | Site contacts; Site owner / Coordinator / Inspector; work-order-framed AI. |
| Marketing | campaigns, lists, journeys, events (msdynmkt_*, msevtmgt_*) | Key contacts; Buyer persona / Advocate; campaign-framed AI. |
| General / custom | anything else | Neutral wording, no sales assumptions. |
Auto is the default; you can override it per profile. Outside Sales the sales-only "buying committee" wording is dropped, the stakeholder role labels change, and Cordex AI is told the domain so its answers are framed for it. Custom tables fall to General unless you set the override.
12. Cordex AI Tier 03 - AI Enablement
The ✨ panel reads the map in plain words. It is invoked only when a user asks, remembers the conversation until Clear chat, and (except the local white-space card) calls the provider only on a question.
What it does
- Brief - an account/case brief from the current map.
- Q&A - ask anything about the map in plain language; quick-question chips adapt to the domain.
- Next best actions - suggested moves from what the map shows.
- White-space & risk card - computed entirely in your browser from the map, no AI call, every tier; it lists the relationships, records and roles that are missing, plus the risks that could lose what you have.
Providers
Set the provider per profile: Claude (Anthropic), Azure OpenAI, or a key-free in-tenant flow for organisations that block direct external AI. Keys resolve in order: the user's own encrypted key, the org key, then a key the user pastes into the panel's 🔑 button (browser only). The model (Claude) and deployment (Azure) are live lookups - press Load to list what the key can actually use. Keys are stored AES-256 encrypted in the Cordex Relationship Map AI Keys table; clear text never touches Dataverse. Full step-by-step provider setup is in the Administration Guide.
Full system access
Off by default: Cordex AI sees only the visible map snapshot. On: it may also run read-only Dataverse queries (activities, pipeline, cases, aggregates) as the signed-in user - their security roles are the ceiling and nothing is ever written. This widens data egress, so re-sign the AI compliance checklist before enabling. This switch also powers the sentiment trend.
Self-serve credentials
Open to all (default) lets anyone add their own key; Restricted limits it to named users and teams. A shared org key still serves everyone.
13. AI sentiment trend Tier 03 - AI Enablement
With Sentiment trend on (Studio › Cordex AI; needs full system access), Cordex AI can read a record's related tables - cases, opportunities, leads, activities and emails - plus any widely-known public context, and form a sentiment for a person, account, lead or custom record. Each reading is saved as a dated point, so a trend builds over time.
In the inspector
- The Sentiment trend card shows the latest level, a trend arrow (▲ improving / ▼ declining / ▬ flat) from the score history, a small sparkline, and dated rows of {date · level · score} with the reason.
- Assess now runs a fresh reading and writes a dated point.
- Accept as tag (people) - the AI suggests, a person confirms it into the sentiment tag.
When it runs
All triggers are off by default: on demand (the button), auto on map open (once per record per day), and an admin-gated monthly refresh. Every assessment spends AI tokens and widens data egress. Points are stored in the Cordex Relationship Map Sentiment table.
14. Actions
Actions are off by default (the viewer is read-only). An administrator enables them per profile in Studio › Actions, and each user still needs their own Dataverse privileges and an Act or Trial licence. When on:
- Create - quick-create activities, notes and related records from a circle.
- Relate - link an existing record over any relationship kind: a lookup (N:1), point another record here (1:N), join many-to-many (N:N), or write a row into a custom intersect table - through a built-in searchable record picker that queries the target table as the signed-in user, so security is honoured. (The picker is rendered in-map rather than via the platform lookup dialog, which does not surface reliably inside the embedded map host.)
- Run workflow or flow - run an on-demand classic workflow, or a mapped Power Automate flow. Flows
are added in Studio via a lookup: build the flow with the "When an HTTP request is received" trigger, load the
environment's flows, pick one, and paste its HTTPS trigger URL. The map POSTs
{table, id, name, user}. - Stakeholder tags and Influence lines - as above (Tier 02 - Intelligence).
15. Exports
| Export | Notes |
|---|---|
| CSV ⤓ | One row per record with its group, linking field, link kind and health - the full relationship context for a spreadsheet. |
| PNG 🖼 | A high-resolution image of the current map. |
| Print / PDF ⎙ | Print the map; use your browser's "Save as PDF". |
| PowerPoint 📽 Tier 02 - Intelligence | The map as a ready-made slide. |
| Full screen ⛶ | Cinema mode for wall displays - lifts above the host chrome. |
16. Studio (administrator)
The ⚙ settings button (admins only) opens Studio, where you build a profile per table. A profile is a JSON configuration stored in the Cordex Relationship Map Config table. Sections:
- Profile & license - which tables the profile applies to, its label, and the licence panel.
- Relationships & tables - which relationships to include/exclude, and per-table filters.
- Intelligence - stale and at-risk day thresholds, edge strength, the sentiment scale.
- Appearance - line style, colours, influence-line editor, 3D (see Appearance).
- Actions - the domain Focus, and the action switches (create, relate, workflows & flows, stakeholder tags, influence).
- Cordex AI - provider, keys, model lookup, grounding context, capability reference, self-serve, full system access, and the sentiment trend toggles.
- Administration - Map access gate, Show system accounts, always-allow tables, and the JSON view.
- Placement - where the map is embedded on a form (table, form, section, height).
Changes are saved to the profile; open maps pick them up on refresh. There is no code deployment - configuration is data.
17. Filter wizard
For each table in a profile you can build a Dataverse OData filter without typing OData, using a wizard modelled on standard condition builders. It caters for every column type and OData shape:
- Conditions per column - text (equals, contains, starts/ends with), numbers and dates (=, ≠, >, ≥, <, ≤), lookups, choices, and is-null / is-not-null.
- Relative dates - e.g. modified in the last N months - using Dataverse's own date functions, so no client clock is trusted.
- And / Or grouping, and an active-only shortcut, or point the table at an existing saved view.
Example: "for accounts show only active accounts modified in the last 3 months" is a two-condition filter built entirely from dropdowns. A raw-OData escape hatch is available for anything the wizard does not cover.
18. Appearance
In Studio › Appearance, grouped into two cards:
Relationship lines
- Line style - by type (solid/dashed/dotted) or all-solid / all-dashed.
- Relationship colours - a colour per kind (Many-to-One, One-to-Many, Many-to-Many), with a live preview.
- Brand presets - one-click brand palettes; any hex is allowed.
- Exact brand colours - off nudges a too-faint colour to stay visible on the map background; on uses your hex exactly.
Button colours v4.5.54
Brand the buttons to match your palette. Primary buttons (the main actions - Set as focal, Expand, Assess now) and secondary buttons (everything else) each take a background, text, hover and click colour. Leave Defaults off and buttons follow the app theme and accent automatically; turn it on to apply your exact colours. The LinkedIn button keeps its own brand blue.
Influence lines
The influence-kind editor (rename / recolour / restyle / enable custom kinds) - see Influence lines.
3D orbit
Enable or hide the 2D/3D switch for the profile's maps.
19. Access & governance
Map access gate
Studio › Administration › Map access controls who may open the map for that table:
| Setting | Effect |
|---|---|
| All users | Anyone with the Cordex role (default). |
| System administrators only | Only System Administrator, System Customizer or the Cordex Administrator role; everyone else sees a short "administrators only" notice. The check is fail-closed, so content never flashes to a non-admin. |
| Off | The map is switched off for that table for everyone, admins included. |
Admin is matched by role template id, so it resolves in any language.
Show system accounts
Off by default - application users, integration users and system-managed teams stay out of the Org chart and Related colleagues views, so you see the real user estate. Turn it on to audit app access.
Security roles
Two roles ship: Cordex Relationship Map User (use the map, own your own stakeholder/influence rows) and Cordex Relationship Map Administrator (full control of the product tables). Grant the roles Create/Read on the Sentiment table if you use the sentiment trend.
Hardening the AI key store
Org and per-user AI keys are stored encrypted (AES-256-GCM) in the Cordex Relationship Map AI Keys table.
The encryption protects the value in transit and at rest, but because the unwrap passphrase ships in the client,
practical secrecy rests on who can read that table. For secrecy-sensitive tenants (for example government),
restrict Read on mitaa_cordexmapaikeys to administrators only, and prefer the in-tenant flow
provider (Power Automate) over the direct browser-to-provider path so the key never reaches the browser.
20. Licensing & seats
Activate a licence by clicking the version badge and pasting a key
(CDXRM-T1|T2|T3-YYYYMMDD-SEATS-CHECK). The licence row is created at that moment, stored encrypted,
in the Cordex Relationship Map Licenses table. Without an active licence the map shows an activation veil
(a licence-table read failure instead falls back to read-only, so a permissions problem never bricks a form).
Seat bands are enforced on the term's high-water mark - the highest number of enabled users holding a Cordex role (directly or via teams) during the term - against the exact licensed seat count, with no churn tolerance. Pricing is flat per organisation per band; there is no per-user metering. Upgrades are pro-rated; downgrades take effect at renewal.
21. Data tables
The solution ships these Dataverse tables. Users rarely open them directly; the web resource reads and writes them through the Web API.
| Table | Holds |
|---|---|
| Cordex Relationship Map Config | One profile per configuration (the JSON that drives a table's map). |
| Cordex Relationship Map Stakeholder | Role + sentiment tags per person per mapped record. |
| Cordex Relationship Map Influence | Influence lines (from, to, kind, strength) per mapped record. |
| Cordex Relationship Map AI Keys | Encrypted org and per-user AI API keys. |
| Cordex Relationship Map Sentiment | Dated AI sentiment points (subject, level, score, reason, sources). |
| Cordex Relationship Map Licenses | The activated licence row and seat band. |
22. Troubleshooting
| Symptom | Cause / fix |
|---|---|
| Map is blank / locked veil | No active licence, or Map access is Off / admins-only for you. Activate a key from the version badge, or check Studio › Administration › Map access. |
| ⚙ settings not visible | You are not an admin. It shows only for System Administrator, System Customizer or the Cordex Administrator role. |
| AI says it needs a key | No org key saved and self-serve is limited. Add an org key in Studio, or the 🔑 button, or ask to be added to the self-serve list. |
| "Assess now" fails to save | The Cordex role lacks Create/Read on the Sentiment table - grant it. |
| System accounts cluttering the org chart | Turn Show system accounts off (Studio › Administration) - it is off by default. |
| Version mismatch | The map badge and Studio show the version; if they differ from the release you imported, you are on a cached copy - publish all customisations. |
23. Accessibility v4.5.61
The map is a visual canvas, so the Health map is the accessible companion to it: the same records, roles, health, sentiment and engagement as a searchable, filterable, sortable table. From 4.5.61 that table is fully keyboard-operable, and the whole product is checked against WCAG 2.1 AA.
Keyboard
Every control is reachable with Tab. In the Health-map table the column headers are real buttons - press
Enter or Space to sort, and the header announces its state (ascending / descending) to screen readers
through aria-sort. Each row is focusable and opens that record's inspector on Enter or
Space, so there is a keyboard path to every record without touching the canvas.
Screen readers
Each table row carries a full spoken label - name, type, role, health, sentiment, and (where shown) the engagement
grade with its reason - so the reading does not depend on seeing a colour dot. Health status is shown as a
shape glyph in the table cell, not colour alone, matching the canvas encoding. The engagement chip and each
sentiment reading expose their reason on focus (and in their aria-label), so the "why" behind a
score is no longer hover-only.
Contrast & theme
Text on primary buttons and pressed controls meets AA (4.5:1) in both light and dark themes. When an administrator sets custom button colours in Studio, a live preview and a contrast check flag any background/text pair that falls below AA and suggests a readable text colour, so a brand override cannot quietly produce unreadable buttons.
Pointer affordance
The hand (pointer) cursor appears only on nodes that actually open something - records and the focal record. Aggregate count bubbles and other non-opening nodes keep the plain cursor, so the pointer never promises a popup that will not appear.