Interop References page
The Interop References page of the Workspace window lists every DotNet, Automation and OCX type the workspace uses, one row per type. Each type is rated for a move to Business Central online, which runs no .NET, COM or OCX, and named with its AL replacement where one is known. A plan by object shows what each object needs before it can move.
Opening the Interop References page
- Select Interop References in the workspace window's navigation rail.
- In Universal Search, type
interopand choose the page under Pages.
The page is listed when Show Interop References page is on; see Hiding the page.
Scanning the workspace
The page scans the workspace the first time you open it: global variables, procedure and trigger locals, parameters and return values. It counts how often each variable is used in code.
| Status | Meaning |
|---|---|
| Scanning workspace…, then Scanned N of M objects | The scan runs. The page's dot in the navigation rail is amber. |
| The lists | The scan is done. The dot is green. |
| Scan aborted or Scan failed: …, with Open this page again to rescan the workspace. | The scan did not finish. Leave the page and open it again to rescan. |
| No .NET / COM automation dependencies and This workspace is interop-free. | The workspace uses no interop types. |
A finished scan is kept while the workspace window is open, so leaving the page and coming back keeps the search and the sort.
By type

| # | Name | Description |
|---|---|---|
| 1 | Migration Risk Legend | Hover to read what each risk level means. See Risk levels. |
| 2 | Risk strip | The number of types at each level, High, Unknown, Medium and Low, each segment as wide as its share. Select a level to list only its types; select it again to list all. One level filters at a time. |
| 3 | AL replacement known | N of T types · K without one: how many types have a known Business Central replacement, and how many need a design decision. |
| 4 | Inventory | Types, objects and references, and how many run on the client, are OCX, have events, are signed, are .NET interop and are native COM. Names how many objects could not be scanned, if any; the log has the details. |
| 5 | By type / By object | By type: one row per interop type, with a detail pane for the selected type. By object: what each object needs; see By object. |
| 6 | Search | Matches types, assemblies, objects and variables. See Search and filters. |
| 7 | Filter by kind and object type | Opens the filters for kind, object type and object IDs. See Search and filters. |
| 8 | Count | How many types the search and filters leave, such as 12 of 40 types. |
| 9 | Summary / Detail | Copy the list to the clipboard; see Exports. |
| 10 | Types | One row per type; see Type columns. |
| 11 | Detail pane | The selected type; see Type details. |
Type columns
| Column | Shows |
|---|---|
| Risk | High, Unknown, Medium or Low. |
| Type | The .NET class, or the Automation or OCX class. |
| Library or assembly | The .NET assembly or the COM type library. |
| Kind | DotNet, Automation or OCX. |
| Objects | How many objects declare a variable of the type. |
| Variables | How many variables have the type. |
| Uses | The uses of those variables in code. |
| Runs on | Where the type runs, such as Client or Server. |
| AL replacement | The known Business Central replacement, if any. |
Select a header to sort by it, and again to reverse; an arrow shows the order. Count columns sort largest first. By default the list runs from High to Low risk, then by most objects.
A use is a reference to the variable in code. A variable with no uses reads unused: delete it before migrating. A WithEvents variable with no uses in code reads events only and does not count as unused.
Type details

| # | Name | Description |
|---|---|---|
| 1 | Risk and reason | The selected type's risk level, its name, library and kind, and why it has that level. An unidentified Automation server is marked Unknown Automation Server. |
| 2 | AL replacement | The Business Central replacement, or None known: this type needs a design decision. |
| 3 | Identity | CLSID, Server, .NET and Reference as the objects declare it. The copy button copies the reference, version, public key token and CLSID. |
| 4 | Used in | Used in N objects · M variables · K uses, then each object with Go to, and under it each variable: its name, scope such as Local in OnRun · WithEvents · No Dispose, its uses and where it runs. |
When the search and filters leave no type, the detail pane reads No type is listed: change the search or filters.
Risk levels
Every reference has to be rewritten for Business Central online; the level ranks the rewrite.
| Level | Types | What it takes |
|---|---|---|
| High | OCX controls, and .NET that runs on the client (Runs on Client or Mixed). | The web client hosts neither, online or on-premises: a JavaScript control add-in or a server-side rewrite. |
| Unknown | Automation whose COM server the exported objects do not name. | Re-export the objects on a machine where the server's type library is registered, or register the class on this machine, so Prism can identify it. |
| Medium | COM Automation servers (AL has no Automation type), and server-side .NET WithEvents. | Native AL types, a JavaScript control add-in or an external service. |
| Low | Server-side .NET, and .NET assemblies registered for COM. | Online, native AL types or an external service; on-premises, an extension that targets OnPrem can still reference the assembly. |
NAV writes Unknown Automation Server into the objects it exports when the server is not registered. The objects still carry the class CLSID, so Prism identifies the server on a machine where that class is registered.
By object

| # | Name | Description |
|---|---|---|
| 1 | Plan | Objects to change, how many need a redesign, need an external service or are covered by AL types, and how many unused variables to delete first, over the objects the search and filters list. |
| 2 | Plan | Copies the plan, one row per object and type. See Exports. |
| 3 | Object | Risk dot, name, and a caption such as Codeunit 50102 · 6 variables · 4 types · 2 unused. |
| 4 | Verdict | What the object needs; see the table below. |
| 5 | Go to | Opens the object on the Objects page. |
| 6 | Type | A type the object uses, with its uses and replacement, such as XmlDoc · 1 use → and the AL type, … · no AL replacement, or unused · delete. Its variables are listed under it. |
| Verdict | When |
|---|---|
| Needs a redesign | The object uses a type at High or Unknown risk. |
| AL types cover it | Every type the object uses has an AL replacement. |
| Needs an external service | Any other object. |
Search and filters

| # | Name | Description |
|---|---|---|
| 1 | Search | Matches types, assemblies, objects and variables. |
| 2 | Kind | The interop kinds to list, with All and None. |
| 3 | Object type | The object types to list, with All and None. |
| 4 | Object IDs | ID ranges to list, such as 50100..50199, 50300. |
The search box matches types, assemblies, objects and variables, a moment after you stop typing. A type whose name, assembly or reference matches keeps all its objects; otherwise only the objects whose name or variables match are kept.
| Filter | Choices |
|---|---|
| Kind | DotNet, Automation and OCX, with All and None. |
| Object type | Codeunit, Table, Page, Report, XmlPort, Query, Form, Dataport and MenuSuite, with All and None. |
| Object IDs | ID ranges such as 50100..50199, separated by , or |; - also marks a range, and ranges can be open-ended. |
The search and filters apply to both views, to the counts and to the exports.
Exports
Each export copies tab-separated text with a header row to the clipboard, following the search and the filters. Paste it into a spreadsheet.
| Export | Rows | Columns |
|---|---|---|
| Summary (By type) | One per type | Type, Kind, Assembly, Objects, Variables, Uses, Unused, RunOn, DotNetAssembly, DotNetClass, RuntimeVersion, AssemblyLocation, Events, SuppressDispose, Unidentified, Risk, ALReplacement |
| Plan (By object) | One per object and type | ObjectType, ObjectId, ObjectName, Verdict, Type, Kind, Assembly, Risk, Variables, Uses, Unused, RunOn, ALReplacement |
| Detail (both) | One per variable | ObjectType, ObjectId, ObjectName, Scope, Variable, Kind, Type, Assembly, RawRef, RunOn, WithEvents, SuppressDispose, Uses, DotNetAssembly, DotNetClass, RuntimeVersion, AssemblyLocation |
Plan the interop work for a move to Business Central online
Use this to size and order the interop work before a move to Business Central online.
- Open the Interop References page and wait for the scan to finish.
- Select By object. The plan line counts the objects to change and the unused variables.
- Delete the variables marked unused · delete first: select Go to on their object.
- Open Filter by kind and object type and type your own ID range under Object IDs to leave out standard objects.
- Select Plan to copy the plan, and paste it into a spreadsheet to assign the work.
Find the objects that use a type
- Select By type and type part of the type or assembly name in the search box.
- Select the type. The detail pane lists each object that uses it, with its variables.
- Select Go to on an object to open it.
Hiding the page
To remove the page from the navigation rail, turn off Show Interop References page on the Settings page. It is on by default, and the change applies at once.