Der FUNCTION-Block enthält die Deklarationen für Funktionen, die von den HTML-Blöcken aufgerufen werden. Funktionen werden von Sprachumgebungen verarbeitet und können Programme, SQL-Abfragen oder gespeicherte Prozeduren ausführen.
Das folgende Beispiel zeigt zwei FUNCTION-Blöcke, die einen Funktionsaufruf an ein externes REXX-Programm und einen Funktionsaufruf an eine in der Makrodatei enthaltene Funktion definieren.
%{ ********************** FUNCTION Block **********************************%}
%FUNCTION(DTW_REXX) rexx1 (IN input) returns(result) { <-- Diese Funktion
akzeptiert einen Parameter
und gibt ein Ergebnis zurück,
das den zugeordneten
Funktionsaufruf ersetzt.
%EXEC{ompsamp.mbr %} <-- Diese Funktion führt ein externes REXX-Programm aus,
das "ompsamp.mbr" heißt.
%}
%FUNCTION(DTW_REXX) today () RETURNS(result) {
result = date() <-- Die einzelne Quellenanweisung für
diese Funktion befindet sich inline.
%}
Der erste FUNCTION-Block, rexx1, ist eine Deklaration einer REXX-Funktion, die ihrerseits ein externes REXX-Programm namens ompsamp.mbr ausführt. Von dieser Funktion wird eine Eingabevariable input entgegengenommen und automatisch an den externen REXX-Befehl übergeben. Der REXX-Befehl gibt außerdem eine Variable namens result zurück. Der Inhalt der Variablen result im REXX-Befehl tritt an die Stelle der im OUTPUT-Block enthaltenen aufrufenden Funktion @rexx1(). Auf die Variablen input und result kann das REXX-Programm, wie im Quellencode für ompsamp.mbr gezeigt wird, direkt zugreifen:
/* REXX */ result = 'The REXX program received "'input'" from the macro.'
Der Code in dieser Funktion gibt die an sie übergebenen Daten zurück. Sie können den Ergebnistext nach Belieben formatieren, indem Sie den anfordernden Funktionsaufruf @rexx1() zwischen normale HTML-Befehle für Hervorhebungen (wie z. B. <b> oder <em>) setzen. Anstatt die Variable result zu verwenden, hätte das REXX-Programm auch HTML-Befehle mit Hilfe der REXX-Anweisung SAY in die Standardausgabe schreiben können.
Der zweite FUNCTION-Block, today, verweist ebenfalls auf ein REXX-Programm. In diesem Fall befindet sich das gesamte REXX-Programm (eine ganze Zeile) selbst innerhalb der Funktionsdeklaration. Ein externes Programm ist nicht erforderlich. Inline-Programme sind für REXX- und Perl-Funktionen zulässig, da REXX und Perl interpretierte Sprachen sind, die syntaktisch analysiert und dynamisch ausgeführt werden können. Inline-Programme bieten den Vorteil der Einfachheit, da sie keine separat zu verwaltende Programmdatei erfordern. Die erste REXX-Funktion hätte ebenfalls inline angelegt werden können.