The timeline draws every row the same way: who it is from and when, its title, its text cut to a few lines, and its attachment. A table's rows can be drawn your own way instead, and written and changed in forms of your own, while the other tables keep the timeline's.
Rows
A MultiTableTemplate inside the timeline (React: an entry of templates) draws one table's rows your own way. It takes the place of a row's title, text and attachment; the timeline still shows who the row is from and when, its Edited mark, and the Edit and Delete the user's access allows, so a row drawn your way is changed and deleted like any other.
It is given the row as the timeline read it: its Title, Body, StartText — its date, written in the user's language and time zone — Owner and Recipients, and its Record, with every column read and their formatted values. In React these are title, body, startText, owner, recipients and record.
The timeline reads the columns it shows itself. For a template to show another, name it in a view's FetchXML, as the demo below does for a phone call's direction and number and a task's status: the timeline reads a view's columns beside its own. A column the user may not read stays empty.
Phone calls and tasks of your own
Schmeler and Sons' notes, messages, phone calls and tasks. A phone call shows which way it went, its number and when; a task, whether it is done and when it is due. Notes and messages keep the timeline's own drawing.
React example
Blazor example
React TypeScript
Razor
Notes, messages, calls and tasks
Show
Note
Message
Phone Call
Task
# ppp-data-importEdited
Book the on-site visit
Due 11/3/2026 2:00 PM
# ppp-data-importEdited
Prepare the quarterly report
Due 11/3/2026 1:00 PM
# ppp-data-importEdited
Review the support tickets
Due 11/2/2026 2:30 PM
# ppp-data-import
Check in on the rollout
Called 419-666-6962 · 11/2/2026 11:00 AM
# ppp-data-importEdited
Send the revised proposal
Due 11/2/2026 11:00 AM
# ppp-data-importEdited
Send the revised proposal
Due 11/2/2026 11:00 AM
Forms
A user who may create rows of a table named in CreatableTables (React: creatableTables) can write a new one from the timeline, and change a row their access lets them write. Notes and portal messages are written in place; a row of another table opens in a form of the title, dates, people and text its registration shows. A MultiTableForm inside the timeline (React: an entry of forms) gives a table forms of your own, one to create its rows and one to change them: components of editors, shown inside a form of the record — the new row, with what the timeline knows of it filled in, or the whole row read again for editing.
React
Blazor
<Timeline
creatableTables={['annotation', 'task']}
formLocation="center"
forms={{ task: { create: NewTaskForm, edit: TaskForm } }}
/>
// TaskForm: editors bound to the task being written
function TaskForm() {
return (
<>
<ColumnEdit columnName="subject" />
<ColumnEdit columnName="scheduledend" />
<ColumnEdit columnName="prioritycode" />
<ColumnEdit columnName="description" />
</>
);
}
<Timeline CreatableTables="@(["annotation", "task"])" FormLocation="TimelineFormLocation.Center">
<MultiTableForm Table="task" CreateForm="typeof(NewTaskForm)" EditForm="typeof(TaskForm)" />
</Timeline>
@* TaskForm: editors bound to the task being written *@
<ColumnEdit ColumnName="subject" />
<ColumnEdit ColumnName="scheduledend" />
<ColumnEdit ColumnName="prioritycode" />
<ColumnEdit ColumnName="description" />
FormLocation (React: formLocation) says where a form opens: a side panel on the right, as by default, or on the left, a dialog in the center, or Inline — in place in the timeline, as notes and messages are written. A save goes through the same table, row and column security as any record's.
For a fuller example — tasks with badges for their status and priority, phone calls with who was called, and appointments with where they take place — see the Timeline Custom Rendering demo.