Il blocco FUNCTION contiene le dichiarazioni delle funzioni richiamate dai blocchi HTML. Le funzioni vengono elaborate dagli ambienti di linguaggio e possono eseguire programmi, interrogazioni SQL o procedure memorizzate.
L'esempio che segue mostra due blocchi FUNCTION che definiscono una chiamata di funzione per un programma REXX esterno ed una chiamata di funzione ad una funzione contenuta all'interno del file di macro.
%{ ********************** FUNCTION Block **********************************%}
%FUNCTION(DTW_REXX) rexx1 (IN input) returns(result) { <-- Questa funzione accetta
un parametro e restituisce un
risultato che viene sostituito
per la chiamata della funzione
associata
%EXEC{ompsamp.mbr %} <-- La funzione esegue un programma REXX esterno
chiamato "ompsamp.mbr"
%}
%FUNCTION(DTW_REXX) today () RETURNS(result) {
result = date() <-- La singola istruzione di origine per questa funzione è
in linea.
%}
Il primo blocco funzione, rexx1, è una dichiarazione di funzione REXX che, a turno, esegue un programma REXX esterno chiamato ompsamp.mbr. Una variabile di immissione, input, viene accettata da questa funzione e automaticamente trasferita al comando esterno REXX. Il comando REXX restituisce anche una variabile chiamata result. Il contenuto della variabile result nel comando REXX sostituisce la chiamata di funzione @rexx1() che esegue la chiamata, contenuta nel blocco Output. Le variabili input e result sono accessibili direttamente dal programma REXX, come riportato nel codice di origine per ompsamp.mbr:
/* REXX */ result = 'The REXX program received "'input'" from the macro.'
Il codice di questa funzione ripete i dati ad essa trasferiti. E' possibile formattare il testo del risultato in un modo qualsiasi racchiudendo tra apici la chiamata di funzione @rexx1() che effettua la richiesta con tag mark-up normali (come <b> o <em>). Invece di utilizzare la variabile result, il programma REXX può anche scrivere le tag HTML per l'emissione standard utilizzando le istruzioni REXX SAY.
Anche il secondo blocco, today, fa riferimento ad un programma REXX. Tuttavia, l'intero programma REXX (un'intera riga) in questo caso è contenuto nella stessa definizione di funzione. Non è necessario alcun programma esterno. I programmi in linea sono consentiti per entrambe le funzioni REXX e Perl perchè si tratta di linguaggi interpretati che possono essere esaminati ed eseguiti in modo dinamico. I programmi in linea hanno il vantaggio della semplicità non richiedendo alcun file di programma separato da gestire. La prima funzione REXX può anche essere gestita in linea.