APL¶
Application Presentation Language (APL) Functional Spec¶
Overview¶
The application presentation language describes the user interface
presented to a user creating a new application from a template or
editing an existing application. It describes what questions to ask,
how the questions are presented (a free form field vs. a pull-down
list of options for example), and the names of the variables used to
store the values the user inputs. Note that this spec only covers the
APL and does not cover the actual rendering of the application
template presentation
Language Description¶
The application template language describes the user interface
presented to a user making a new application, or editing an existing
application. It describes what question to ask, how the questions are
presented (a free form field vs a pulldown list of options for
example), and the names of the variables used to store the values the
user inputs. It consists of a set of primitive form elements (string,
number, choice, object), a set of grouping and organization constructs
(section, list), methods for hiding or displaying portions of the form
based on the values of other portions (optional), and a method to
associate human readable text with various form elements (text).
The Text String Table Element¶
Many of the APL elements above have associated text string that go
along with them. Section elements have labels that go along with them.
The various input elements have question strings that go along with
them. These strings are defined in the text table.
The text table goes at the bottom or the presentation section, and it
should contain an entry for each APL element used above it. Elements
are specified by their location. Objects inside of sections are
specified with the section name followed by a period followed by the
element name. Elements inside a row or table element are specified
with the row or table name followed by a period followed by the
element name.
section foo {
string bar
table two_columns {
string column_1
string column_2
}
}
text
{
foo "This is the label for the FOO section."
foo.bar "What value do you want to set for BAR?"
foo.two_columns "What values do you want for these two columns?"
foo.two_columns.column_1 "Column One"
foo.two_columns.column_2 "Column Two"
}
Localization and The Text String Table Element¶
Alternative text sections can be defined for other languages. The
appropriate section will be chosen based on the browser language
setting. The alternate language text sections are specified with the
use of the language string following the label ‘text’.
section foo {
string bar
}
text
{
foo.bar “default text”
}
text "de_AT" {
foo.bar "text for Austrian locale"
}
text "zh_CN" {
foo.bar "text for Chinese simplified 用统一码 (Unicode) 走遍世界"
}
The entry to specify the additional language strings should be
formatted in the following manner:
"<ISO 639-1 Language Code>_<ISO 3166 Country Code>"
The language codes are expected to be in lower case and the country
codes are expected to be in Upper case.
Dynamic Data Binding with TCL Expressions¶
Most value types allow using a TCL expression to dynamically generate
the default value or list of available choices at runtime rather than
when the template is created. These TCL expressions can be used to
retrieve information from MCPD and then process the data as needed.
Once the TCL script has been executed, the returned data is processed
to separated it into discrete items separated by newlines (‘n’). Each
of the items are then split by tabs (‘t’) into “display” and “value”
pieces which represents what the user sees, and what is saved to MCPD
respectively. If no tab exists, then the “display” is the same as the
“value”. For example, if a TCL expression for a choice element
returns: “disp1t val1n disp2t val2”, then the list of items
presented to the user would be “disp1”, “disp2”.
This example creates a choice that presents the list of the names of
ltm pools. Note that tmsh commands are used to retrieve the data.
section foo {
choice pools
tcl {
set objs [tmsh::get_config ltm pool]
foreach obj $objs {
append results [tmsh::get_name $obj]
append results "\n"
}
return $results
}
}
Validators¶
Validators can be used on certain value types to give a hint to the UI
about what should be allowed. MCP always has the final say on what is
allowed, but if the validator hint is given to TMUI, it can present a
more useful error message right at the location of the error. The
names of the validators are mapped to existing validation classes
within the internals of TMUI. The APL validator name is
case-insensitive.
APL Validator | Accepts |
---|---|
FQDN | Domain Name (RFC 1034) |
IpOrFqdn | ipv4, ipv6 or domain name (explicitly disallow “*”) |
IpAddress | “*”, ipv4, or ipv6 |
NonNegativeNumber | Integer >= 0 |
Number | Any Integer |
PortNumber | “*” or int value 0-65535 (inclusive) |
Example of a validator in use to restrict the value of a text box to
be a valid port number:
string port default "*" validator "portnumber"
Usage & Limitations¶
- Forward definition order
- No nested sections
- No nested tables
- No TCL insertion inside optionals
- Optionals inside tables must depend on elements outside the table
The BIG-IP API Reference documentation contains community-contributed content. F5 does not monitor or control community code contributions. We make no guarantees or warranties regarding the available code, and it may contain errors, defects, bugs, inaccuracies, or security vulnerabilities. Your access to and use of any code available in the BIG-IP API reference guides is solely at your own risk.