The Formula language is a scripting language used by Lotus Notes.
It is often referred to as @Formula language (pronounced at-formula) because many language elements start with the @-character.

The Formula language is not a full programming language: it lacks looping constructs and there is only one function for conditional execution. However, Formula language is very good at the manipulation of strings and lists (arrays) of strings.
Note: in version 6 of Lotus Notes the Formula language has been extended to include looping and additional conditional statements.

The Formula language has two parts:

  • @Functions for calculations and simple logic
  • @Commands for performing actions in the user interface

@Functions can be used in several places throughout Lotus Notes. The most important uses are:
  • to select documents to show to the user in a view (a kind of index) or to select documents for further processing. In this case, the formula will evaluate to a 'true' (selected) or 'false' value (not selected) for each document.
  • to provide default values for fields, to transform the data entered by the user (like stripping off redundant spaces) and to validate this data.
  • to get a list of values from a Notes database or even from a relational database (using ODBC). This may be used to provide a user with a list of values to choose from.
  • to process a set of documents. The formula is placed in an agent, a program or macro that can be started by a user or by the Notes server according to a schedule. When the agent is triggered, the formula executes for each selected document (this a a very limited form of a loop). This is an efficient way of changing lots of documents, if the logic is not too complicated. In case of complicated changes, LotusScript is used.

@Commands are like menu commands: they perform actions in the Lotus Notes client. Examples of actions are:
  • opening a Notes database
  • creating an e-mail
  • putting the cursor in a specific data-entry field
  • closing a window
  • starting an agent
@Commands are mainly used in buttons and the like. It is possible to combine them with @Functions, for example the command only executes if a field contains a predefined value.