Reference manual

Objects page

Objects panel

The objects panel lists every object in the workspace and in the apps it depends on, under the heading Objects. By default it groups them by module, then by object type. Use it to find an object by name, number, namespace or source folder, to narrow the list to some types or marks, to group it the way you think about the code, and to open an object in the Object view.

Opening it

The objects panel.
#NameDescription
1Collapse all nodesCollapses every group.
2Expand all nodesExpands every group.
3Reveal current objectSelects the object shown in the object view and scrolls to it. See Browsing.
4ExpandFills the window with the objects and shows their details in columns (Ctrl+Shift+E). See Expanded view.
5Toggle search boxShows or hides the search box. A hidden box keeps its search.
6FilterOpens the filter popup. The icon changes and turns accent colored while a filter is set. See Filter popup.
7Group byThe gear. Opens the grouping and sorting popup. See Group by popup.
8SearchNarrows the tree to the objects that match a name, number, namespace or folder. See Searching.
9Object treeThe groups and their objects. See Rows.

Rows

A module, its type groups and its objects.
#NameDescription
1Module rowThe module's source icon, its name and, smaller and dimmed, its publisher.
2Type rowThe object type's icon and name.
3Object rowThe object's number, when shown, and its name.
4PillA property of the object worth knowing at a glance.
5BookmarkThe object is bookmarked.
6Visited dotYou have opened the object before in this workspace.

The tree has one kind of row per grouping level, and the objects as its leaves:

RowShows
Module A source icon, then the module's name and its publisher. The icon is a package for an .app file in the package cache, or a folder for an app.json in a workspace folder; hover over it for which. Its color shows the state: caution for a package that only search depth All loads, which may be outdated, or for a folder under local Git version control; success for a folder whose Git repository tracks a remote. A caution mark after the name means the package has no AL source files, so Prism shows its symbols only. A test pill marks a test module.
TypeThe type's icon and name, such as Table or TableExtension.
Namespace or Folder A namespace or folder icon and the group's name; hover over it for the full namespace or path. The placeholders global (no namespace), module root (files in the module's root folder) and no source (objects without a source file) are in italics. See Group by popup.
Object The type icon, the number while View › Show › Object Numbers is on, the name, then its marks and pills. Under a type row the object leaves out its icon, since the type row names the type.

An object row can carry these marks:

  • Type icon: colored by object type. An extension type, such as a table extension, adds a small plus badge; a page customization adds a pen.
  • Red error mark before the name: “Failure translating object to code graph.”
  • Bold name: the object has codeline selections.
  • Green bookmark: “This object is bookmarked.” Toggle it from the Object context menu.
  • Gray dot: “You have previously navigated to this object in this workspace.”
  • Half opacity: the object's ObsoleteState is Removed.

Pills follow the marks. Hover over a pill for the property, its value and what it means, such as “DataPerCompany = false — Table data is shared across all companies”.

PillShown when
test, test·runner, upgrade, installA codeunit's SubType is not Normal.
The page type, such as card, list, list·part or role·centerA page sets PageType.
no·printProcessingOnly = true: the report produces no printed output.
globalDataPerCompany = false: the table's data is shared across companies.
singletonSingleInstance = true: one instance of the codeunit per session. Green.
no·requestUseRequestPage = false: the report shows no request page.
sealedExtensible = false: the object cannot be extended.
internalAccess = Internal: the object is not accessible outside its module.
externalThe table's TableType is not Normal: its data comes from an external source.
apiQueryType = API: the query exposes a REST API endpoint.
tempSourceTableType = Temporary: the page has no database backing.
pending, pendingmove, moved, removedThe object's ObsoleteState. In the caution color.

Hover over an object row for the tooltip that object references show throughout Prism.

Browsing

Group rows pinned above the objects while you scroll.
#NameDescription
1Pinned group rowsThe groups the top object belongs to, one row per level.
2Selected objectThe object open in the object view.
  • Select an object to open it in the object view; moving to it with the arrow keys opens it too. Selecting a group row opens nothing. Double-clicking an object opens it again, even when it is already open.
  • While you scroll through a group, its row and the rows of the groups above it stay pinned at the top. Select a pinned row to scroll back to the start of its group; select its chevron to collapse the group.
  • Right expands a group or steps into its first row; Left collapses it or steps out to its parent. Alt+Left, Alt+Right and Ctrl+Space go back, forward and to the current location, as the Navigation arrows do.
  • Reveal current object selects the object shown in the object view, expands the groups above it and scrolls it about a quarter of the way down the panel. It cannot show an object the search or the filter hides: clear them first.

Searching

The objects panel narrowed by a search and a filter.
#NameDescription
1FilterAccent colored while a filter is set.
2SearchA namespace term followed by a name. The tree narrows as you type.
3Showing N of MHow many objects the search and the filter leave. See Showing N of M and Clear filter.
4Clear filterResets the filter. The search stays.

Type in the box with the placeholder Search, under the panel's header. A group stays in the tree while it holds a matching object. The box matches object numbers and names with the name and number search:

You typeMatches
18Objects with number 18.
18..20Numbers 18 to 20, both included.
50000.. or ..99Numbers from 50000, or up to 99.
customerNames that contain customer, in any case, with the default search syntax.
sales*lineNames with sales and later line. * stands for any run of characters, ? for one character.
18..20|customer| means or: objects that match any of the parts.

A part that is a number or a range matches the object number only; any other part matches the name. An expression the box cannot read is outlined, with one of these messages: “Id range requires at least one endpoint”, “Or-pattern (pipe) requires a filter on left and right side” or “Incomplete pattern”.

How a name part matches depends on Search syntax in the Filter popup:

Search syntaxA name matches whencust matches
String with WildcardsThe whole name matches the text, with * and ? as wildcards.Only a name that is cust; type cust* for names that start with it.
Substring with Wildcards (default)The name contains the text, with * and ? as wildcards.Customer, Cust. Ledger Entry, Detailed Cust. Ledg. Entry.
Character SequenceThe name contains the characters in the order typed, with anything between them, as the command box of Visual Studio Code matches.Also Contact Business Relation: c, u, s, t in order.

Start the search with a location term to narrow it to a namespace or a source folder. The rest of the text is the name and number search.

TermKeeps
ns:Microsoft.SalesObjects in the namespace Microsoft.Sales and the namespaces below it.
ns:globalObjects declared without a namespace.
path:src/SalesObjects whose source file is in the folder src/Sales, or below it, relative to the module's root folder. Write / or \.
ns:*.Sales, path:src/*Test*Within a part, * stands for any run of characters and ? for one.
  • Terms count only at the start of the search, each followed by a space; ns: later in the text is plain text.
  • With several terms, an object must satisfy all of them: ns:Microsoft.Sales path:src/Posting post.
  • Each part of a term matches a whole part of the namespace or path, without regard to case: ns:Microsoft.Sale does not match Microsoft.Sales. An object without a source file never matches path:.
  • Right-click a namespace or folder group and select Filter to this namespace or Filter to this folder to write its term for you; see Namespace and folder context menu.

The search box is not Universal Search (Ctrl+T). The panel narrows its own tree in place, by object number, name, namespace and folder. Universal Search lists ranked results across objects and their members, and has its own filter tokens: it has ns: but no path:, and its in:view keeps the objects that match the panel's name and number search.

Showing N of M and Clear filter

While the search or the filter hides any object, a line under the search box reads Showing N of M: N objects shown of the M in the panel.

  • Hover over it for Showing N of M objects and a line for each part that hides objects: Object types (such as “Extensions only” or “Hiding tables, pages”), Show only (“bookmarked and visited”), Obsolete (such as “Hidden” or “Only pending”) and Search, then “Click to edit the filter”.
  • Select it to open the filter popup.
  • Clear filter, shown while a filter is set, resets the filter: “Reset the filter; the search stays”. Empty the search box to clear the search.

Filter popup

Select Filter in the panel's header, or the Showing N of M line, to open the popup. Your choices apply as you make them.

The filter popup.
#NameDescription
1Reset“Reset filter settings (does not affect the search expression)”. Shows every type and clears Show only and Obsolete.
2ScopeAll objects, Base only, Extensions only or Customizations.
3Type tableA check box per type, with the number of objects, in the columns Base and Extension.
4Only“Show only the types on this row”. Appears on the row you point at.
5Bookmarked“Hide objects that do not have a bookmark”.
6Visited“Hide objects that have not been visited yet”.
7ObsoleteAny, Hide or Only.
8Obsolete statesPending, Removed, Pending move and Moved, shown under Hide and Only.
9Search syntaxHow the search box matches names.
OptionValuesDefaultEffect
Object types scope All objects, Base only, Extensions only, Customizations All objects Checks the types of the scope and clears the rest. Extensions are table, page, report, enum, profile and permission set extensions; customizations are page customizations; base is every other type. The switch offers only scopes the workspace has objects of, and it is hidden when the workspace has nothing to choose between. After you change the type table by hand, no scope is selected.
Type table A check box per type: Tables, Pages, Page customizations, Reports, Codeunits, XmlPorts, Queries, ControlAddIns, Enums, Profiles, DotNet, Interfaces, PermissionSets, Entitlements All checked Clear a box to hide that type. A row holds a type and its extension type, so Tables has a box for tables under Base and one for table extensions under Extension. Types the workspace has no objects of are left out.
Show only › BookmarkedOn, offOffShows only bookmarked objects. The count is how many there are.
Show only › VisitedOn, offOffShows only objects you have opened in this workspace. With both on, an object must be both.
Obsolete Any, Hide, Only Any Any hides nothing. Hide hides the objects whose ObsoleteState is one of the checked states; Only shows only those. Choosing Hide or Only checks all four states; clearing all four returns to Any.
Search syntax String with Wildcards, Substring with Wildcards, Character Sequence Substring with Wildcards How the search box matches names; see Searching. Applies at once, to every workspace, and stays after a restart. Reset leaves it alone.

The counts of bookmarked and visited objects are taken when the popup opens. The filter is not saved: it starts empty each time you open the workspace, and it resets when you change the grouping or sorting.

Group by popup

Select the gear in the panel's header to choose how the tree groups and sorts the objects. The changes apply when the popup closes, and Prism keeps them for the workspace.

The Group by popup.
#NameDescription
1PresetsThe common groupings, one selection each.
2Reset“Reset grouping and sorting to the defaults”.
3Grip“Drag to reorder.” Drag a level up or down.
4Move level up, Move level downMove the level one place. Each shows only where the level can move.
5Level switchTurns the level on or off.
6Sort keyWhat the level sorts by.
7DirectionFlips the sort between Ascending and Descending, as its tooltip shows.
8PreviewThe largest groups the levels produce.

The levels are listed outermost first. Object is always last and always on; its lock reads “Objects always come last.”

LevelDefaultSort keysDefault sort
ModuleOnTopology, Publisher, NameTopology, descending
NamespaceOffName onlyAscending
FolderOffName onlyAscending
TypeOnType order onlyAscending
ObjectAlwaysName, Id, TopologyName, ascending
  • Topology sorts by Topological order: ascending puts what a module or object depends on before it, so the default descending order puts the modules that depend on others first.
  • Publisher sorts modules by publisher, then name. Id sorts objects by number.
  • Type order is fixed: Table, TableExtension, Page, PageExtension, PageCustomization, ControlAddIn, Report, ReportExtension, Codeunit, Interface, XmlPort, Query, Enum, EnumExtension, Profile, ProfileExtension, DotNet, PermissionSet, PermissionSetExtension, Entitlement.
  • Namespace and folder groups sort by name, with the placeholders before the named groups.

The presets set the grouping levels:

PresetGroups by
Module › TypeModule, then object type. The default.
NamespaceNamespace only, across all modules.
Module › NamespaceModule, then namespace.
Namespace › ModuleNamespace, then the modules that declare objects in it.
Module › FolderModule, then source folder.
  • A preset turns its levels on, in its order and first, and turns the other grouping levels off. It keeps the sort keys and directions; Reset restores those too.
  • The selected preset follows your changes to the levels: none is selected when the levels match no preset.
  • Namespace nests groups by the namespace's parts, without regard to case. A group that holds nothing but one subgroup merges with it, so the row reads Microsoft.Sales rather than two rows. Objects declared without a namespace go under global.
  • Folder nests groups by the source file's folder, relative to the module's root folder. Files in the root folder go under module root; objects without a source file, such as those of a package with symbols only, go under no source.
  • A namespace or folder level that would put all of a group's objects in one placeholder is left out for that group, so a module whose files all sit in its root folder shows its objects directly.
  • As the top level, Module shows every module, including those without objects. Under another level it shows only the modules with objects there.

The preview, captioned Largest groups of N objects, shows the six largest top-level groups, each with up to three of its largest subgroups and the number of objects in each, then and N more. With every grouping level off it reads “No grouping: objects are listed directly.”

When the popup closes with any change to the levels, sort keys or directions, the tree is rebuilt and the filter is reset; the search stays.

Expanded view

Select the expand button in the panel's header (“Fill the window with the objects and show their details in columns”), or press Ctrl+Shift+E anywhere in the workspace window, to let the panel fill the window, over the object view and the outline, with each object's details in columns.

  • Selecting a row opens nothing. Press Enter on an object, or double-click it, to open it and return the panel to its column.
  • Press Esc in the panel, Ctrl+Shift+E again, or select the expand button again to return without opening.
  • The search, the filter and the grouping work as in the column.
The expanded objects panel.
#NameDescription
1ExpandOn while the panel fills the window. Select it to return.
2Column headers“Right-click to choose the columns”.
3Object rowAn object with its column values. Press Enter or double-click to open it.
Choosing the columns.
#NameDescription
1Column headersRight-click them for the column menu.
2Column menuA check mark per chosen column. Select a column to show or hide it; the menu stays open, so you can choose several.

The columns, left to right after Name:

ColumnDefaultShows
CaptionOffThe object's caption, blank when it repeats the name.
ExtendsOn“The object an extension object extends”.
Source tableOn“The table a page shows; a page extension's is its base page's”.
Extended byOn“Extension objects that extend the object”: how many, blank for none.
EventsOn“Event publishers the object declares”: how many, blank for none.
NamespaceOnThe object's namespace.
FolderOffThe source file's folder, relative to the module's root folder.
ModuleOnThe object's module.
  • A chosen column still hides while a grouping level shows the same detail (Module, Namespace or Folder), and while no shown object has a value for it. With the default grouping, Module is hidden.
  • A column is as wide as its widest value, up to a limit. When the names and the columns do not both fit, Caption, Folder, Source table, Extends, Module and Namespace narrow, in that order; a name too long for the space left is cut.
  • The headers do not sort. The order comes from the Group by popup.

Module context menu

Right-click a module row:

Namespace and folder context menu

Right-click a namespace group, a folder group or global. The module root and no source placeholders have no menu.

Object context menu

Right-click an object row. The same menu opens on object references elsewhere in Prism, such as the current object on the Objects page. Without a license, a command Prism limits shows (Unlicensed) after its name and is unavailable.

What Prism remembers

WhatKept
Grouping: which levels are on, their order, sort keys and directionsPer workspace. The panel reopens as you left it.
The columns you chose for the expanded viewPer workspace.
Search syntaxFor all workspaces.
View › Show › Objects and View › Show › Object NumbersFor all workspaces.
The search, the filter, whether the search box is hidden, and whether the panel is expandedNot kept. Each starts afresh when you open the workspace.

Browse the objects of one namespace

Use this to work through one area of the application, whichever modules it spans.

  1. Select the gear in the panel's header, select the Namespace preset, and close the popup.
  2. Expand the namespaces down to the one you want, right-click it and select Filter to this namespace.
  3. Optionally type a name after the term in the search box, such as ns:Microsoft.Sales.Document post.

The tree shows only that namespace and those below it, and Showing N of M says how many objects that is. Empty the search box to see every namespace again.

List pages with their source tables

Use this to see which table each page shows, and which pages are extended.

  1. Select Filter, point at the Pages row of the type table and select Only.
  2. Press Ctrl+Shift+E to expand the panel.
  3. Read Source table and Extended by; right-click the column headers to hide the columns you do not need.
  4. Press Enter on a page to open it.