← My IT and Apps·
Cordex-ReferenceCordex-Reference
Cordex-Reference documentation

Cordex-Reference Ops Guide

Components, monitoring, routine tasks, environment copies, incidents and removal.

Cordex ReferenceAudience: Platform administrators and supportGuide v1.0.12Plug-in CordexReference.Plugins 1.0.9.0

Overview

This guide is for the people who run Cordex Reference in your environments: platform administrators and support. It covers what is installed, how to watch it, routine tasks, incidents and removal. Day-to-day administration (licences, filters, views) is in the Admin Guide.

Cordex Reference is a custom virtual table data provider. When Dataverse needs rows from a Cordex table, the provider plug-in reads the table's data source record (service root) and, as the system, its status row and licence (key, permanent filter), translates the Dataverse query into an OData query, calls the Cordex Terminology API and returns the rows. Nothing is cached in Dataverse except the table definitions (10 minutes) and each dataset's column list (10 minutes).

Installed components

ComponentNameDetail
Plug-in assemblyCordexReference.Plugins 1.0.9.0, Sandbox, Database, signedTen plug-in types: AddLicencePlugin, RetrievePlugin, RetrieveMultiplePlugin, LicencePlugin, ValidateLicencesPlugin, GetTablesPlugin, SetTableFilterPlugin, RegisterVariantPlugin, CreateViewPlugin, GetColumnsPlugin
Data providerCordex ReferenceRetrieve and RetrieveMultiple only; read only
Data source tablemitaa_cordexdatasourcemitaa_serviceroot, mitaa_tablename, mitaa_basefilter (variants only). Shipped in the solution and never written after installation; mitaa_licencekey and mitaa_organizationid are no longer used
Licence tablemitaa_cordexlicenceKey (secured), hash (alternate key), hint, plan, expiry, status, message, entitlements (JSON), datasets covered, environment id, last validated
Table statusmitaa_cordextableOne row per Cordex table: status, bound licence, permanent filter copy, variant flag, variant of, last bound; alternate key on mitaa_tablename
Custom APIsmitaa_AddCordexLicence, mitaa_ValidateCordexLicences, mitaa_GetCordexTables, mitaa_SetCordexTableFilter, mitaa_RegisterCordexVariant, mitaa_CreateCordexView, mitaa_GetCordexColumnsRun as the caller. Each requires a privilege on mitaa_cordexlicence or mitaa_cordextable (Execute Privilege Name). Variants are found without mitaa_RegisterCordexVariant (kept for compatibility).
Plug-in stepsLicencePlugin on mitaa_cordexlicenceCreate and Update (filter mitaa_licencekey) PreOperation and PostOperation, Delete PostOperation; synchronous; calling user
Web resourcesmitaa_cordexreference/admin.html, mitaa_cordexreference/adminguide.html, mitaa_cordexreference/opsguide.html and icons under mitaa_cordexreference/brand/
Security rolesCordex Reference User; Cordex Reference AdministratorUser: Read (Organization) on every Cordex table and on mitaa_cordexdatasource. Administrator: the same plus Create, Read, Write, Delete, Append and Append To on mitaa_cordexlicence and mitaa_cordextable. Both associated with the Cordex-Reference app
Virtual tablesUp to 42 (see Admin Guide, Datasets and tables)Each with its own data source record

How a query runs

  1. A user opens a view, Quick Find, form or lookup on a Cordex table.
  2. Dataverse runs RetrievePlugin (one record) or RetrieveMultiplePlugin (a list) and gives it the table's data source record.
  3. The plug-in refuses the call if the record has no key ("not licensed") or carries another environment's id ("this environment is a copy").
  4. It reads the table definition and maps each column to its Cordex property (External Name), checks columns against the dataset's current column list, and builds $select, $filter (permanent filter AND the query's filter), $orderby, $top, $skip and $count.
  5. It calls Cordex over HTTPS with a 20 second timeout and returns the page (up to 5,000 rows per page).

Licence work runs separately: saving, deleting or validating a key calls Cordex once for the plan and once per dataset (up to 100 seconds), stores the result and binds every table.

Monitoring and diagnostics

Plug-in trace log

  1. Settings, Administration, System Settings, Customization, Enable logging to plug-in trace log: All while investigating, Exception otherwise.
  2. Settings, Plug-in Trace Log. Filter Type Name starting with CordexReference.Plugins.
Trace lineMeaning
Cordex GET <url> -> <status> [code] in <ms> ms, release <release>Every call to Cordex: URL (query included, key never), HTTP status, Cordex error code, duration and the release that answered.
G2: data source <id>; licence key found (n characters); permanent filter setThe provider found the table's licence key on its status row and licence. "NOT found" means no licence is bound to the table.
Cordex <table>: page N size S -> R rows, more true|false, release <release>One RetrieveMultiple page returned to Dataverse.
Cordex bind: K valid key(s); <table>: <status>; ...Licence binding after a key save, delete or validation.
Licence <id> was validated in another environment; skipped until it is validated here.Binding ignored a key stamped with another environment id (environment copy).
G12: <column> value is n characters, column maximum is m; returned unchangedCordex returned a value longer than the Dataverse column. Raise the column maximum.
<column>: value ... cannot be converted to <type>; left emptyA value that does not fit the column type. Check the column type against the dataset.
Cordex provider error: ... / Cordex licence error: ... / Cordex admin error: ...An unexpected error with its full exception text.

Health checks

  • Cordex Reference Administration, Licences: every licence Valid, last validated recent, expiry not close.
  • Tables tab: the tables you use show Licensed; none show Data source shared.
  • Trace log: 429 statuses show the key's rate limit is being reached; 5xx or timeouts point to Cordex or the network.
  • Cordex returns the release that answered every call; the Release column on each row shows the same.

Routine tasks

Renew or rotate a key

  1. Licences tab, add the new key (the old one stays bound meanwhile).
  2. Confirm the new key is Valid and tables show it on the Tables tab.
  3. Remove the old licence.

Plan change at Cordex

Validate all. Tables move to Licensed or Not in plan to match the new plan.

Revalidation

Validate all after any renewal or plan change, and at least monthly, so expiry and plan stay current. Validation only reads from Cordex and rewrites the bindings; it is safe to run at any time.

Change a permanent filter

Filters tab, choose the table, Test, then Save. The change applies to the next query; there is nothing to publish.

Add a Cordex table to your own app

In development, add the table to your own app in your own solution; the Cordex-Reference app is part of the managed Cordex solution and is not edited. Each Cordex table opens on its Active view, so users do not page through whole datasets. Move the app on as a managed solution (Admin Guide, Moving changes between environments).

Environment copies and restores

A copied or restored environment carries the source environment's licences and bound keys. To stop a UAT copy from silently using production's key, every licence records the environment id it was validated in, and the provider refuses calls from a different environment until the licence is validated there.

  1. After the copy, users of Cordex tables see "This environment is a copy: its Cordex licence was validated in another environment."
  2. A Cordex Reference administrator opens Cordex Reference Administration in the copy and either removes the source environment's licences and adds the keys meant for this environment, or selects Validate all to use the same keys here.
  3. Validation stamps the new environment id and binds the tables. Check your Cordex agreement before reusing a key from another environment; replace it with this environment's own key where required.

Incidents

All Cordex tables fail

  • Trace shows timeouts, "could not be reached" or 5xx: Cordex or network outage. Licences stay Valid; nothing to change. Retry later.
  • Trace shows 401 or 403 with client_key_*: the key was revoked or expired. Validate all to update statuses; renew or replace the key.
  • "This environment is a copy": see Environment copies.

One table fails

  • Status Not in plan or No licence: add a key that covers it.
  • Status Not published: the dataset is not released yet.
  • Status Data source shared: give each table its own data source record.
  • "Column ... is not in the current Cordex release": remove that column from the filter or sort of the failing view.
  • HTTP 400 bad_filter: the permanent filter or a view condition is invalid; Test the filter on the admin page.

Rate limiting (429)

All users of a key share its limit. Reduce calls: filter default views, set permanent filters, avoid views that page through whole datasets, and consider an Enterprise key (6,000 calls per minute).

Message reference

MessageCauseWhat to do
This Cordex dataset is not licensed in this environment. A Cordex Reference administrator adds a Cordex licence key on the Cordex Licences page; the provider then binds it to every dataset the key covers.No valid key covers the table, or the key was removed.Add or validate a licence that covers the dataset (Licences tab). Check the table status on the Tables tab.
This environment is a copy: its Cordex licence was validated in another environment. A Cordex Reference administrator validates the licence again on the Cordex Licences page.The environment was copied or restored from another environment, so the stored key belongs to the source environment.Licences tab, Validate all. Validation stamps this environment and binds the keys again.
The Cordex licence key was not accepted (HTTP 401 or 403, client_key_...)The key bound to the table is unknown, revoked or mistyped at Cordex.Validate the licence; replace the key if it is reported Invalid.
The Cordex licence has expired (HTTP 403, client_key_expired)The licence passed its expiry date.Renew, then Validate.
The Cordex licence does not include this dataset (HTTP 403, domain_not_entitled)The plan changed at Cordex since the last validation.Validate all: the table moves to Not in plan, or to another key that covers it.
This Cordex dataset is not published, or the service root is wrong (HTTP 404)The dataset is not published yet, or a data source record was edited by hand.Check the Cordex release notes. If a data source record was edited, use See solution layers on it and Remove active customizations.
Cordex rate limit reached; retry after N seconds (HTTP 429)All users in the environment share one key's rate limit (1,200 calls per minute per plan; 6,000 for Enterprise).Retry after the stated time. Use permanent filters and filtered default views to reduce calls.
Cordex is unavailable (HTTP 5xx) / Cordex could not be reached / Cordex did not answer within 20 secondsA Cordex outage or a network problem between Dataverse and Cordex.Retry later. Nothing in Dataverse needs to change.
Column X is not in the current Cordex release of T, so it cannot be filtered or sorted.The dataset's current release has no value in that column. Columns are inferred from each release.Remove the column from the filter or sort. The column shows empty in results until a release carries it again.
Condition operator X is not supported on Cordex virtual tables.The view or query uses an operator the provider does not translate (for example date operators, Contains full text, or joins).Use a supported operator (see Views and searching).
The _ wildcard is not supported on Cordex virtual tables. / The pattern '...' is not supported; use text, text%, %text or %text%.A Like pattern with _ or a % in the middle.Use begins with, ends with or contains.
Cordex virtual tables do not support joins to other tables in a query.A view or Advanced find adds a related table.Query the Cordex table on its own. Lookups from your tables to Cordex tables work; joins inside a Cordex query do not.
Cordex sorts on at most four columns.The view sorts on five or more columns.Sort on four columns or fewer.
Condition In on X has N values; Cordex takes at most 1,000.An In list with more than 1,000 values.Split the list or use a permanent filter.
You do not have permission to access these records.The user has no security role with Read on the table.Assign Cordex Reference User (Admin Guide, Give users access). For a variant table, assign the role from your own solution that gives Read on it.
This key is already added (name). Validate that licence instead of adding the key again.The same key exists on another licence row.Use Validate on the existing row.
You do not have access to Cordex Reference administration (on the administration page)The user has no role that can read the Cordex licence table.Assign Cordex Reference Administrator (Admin Guide, Give users access).
Principal user ... is missing prv...mitaa_cordexlicence or prv...mitaa_cordextable privilegeA Cordex Custom API was called by a user without an administrator role. Each Cordex Custom API requires a table privilege.Assign Cordex Reference Administrator.
Licence ... has no stored key. Remove it and add its key again.A licence row has an empty key column.Remove the licence and add its key again on the Licences tab.
A table filter is at most 2,000 characters. / A table filter is one line of OData $filter text.The permanent filter is too long or contains line breaks.Shorten the filter or use in (...) lists.
Cordex rejected the query (HTTP 400, bad_filter: ...)The permanent filter or a view condition is not valid OData for this dataset (for example an unknown column name or wrong case).Fix the filter. Column names are case-sensitive and must match the Cordex property (the Filters tab builder lists them; in OData text mode they are chips).

Removing Cordex Reference

  1. Remove every licence on the Licences tab. Every table then reports No licence.
  2. Remove your own lookups to Cordex tables, and your own views, forms and app references to them.
  3. Uninstall your own solutions that hold variant tables, views or apps built on Cordex tables. In development, delete the variant tables and their Cordex data source records from your unmanaged solution.
  4. Uninstall the solution.
Data source records created after installation can block removal of the provider and tables. Remove licences and your own components first. No reference data is stored in Dataverse, so nothing else needs to be exported or deleted.

Limits

LimitValue
Rows per page from CordexUp to 5,000 (Dataverse asks for its page size)
Values in an In list1,000
Sort columns4
Permanent filter length2,000 characters, one line
Licence key length200 characters
Call timeout20 seconds per call to Cordex
Licence validation budget100 seconds (plug-ins stop at 2 minutes)
Table definition and column list cache10 minutes
Rate limit per key1,200 calls per minute; Enterprise 6,000
Text columnsSingle line of text 4,000; ICD-11 Definition is Multiline Text

Data sources and licences

Cordex Reference stores no reference data in Dataverse. Every row is read from the Cordex Terminology API when a user opens a view, form or lookup. Each dataset stays under its publisher's licence, and your organisation must meet those terms when it uses or displays the data.

TablesSource and licenceNotes
SNOMED CT-AU (with AMT)NCTS; SNOMED CT Affiliate Licence and the Australian National Terminology LicenceYou need your own SNOMED CT Affiliate and NCTS licence to use this content.
Notifiable Disease (AU)Federal Register of Legislation; CC BY 4.0Attribute the Federal Register of Legislation.
LOINCRegenstrief Institute; LOINC licence (no cost)Field names and contents are served unchanged, as the LOINC licence requires. Codes with third-party content carry the owner's notice in EXTERNAL_COPYRIGHT_NOTICE; use of that content is subject to the owner's terms.
ICD-11 MMSWorld Health Organization; CC BY-ND 3.0 IGONo derivative works of the classification.
CDC code sets (CVX, MVX, vaccine groups, VIS, products, NDC, ICD-10-CM, NNDSS)US Government works in the public domainCPT to CVX: CPT content is Copyright American Medical Association.
Address and Address Area (AU)Geoscape via data.gov.au; Open G-NAF End User Licence Agreement
Country, Subdivision, Language, CurrencyUnicode CLDR; Unicode License v3
Time ZoneIANA tz (public domain) and Unicode CLDR
Calling Codelibphonenumber metadata (Apache-2.0) via libphonenumber-js (MIT)
Sex and Gender (AU), Occupation (AU)Australian Bureau of Statistics; CC BY 4.0Occupation is OSCA 2024 v1.0.
EmojiUnicode emoji data; Unicode License v3
UnitBIPM SI Brochure; CC BY 4.0
ElementIUPAC names and symbols
Taxonomy (GBIF) and the nine kingdom tablesGBIF Secretariat, GBIF Backbone Taxonomy; CC BY 4.0One dataset for all kingdoms. Attribute GBIF.