Reference manual

Objects page

Universal Search

Universal Search is one box that finds the objects and members of the workspace, Prism Paths, lines of the open object, menu commands, workspace pages and the places you have recently been, with a preview of the selected result's source. You open it with the Search Everywhere command. Searching fields, procedures and event publishers, and going to a Prism Path, are Universal Search with a filter or a prefix applied.

Opening Universal Search

Universal Search opens as a popup over the Workspace window. The popup closes when it loses focus or when you open a result. The Search menu items marked below open it pinned into a window of its own, which stays open. Each way in starts it with the pill or text shown.

HowOpens
Search › Search Everywhere…, Ctrl+T, or the Search button in the title barThe popup with an empty box.
Ctrl+Shift+SThe popup in the Members mode: a k:member pill.
Ctrl+Shift+PThe popup with >: menu commands.
View › Go to Prism Path… or Ctrl+Shift+GThe popup with prism:: Prism Path completion.
Search › Fields…A pinned window with k:field.
Search › Procedures…A pinned window with k:procedure.
Search › Event Publishers…A pinned window with is:publisher.
Search Members… on an object's context menuThe popup with an of: pill naming the object: its members.
Search in this module… on a module in the Objects panelThe popup with an m: pill naming the module.
Search in this namespace… on a namespace group in the objects panelThe popup with an ns: pill naming the namespace: it and the namespaces below it.

The title bar's Search button sits after the menus and shows its key, Ctrl T. It hides when the window is too narrow to show it beside the window buttons.

Search box and results

Universal Search listing tables that match cust.
#NameDescription
1PillsFinished filter tokens. See Filter tokens.
2Search boxType a name, an id, a type and a name, or any form in Query syntax.
3Pin into a windowMoves the search into a window of its own (Ctrl+Enter). Shown in the popup only. See Pinning into a window.
4Search modeAll, Objects, Members, Fields, Procedures or Publishers. See Search modes and kinds.
5KindsA checklist of the object and member kinds to search. See Search modes and kinds.
6GroupHow the results are grouped. Select it to cycle Group: Kind, Group: Module, Group: Namespace, Group: Object and Group: None. See Results and grouping.
7ResultsThe matches in groups. See Results and grouping and Opening results and actions.
8PreviewThe app, the immediate insights and the start of the source of the selected result. See Preview.
9StatusHow many results each group shows and of how many, such as “20 of 3,214 objects · 50 of 9,876 members · 5 commands”, or why nothing is listed. See Status messages.

Before you type

With an empty box and no pills, Universal Search lists two groups. Select a row or press Enter on it to use it.

Universal Search before you type.
#NameDescription
1ShortcutsEach row puts its pill or prefix in the box. The key caps show the shortcut that opens Universal Search that way from the workspace window.
2RecentUp to ten places from the History menu, newest first. A member reads as its name, with its object beside it. Opening one goes back there.
3Status“Type a name, an id such as 18, or a type and a name such as cu sales; ? lists the rest”.
Shortcut rowPuts in the boxKey
Membersk:memberCtrl+Shift+S
This object@–
Commands>Ctrl+Shift+P
Prism Pathprism:Ctrl+Shift+G
Go to line:–
Search codeOpens the Free text search window over all objectsCtrl+Shift+F
Filters and more?–

Query syntax

Universal Search with ? typed: the syntax help.
#NameDescription
1?Lists the help in place of results.
2Query formsEach row shows an example and what it finds: names, quoted text, ids, types, Prism Paths, lines and members of the open object. See Prefixes and Names, ids and types.
3Filter tokensEach row shows a token and what it keeps. Select a row or press Enter on it: a whole token, such as k:table, becomes a pill, and a key alone, such as m:, goes into the box to list its values. See Filter tokens.

Type ? in the box to list the syntax in Universal Search itself. Plain text is matched letter by letter, so cust finds Customer and Cust. Ledger Entry. Text with several words matches names that contain every word that way.

Prefixes

A prefix at the start of the text, after any pills, changes what Universal Search lists.

PrefixLists
?The syntax help.
>The commands of the workspace window's menus that can run now, as Menu › Item… with their key caps, matched letter by letter; up to 50, in menu order until you type more. Enter runs the command.
prism:Prism Path completion: after an object type, such as prism:codeunit/, up to 20 objects of that type; once the path names an object, up to 30 of its members. Tab puts the selected path in the box. When the text is a whole path, the first row is Go to that path.
@The members of the open object, up to 500, such as @post.
: and a numberGo to line of the open object, such as :120.

Names, ids and types

ExampleFinds
cust, cleNames matched letter by letter. Exact names, then matches at word starts and capitals, rank first, so cle finds Cust. Ledger Entry.
"sales line"Names that contain the quoted text, ignoring case: the exact name first, then names that start with it. No letter-by-letter matches. The closing quote is optional.
18, 50000..59999, 18|21, 18 21 27Objects by id, id range or alternatives; ids separated by spaces read as alternatives. Ids match objects only.
Sales*, on*notification, Post?Names by wildcard: * any run of characters, ? one character. Wildcards and alternatives such as Customer|Vendor match objects and members.
cu 80, t18, page cust, cu salesAn object type, then a name or an id. Matches of that type rank first, and the whole text is also matched as a name, so report selections still finds table Report Selections. With a type, members match only in objects of that type.
TypeWordsLetter, before an id
Tabletable, tabt
TableExtensiontableextension, tableext–
Pagepage, pagp
PageExtensionpageextension, pageext–
PageCustomizationpagecustomization–
Reportreport, repr
ReportExtensionreportextension, reportext–
Codeunitcodeunit, cuc
XmlPortxmlport, xpx
Queryqueryq
Enumenume
EnumExtensionenumextension, enumext–
Interfaceinterface–
ControlAddIncontroladdin–
Profileprofile–
ProfileExtensionprofileextension–
PermissionSetpermissionset–
PermissionSetExtensionpermissionsetextension–
Entitlemententitlement–
DotNetdotnet–

A single letter counts as a type only when digits follow, as in t18 or t 18, so e mail is an ordinary name search. An id larger than any object number finds nothing.

Pasted forms

Paste an object the way code, an export or a client address names it, and Universal Search finds that one object.

FormExample
An AL object literalCodeunit::"Sales-Post", Database::Customer (a table)
A C/AL export headerOBJECT Codeunit 80 Sales-Post
A Business Central client addressA URL containing ?page=22 or &table=18; also report, query, codeunit and xmlport
A Prism Pathprism:codeunit/"Sales-Post"; pasting into a box that holds only prism: replaces it

Filter tokens

A k:codeunit pill, with is: typed and its values listed.
#NameDescription
1PillA finished token. Select its × to remove it, or press Backspace in an empty box to remove the last pill.
2Key being typedA key with no value yet lists the values it takes; typing the start of a value narrows them.
3RolesThe is: roles: publisher, subscriber and procedure.
4FlagsThe is: flags. Select a value and press Tab or Enter to make it a pill.

A filter token is a key, a colon and a value, such as k:table. Type a space after it and it becomes a pill. Quote a value that has spaces (m:"Base Application"), and list several values with commas (k:table,page). A key can appear in more than one pill.

Tokens with different keys all apply. Values of one key are alternatives, except the flags of is:, subtype: and pagetype:, which must all hold. A value Universal Search does not know shows “Not understood: …” in the status line, such as “Not understood: k:tabel”.

TokenKeepsValues
k:KindsAn object type by any of its words in Names, ids and types, such as table or cu, singular only, a member kind, singular or plural (field, procedure, trigger, event, action, control, key, fieldgroup, value, dataitem, column, filter, view, element), or object or member for every kind of its group. k:procedure includes event publishers and subscribers; k:trigger includes trigger events.
m:ModulesA module name, or the start of one, such as m:"Base Application". Offers up to 12 module names while you type.
from:Where the app comes fromapp: the workspace's own apps. deps: every dependency app.
ns:NamespacesA namespace and every namespace below it: ns:Microsoft.Sales keeps Microsoft.Sales.Posting too. Offers up to 12 namespaces while you type.
ext:Extension objectsoff leaves out extension objects (table, page, report, enum, profile and permission set extensions, and page customizations) and their members; on keeps them, as without the token.
is:Roles and flagsRoles: publisher, subscriber, procedure (other procedures). Flags: obsolete, internal (Access = Internal objects, internal procedures), local (local procedures), singleinstance, sealed (Extensible = false), global (DataPerCompany = false tables), temporary (temporary tables, pages on a temporary source table), external (tables whose data comes from outside Business Central), api (API queries), processingonly (ProcessingOnly reports), norequestpage (reports without a request page), flowfield, flowfilter.
subtype:Codeunits by Subtypetest, testrunner, upgrade, install.
pagetype:Pages by PageTypeOffers card, list, document, worksheet, listplus, cardpart, listpart, rolecenter, api, navigatepage, standarddialog, confirmationdialog, headlinepart, promptdialog, usercontrolhost, reportpreview, reportprocessingonly, xmlport; any other page type is matched as written.
in:Scopein:view: the objects the Objects panel filter shows, and their members.
of:One object's membersAn object's name, exactly, ignoring case: of:Customer, of:"Sales-Post". Offers up to 12 object names while you type.

Object kinds alone list objects only; member kinds alone list members only; a role or of: lists members only. Flags keep the objects and members that carry them, so is:obsolete lists both. With pills and no text, Universal Search lists everything the pills let through.

Search modes and kinds

The search mode and the Kinds checklist with two kinds checked.
#NameDescription
1Search modeAll, Objects, Members, Fields, Procedures or Publishers.
2KindsOpens the checklist (“Object and member kinds to search”). Reads Kinds · N when N kinds are checked.
3Object kindsTable, Page, Codeunit, Report, Query, XmlPort, Enum, Interface, TableExtension, PageExtension, ReportExtension, EnumExtension, PermissionSet, ControlAddIn, PageCustomization, Profile, ProfileExtension, DotNet, PermissionSetExtension, Entitlement.
4Member kindsField, Procedure, Trigger, Event, Action, Control, Key, FieldGroup, Value, DataItem, Column, Filter, View, Element.
5ClearUnchecks every kind and removes the k: pill.

The search modes are shorthand for pills: choosing one replaces the other modes' pills, and the selector shows the last mode pill in the box, or All when there is none.

ModePill
AllNone
Objectsk:object
Membersk:member
Fieldsk:field
Proceduresk:procedure
Publishersis:publisher

Checking kinds writes one k: pill with all of them, such as k:table,page, in place of every other k: pill, including one a mode set. A k: pill you type yourself checks its kinds in the list.

Results and grouping

The results list grouped by kind.
#NameDescription
1Group headerThe group's title and count, such as Members · 50 of 3,214 when the list is capped.
2Object resultType icon, name with the matched letters in semibold, then a green bookmark when you bookmarked the object (“This object is bookmarked”) and a mark when you have opened it before in this workspace, then its type and number, such as Table 18.
3Member resultKind icon, name, and its kind and object, such as procedure · Sales-Post. Grouped by object, the kind alone.
4PillsThe result's flags, as the objects panel shows them. Pills that do not fit fold into +N; hover a pill for what it means.
5More actionsThe ··· button on the selected result lists what you can do with it (Tab). See Opening results and actions.
6Show moreShow more objects, Show more members or Show more results, with how many are not shown. Each press lists five times as many.
ResultPills
ObjectA codeunit's subtype (test, test·runner, upgrade, install), a page's type (such as list·part), no·print, no·request, global, singleton, sealed, internal, temp, external, api, and the ObsoleteState, such as pending, in the caution color.
Memberpublisher, subscriber, local, internal, flow·field, flow·filter, and a field's ObsoleteState in the caution color.

For a search, Universal Search lists these groups in order:

  1. Completions, while you type the value of a filter token, such as Object kinds and Member kinds for k:, or Roles and Flags for is:.
  2. The results, grouped as the Group button says (below).
  3. Commands: the five best-matching menu commands, when no filter token is set.
  4. Pages: pages of the workspace window whose title matches, such as Namespaces, when no filter token is set.
  5. Search further: Search code for "…" runs the Free text search window over all objects.
GroupingGroupsObjects shownMembers shown
Group: Kind (default)Objects, then Members2050
Group: ModuleOne per module; (no module) for objects outside one50100
Group: NamespaceOne per namespace; global for objects without one50100
Group: ObjectOne per object, such as Codeunit Sales-Post, with its matching members50100
Group: NoneOne Results group, best match first50100

Grouped by module, namespace or object, the groups come in the order of their best result, and a last More group holds the Show more results row. When a search leaves exactly one result, its actions are listed under it.

Preview

The preview of a selected procedure.
#NameDescription
1AppThe app the result lives in, as Publisher › Name Version, with the icon of the workspace's own source or of a package.
2InsightsFor a procedure or trigger, when the Code graph is loaded: its Immediate insights in one row: Commits, Event publishers and User actions, then how many tables it deletes, modifies, renames, inserts and reads. Hover a table count for the tables' names.
3CodeThe first 40 lines of the result's source: the start of an object, or a member's declaration. Colored as in the Object view, with #if branches shown as the object view shows them.
4ObjectThe object the code belongs to, under its namespace: namespace › Kind Number Name. Identical code in several objects previews the same; this line tells them apart.

The preview column is shown when the list holds objects or members, and stays the same width as you move through the list. A list of shortcuts, filter values or commands takes the whole width.

Opening results and actions

The actions of a table, listed with Tab.
#NameDescription
1ResultThe result whose actions are listed, as the group header, with how many actions it has.
2OpenOpens the result, as Enter on the result does.
3ActionsThe other actions, with their key caps where they have a shortcut. Type to narrow the list; select one or press Enter to run it.
4Status“Actions of … · Escape returns to the results”.

Select a result or press Enter on it to open it. The popup closes when a result opens.

ResultOpening it
ObjectSwitches to the Objects page and opens the object.
Member, Prism Path or Go toSwitches to the Objects page and goes to the declaration.
Recent placeGoes back to that place.
PageSelects that page in the workspace window.
CommandRuns the menu command.
Filter valueMakes it a pill; Universal Search stays open.
Show more …Lists more; the selection stays where it was.
Search codeOpens the Free Text Search window over all objects and, when there is text, searches for it.
Go to lineGoes to that line of the open object.

To act on a result without opening it, select it and press Tab, select its More actions button, or move to it with the arrow keys and type >. The actions list in place of the results. Shift+Tab or Escape returns to the results with the same result selected; typing text that matches no action, such as a filter token, searches again.

ResultActions
ObjectOpen, then the commands of the object's context menu that can run, as in the Object context menu: such as Find Usages, Search Members…, Find Built-in Function Usages…, Explore Table Relations, Copy Prism Path to Clipboard, Go to Module and Toggle Bookmark. Your license decides which are offered, as in the context menu.
Procedure, trigger, field, variable, key or enum valueOpen; Find Usages, Find Inbound Flow, Show Inbound Procedural Flow-Graph, Find Outbound Flow and Show Outbound Procedural Flow-Graph where they can run, as the Declaration search feature matrix lists them; then Copy Prism Path.
Any other memberOpen and Copy Prism Path.
Recent placeThe actions of the member or object it names.

Commands, pages, filter values and the other rows have no actions: Enter is all they do.

Pinning into a window

Universal Search pinned from Search › Procedures…, grouped by object.
#NameDescription
1PillThe k:procedure pill the menu item set.
2Expand allExpands every group.
3Collapse allCollapses every group to its header.
4Copy resultsCopies the results as tab-separated text: a header line with Kind, Name, Object and Prism Path, then one line per object or member.
5Group: ObjectOne group per object.
6Object groupThe object the procedures below it belong to, with their count.

Select Pin into a window or press Ctrl+Enter in the popup to move the search into a window of its own. The text, the pills, the grouping and the selected result carry over. The window is titled Search, followed by the query, such as Search: k:procedure post, and the title follows the query as you change it.

BehaviorPopupPinned window
Opening a resultCloses the popup.Leaves the window open.
EscapeCloses the popup.Clears the text; the pills stay.
Losing focusCloses the popup.Leaves the window open.
SizeResizable; see Behavior.1100 × 750 to start; the list and the preview fill the window.
Results shownAs in Results and grouping.While you type, as in the popup; once you pause, up to 5,000 objects and 10,000 members. Show more lists five times as many.
List tools–Expand all, Collapse all and Copy results.
Search shortcuts (Ctrl+T, Ctrl+Shift+S, …)Work; see Keyboard shortcuts.–

Keyboard shortcuts

KeyAction
Down / UpNext or previous result; group headers and the rows of collapsed groups are skipped. The keys keep working while results arrive.
Page Down / Page UpTen results down or up.
EnterOpens the selected result.
Ctrl+EnterPins the popup into a window.
TabOn a filter value, makes it a pill; on a Prism Path, puts the path in the box; otherwise lists the result's actions.
Shift+TabFrom the actions back to the results.
EscapeFrom the actions back to the results; in a pinned window, clears the text; otherwise closes the popup, whatever the Escape closes window setting.
Backspace in an empty boxRemoves the last pill.
> after moving to a result with the arrow keysLists that result's actions.

In the popup, the workspace window's search shortcuts switch Universal Search in place:

KeyAction
Ctrl+TClears the pills and the text.
Ctrl+Shift+SSelects the Members mode.
Ctrl+Shift+PClears the pills and sets the text to >.
Ctrl+Shift+GClears the pills and sets the text to prism:.
Ctrl+Shift+FCloses the popup and searches the text in the Free text search window, all objects.

Status messages

StatusMeaning
“20 of 3,214 objects · 50 of 9,876 members · 5 commands · 1 page”How many results each group shows, and of how many when it is capped. Grouped by module, namespace or object, a group counts as “14 in Base Application”.
“Type a name, an id such as 18, or a type and a name such as cu sales; ? lists the rest”The box and the pills are empty.
“Nothing matches”No result for the text and pills.
“Not understood: …”A filter token's value is not one Universal Search knows, such as k:tabel or k:tables.
“Actions of … · Escape returns to the results”The list shows a result's actions.
“Search failed: …”The search stopped with the error shown, and the list is cleared.
“Open an object to search its members”@ with no object open.
“The members are still being gathered; the list fills in when they are ready”@ before the members are ready; see Behavior.
“Nothing in this object matches”@ found no member of the open object.
“Open an object to go to one of its lines”: with no object open.
“Type a line number”: with no number after it.

Open an object by name or number

Use this when you know an object's name, part of it, or its number.

  1. Press Ctrl+T.
  2. Type the type and the number, such as cu 80, or part of the name, such as sales post.
  3. Press Enter to open the first result, or move to another with the arrow keys first.

The object opens on the Objects page and Universal Search closes.

Find a field by name across tables

Use this to find which tables and table extensions have a field with a given name.

  1. Select Search › Fields…. A pinned window opens with a k:field pill.
  2. Type the field name, such as "posting date" for names that contain it, or Posting* for a wildcard.
  3. Select Group until it reads Group: Object to see the fields object by object.
  4. Select a field to go to its declaration; the window stays open for the next one.

Add is:flowfield to keep FlowFields only, or from:app to keep the fields of your own apps.

Find procedures by name

Use this to find procedures by name across the workspace.

  1. Select Search › Procedures…. A pinned window opens with a k:procedure pill, which keeps procedures, event publishers and event subscribers.
  2. Type part of the name, such as write*xml.
  3. To narrow the list, add a role: is:procedure for procedures that are neither publishers nor subscribers, is:subscriber for event subscribers. Add is:local or is:internal for their scope.
  4. Select a procedure to go to its declaration.

Find event publishers

Use this to find an event to subscribe to, by name or among the events one object publishes.

  1. Select Search › Event Publishers…. A pinned window opens with an is:publisher pill.
  2. Type part of the event's name, such as OnAfterPost.
  3. To list the events of one object, type of:, select the object among the names offered and press Tab.
  4. Select a publisher to go to its declaration, or press Tab on it for its usages and flows.

From an object's context menu, Search Members… starts with the of: pill; add is:publisher there.

Go to a Prism Path

Use this to go to a declaration from a Prism Path that someone sent you or that you copied earlier.

  1. Press Ctrl+Shift+G, or select View › Go to Prism Path…. The box starts with prism:.
  2. Paste the path; it replaces the prism: already in the box. Or type it: after the object type and /, the objects of that type are offered, and after the object, its members; press Tab to take the selected one.
  3. Press Enter on Go to ….

The Objects page opens on the declaration.

Run a menu command from the keyboard

  1. Press Ctrl+Shift+P. The box starts with >.
  2. Type part of the command's name, such as free text.
  3. Press Enter to run the selected command.

Copy a list of results to a spreadsheet

Use this to hand a list of objects or members to a colleague or a spreadsheet.

  1. Search as usual, then press Ctrl+Enter to pin the search into a window.
  2. Wait for the list to widen once you stop typing, and select Show more if the list is still capped.
  3. Select Copy results and paste into the spreadsheet.

Behavior

  • Members: Prism gathers the workspace's members in the background the first time Universal Search opens after a workspace loads. Until then, only objects are found, and the list fills in with members when they are ready.
  • Ranking: an exact name ranks first, then matches at word starts, capitals and unbroken runs of letters. For several words, the order you typed them in and how much of the name they cover count; a type and a name rank above the same text read as a name. Fields, procedures, event publishers, events and triggers rank above columns, controls and other members with the same name. Near ties go to your own apps, then to the apps they depend on directly, and to objects you bookmarked or opened recently. Remaining ties go to the shorter name, then the object type and the id.
  • Position: the popup opens centered on the workspace window, near its top, never above the title bar.
  • Size: drag the popup's left, right or bottom edge, or a lower corner, to resize it; the top edge stays put. Prism keeps the size for next time. Double-click an edge to restore the default size.
  • Preview: appears once the selection rests for a moment, with its coloring by meaning a little later.
  • Recent: the list follows the History menu of the workspace window.