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
- It is the left panel of the Objects page.
- When it is hidden, select View › Show › Objects. It is on by default.
- Press Ctrl+Shift+E anywhere in the workspace window to let it fill the window; see Expanded view.
| # | Name | Description |
|---|---|---|
| 1 | Collapse all nodes | Collapses every group. |
| 2 | Expand all nodes | Expands every group. |
| 3 | Reveal current object | Selects the object shown in the object view and scrolls to it. See Browsing. |
| 4 | Expand | Fills the window with the objects and shows their details in columns (Ctrl+Shift+E). See Expanded view. |
| 5 | Toggle search box | Shows or hides the search box. A hidden box keeps its search. |
| 6 | Filter | Opens the filter popup. The icon changes and turns accent colored while a filter is set. See Filter popup. |
| 7 | Group by | The gear. Opens the grouping and sorting popup. See Group by popup. |
| 8 | Search | Narrows the tree to the objects that match a name, number, namespace or folder. See Searching. |
| 9 | Object tree | The groups and their objects. See Rows. |
Rows
| # | Name | Description |
|---|---|---|
| 1 | Module row | The module's source icon, its name and, smaller and dimmed, its publisher. |
| 2 | Type row | The object type's icon and name. |
| 3 | Object row | The object's number, when shown, and its name. |
| 4 | Pill | A property of the object worth knowing at a glance. |
| 5 | Bookmark | The object is bookmarked. |
| 6 | Visited dot | You have opened the object before in this workspace. |
The tree has one kind of row per grouping level, and the objects as its leaves:
| Row | Shows |
|---|---|
| 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.
|
| Type | The 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
ObsoleteStateisRemoved.
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”.
| Pill | Shown when |
|---|---|
| test, test·runner, upgrade, install | A codeunit's SubType is not Normal. |
| The page type, such as card, list, list·part or role·center | A page sets PageType. |
| no·print | ProcessingOnly = true: the report produces no printed output. |
| global | DataPerCompany = false: the table's data is shared across companies. |
| singleton | SingleInstance = true: one instance of the codeunit per session. Green. |
| no·request | UseRequestPage = false: the report shows no request page. |
| sealed | Extensible = false: the object cannot be extended. |
| internal | Access = Internal: the object is not accessible outside its module. |
| external | The table's TableType is not Normal: its data comes from an external source. |
| api | QueryType = API: the query exposes a REST API endpoint. |
| temp | SourceTableType = Temporary: the page has no database backing. |
| pending, pendingmove, moved, removed | The object's ObsoleteState. In the caution color. |
Hover over an object row for the tooltip that object references show throughout Prism.
Browsing
| # | Name | Description |
|---|---|---|
| 1 | Pinned group rows | The groups the top object belongs to, one row per level. |
| 2 | Selected object | The 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
| # | Name | Description |
|---|---|---|
| 1 | Filter | Accent colored while a filter is set. |
| 2 | Search | A namespace term followed by a name. The tree narrows as you type. |
| 3 | Showing N of M | How many objects the search and the filter leave. See Showing N of M and Clear filter. |
| 4 | Clear filter | Resets 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 type | Matches |
|---|---|
18 | Objects with number 18. |
18..20 | Numbers 18 to 20, both included. |
50000.. or ..99 | Numbers from 50000, or up to 99. |
customer | Names that contain customer, in any case, with the default search syntax. |
sales*line | Names 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 syntax | A name matches when | cust matches |
|---|---|---|
| String with Wildcards | The 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 Sequence | The 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.
| Term | Keeps |
|---|---|
ns:Microsoft.Sales | Objects in the namespace Microsoft.Sales and the namespaces below it. |
ns:global | Objects declared without a namespace. |
path:src/Sales | Objects 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.Saledoes not matchMicrosoft.Sales. An object without a source file never matchespath:. - 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.
| # | Name | Description |
|---|---|---|
| 1 | Reset | “Reset filter settings (does not affect the search expression)”. Shows every type and clears Show only and Obsolete. |
| 2 | Scope | All objects, Base only, Extensions only or Customizations. |
| 3 | Type table | A check box per type, with the number of objects, in the columns Base and Extension. |
| 4 | Only | “Show only the types on this row”. Appears on the row you point at. |
| 5 | Bookmarked | “Hide objects that do not have a bookmark”. |
| 6 | Visited | “Hide objects that have not been visited yet”. |
| 7 | Obsolete | Any, Hide or Only. |
| 8 | Obsolete states | Pending, Removed, Pending move and Moved, shown under Hide and Only. |
| 9 | Search syntax | How the search box matches names. |
| Option | Values | Default | Effect |
|---|---|---|---|
| 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 › Bookmarked | On, off | Off | Shows only bookmarked objects. The count is how many there are. |
| Show only › Visited | On, off | Off | Shows 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.
| # | Name | Description |
|---|---|---|
| 1 | Presets | The common groupings, one selection each. |
| 2 | Reset | “Reset grouping and sorting to the defaults”. |
| 3 | Grip | “Drag to reorder.” Drag a level up or down. |
| 4 | Move level up, Move level down | Move the level one place. Each shows only where the level can move. |
| 5 | Level switch | Turns the level on or off. |
| 6 | Sort key | What the level sorts by. |
| 7 | Direction | Flips the sort between Ascending and Descending, as its tooltip shows. |
| 8 | Preview | The 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.”
| Level | Default | Sort keys | Default sort |
|---|---|---|---|
| Module | On | Topology, Publisher, Name | Topology, descending |
| Namespace | Off | Name only | Ascending |
| Folder | Off | Name only | Ascending |
| Type | On | Type order only | Ascending |
| Object | Always | Name, Id, Topology | Name, 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:
| Preset | Groups by |
|---|---|
| Module › Type | Module, then object type. The default. |
| Namespace | Namespace only, across all modules. |
| Module › Namespace | Module, then namespace. |
| Namespace › Module | Namespace, then the modules that declare objects in it. |
| Module › Folder | Module, 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.Salesrather 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.
| # | Name | Description |
|---|---|---|
| 1 | Expand | On while the panel fills the window. Select it to return. |
| 2 | Column headers | “Right-click to choose the columns”. |
| 3 | Object row | An object with its column values. Press Enter or double-click to open it. |
| # | Name | Description |
|---|---|---|
| 1 | Column headers | Right-click them for the column menu. |
| 2 | Column menu | A 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:
| Column | Default | Shows |
|---|---|---|
| Caption | Off | The object's caption, blank when it repeats the name. |
| Extends | On | “The object an extension object extends”. |
| Source table | On | “The table a page shows; a page extension's is its base page's”. |
| Extended by | On | “Extension objects that extend the object”: how many, blank for none. |
| Events | On | “Event publishers the object declares”: how many, blank for none. |
| Namespace | On | The object's namespace. |
| Folder | Off | The source file's folder, relative to the module's root folder. |
| Module | On | The 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
| What | Kept |
|---|---|
| Grouping: which levels are on, their order, sort keys and directions | Per workspace. The panel reopens as you left it. |
| The columns you chose for the expanded view | Per workspace. |
| Search syntax | For all workspaces. |
| View › Show › Objects and View › Show › Object Numbers | For all workspaces. |
| The search, the filter, whether the search box is hidden, and whether the panel is expanded | Not 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.
- Select the gear in the panel's header, select the Namespace preset, and close the popup.
- Expand the namespaces down to the one you want, right-click it and select Filter to this namespace.
- 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.
- Select Filter, point at the Pages row of the type table and select Only.
- Press Ctrl+Shift+E to expand the panel.
- Read Source table and Extended by; right-click the column headers to hide the columns you do not need.
- Press Enter on a page to open it.