About the Built-in Language interface
- Last UpdatedOct 29, 2026
- 4 minute read
The Built-in Language interface is a standard tool for developing program logic that uses our Built-in Language. It is offered as an alternative to the VBScript interface.
Note: The Built-in Language interface is the only scripting interface that is supported in projects running on IoT View at this time. The VBScript interface is not supported in projects running on IoT View because VBScript itself is not supported on non-Windows platforms. As such, if you need to make your project cross-platform compatible, we recommend you use the Built-in Language interface wherever it is practical to do so.
The Built-in Language interface is available in the following places in the project development environment:
|
Interface |
Is Executed… |
|
Math worksheet |
…periodically, while the worksheet's execution condition is TRUE. |
|
Scheduler worksheet |
…at a specified date/time, at a specified time interval, or when the value of a specified tag changes. |
|
Screen Logic (in Screen Attributes) |
…when the screen is opened, while the screen is open, and/or when the screen is closed. |
|
ActiveX or .NET Control object |
…when a selected event on that object is triggered. |
|
Command animation |
…when the underlying screen object (typically a Button object) is clicked. |
In some of these places, you will be prompted to select the type of interface. Remember to select Built-in or Built-in Language, as opposed to VBScript or others.
The interface itself is arranged as a two-column table. Each row of the table is essentially a line of code, and the rows are executed sequentially from first to last.
When a row is executed, the expression in the Expression column is evaluated, and if it returns a value, that value is written to the project tag in the Tag Name column.
Note: If evaluating the expression results in a BAD quality, the quality of the associated project tag is set to BAD, but the tag value is not changed.
An expression can be almost anything, from a simple arithmetic or logic operation to a series of nested function calls, as long as it follows the syntax for our Built-in Language. The following example shows a variety of expressions.

|
Row |
Tag Name |
Expression |
Description |
|---|---|---|---|
|
1 |
MyInteger[0] |
1+2 |
A simple arithmetic operation that returns an integer value. The value is written to MyInteger[0]. |
|
2 |
MyReal[0] |
Cos(Pi()*(1/3)) |
A trigonometric expression, using the Cos and Pi functions, that returns a real value. The value is written to MyReal[0]. |
|
3 |
MyString[0] |
Format("%x",123) |
An integer value (123) that is reformatted as a string using the Format function. The string is written to MyString[0]. |
|
4 |
MyInteger[1] |
(100*79)/(23*3+10) |
A more complex arithmetic expression that uses parentheses to change the order of operations. The resulting value is written to MyInteger[1]. |
|
5 |
MyInteger[2] |
1 |
A literal value of 1 that is written to MyInteger[2]. |
|
6 |
MyString[1] |
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyFolder\MyAccessFile.accdb;Jet OLEDB:Database Password=MyDbPassword;" |
A database connection string that is written to MyString[1]. |
|
7 |
MyString[2] |
Format("Provider=Microsoft.ACE.OLEDB.%d.0;Data Source=C:\MyFolder\MyAccessFile.accdb;Jet OLEDB:Database Password=MyDbPassword;",DBVersion) |
The same database connection string as above, except that the Format function is used to get the value of DBVersion and then insert it into the string. The returned value — that, is new string — is written to MyString[2]. |
For a list of available functions and a complete description of each function, see Appendix: Built-in Language.
In the example above, there is no relationship between the expressions; each row can be executed and each expression can be evaluated without affecting any of the others. The rows of the Built-in Language interface are executed sequentially, however, so you can also configure expressions that progress from one row to the next. Specifically, an expression can use the values of project tags that were set in previous rows. The example below shows how to populate the elements of an array so that the value of each element is incrementally greater than the previous one.

Finally, like in traditional code, you can use comments and empty fields to organize the content of the Built-in Language interface. The following example shows a few different methods for doing this.

A comment can be placed in a row by itself or appended to an expression. The double-slash (//) indicates that everything following it should not be evaluated.
Empty fields are not evaluated at all, which means the following:
-
If the Tag Name column is empty and the Expression column contains an expression, the expression will be evaluated but the returned value (if any) will be discarded.
-
If the Tag Name column contains a project tag and the Expression column is empty, the value of the project tag will remain unchanged.
-
If the Tag Name and Expression columns are both empty, the entire row serves only as blank space to separate other groups of rows.