A record page is the page a table's records are shown on: an account's page, a contact's. Register it once, on the server, and the portal's controls use it wherever they show a record of the table: a grid's Open and New buttons go there without being given an address, a grid's primary names and lookups link there, and so do a read-only lookup, a timeline's items, a calendar's appointments, a Kanban board's cards, a search's rows and a map's popups. A control you give an address of its own still goes there.
Registering a table's page
Call AddRecordPage in the server's Program.cs with the table's logical name and the page's address, with {id} once where the record's id goes. Registered twice, the second registration replaces the first. An address without a leading / is relative to the site's base, so it reaches the same page from wherever it is followed.
// Program.cs (the server)
builder.Services.AddRecordPage("account", "accounts/account?accountId={id}");
builder.Services.AddRecordPage("contact", "/contacts/{id}", newUrl: "/contacts/new");
The id in a query parameter (accounts/account?accountId={id}): a new record is made on the same page without that parameter, accounts/account.
The id in the path (/contacts/{id}): name the page a new record is made on with newUrl. Without one, the table has no New page, and a New button relying on it isn't shown.
A user is told the pages of only the tables they may read, so a link never leads them to a record they can't see.
Grids
Leave out the address on NavigateOpenRecordGridButton and NavigateNewRecordGridButton (React: urlFor and url) and they go to the table's record page. A sub-grid's New button still fills in the lookup to its parent record.
A button left without an address isn't shown for a table with no page, unless it has a click handler (OnClick, React: onClick) to set the address itself; one that leaves the address empty goes nowhere.
With no Open button on the toolbar, a row's primary name links to its record's page, and double-clicking the row opens it.
A lookup links to the page of the record it points at, where that record's table has one. Every link is a real link, so it opens in a new tab like any other.
In React, give the grid, timeline, calendar, board, search, map or lookup an onNavigate, as the buttons take, and a click on a link goes through your router, such as React Router's navigate; without one it is an ordinary link. A middle or modified click always opens a new tab.
Contacts and their companies
This portal registers the contact and account pages. Select a contact and choose Open, or choose New: neither button was given an address. A contact's name and company link to their pages.
Blazor example
Razor
Active ContactsActive Contacts Subgrid ViewAll ContactsAll Contacts (not available)All Contacts Not at CompanyContacts Being FollowedContacts from Sales Close AgentContacts I FollowContacts with pending data enrichmentContacts: Influenced Deals That We WonContacts: No Campaign Activities in Last 3 MonthsContacts: Responded to Campaigns in Last 6 MonthsExcluded Contacts CampaignsInactive ContactsMy Active ContactsMy Active Contacts by RelationshipMy ConnectionsMy Contacts Not at CompanySelected Contacts Campaigns
New
Sort
Active ContactsActive Contacts Subgrid ViewAll ContactsAll Contacts (not available)All Contacts Not at CompanyContacts Being FollowedContacts from Sales Close AgentContacts I FollowContacts with pending data enrichmentContacts: Influenced Deals That We WonContacts: No Campaign Activities in Last 3 MonthsContacts: Responded to Campaigns in Last 6 MonthsExcluded Contacts CampaignsInactive ContactsMy Active ContactsMy Active Contacts by RelationshipMy ConnectionsMy Contacts Not at CompanySelected Contacts Campaigns
New
Page size102050100
Sort
Full Name
Full Name
Combines and shows the contact's first and last names so that the full name can be displayed in views and reports.
Email
Email
Type the primary email address for the contact.
Company Name
Company Name
Select the parent account or parent contact for the contact to provide a quick link to additional details, such as financial information, activities, and opportunities.
Business Phone
Business Phone
Type the main phone number for this contact.
No records found.
Other controls
The same registration reaches the controls that show a record without a grid:
A lookup shown read-only (LookupEdit, or ColumnEdit on a lookup) links to the record's page.
A timeline item's title links to its record's page, where its table has one.
A calendar appointment's details offer Open, to the appointment's page, and its Regarding links to the record it's about.
A Kanban board's card titles link to their records' pages, and opening a card goes there, unless the board is given a Form (React: form) to open its cards in. Lookups on its cards link too, and a new card is still made in the board's dialog.
A search's rows (MultiTableSearch) link by their names to their records' pages.
A map's rows (Map) link their popups' headings to their records' pages, on a map of one table or of several (MultiTable). A popup you draw yourself links where you say.
Turning links off
Every control that links to record pages has ShowRecordLinks (React: showRecordLinks), on by default. Turn it off on a grid, a timeline, a calendar, a Kanban board, a search, a map or a lookup, and on a grid's column to turn off that column's links alone, or to turn them on for one column of a grid that has them off.
A record page is only a default. A button given an address, a GridRelatedRecordsColumn with a Url, or any link you write yourself goes where you say, so a page that needs another view of a record still gets it.
RefreshNext pageRefresh
Apply begins with filter on the following columns:
Business Phone Company Name Email Full Name
Previous pageFirst page
Apply begins with filter on the following columns: