Spécification des fonctions HTMLBusiness 

Principes généraux

Afin de supporter la conception de modèles HTML lorsque vous installez des composantes applicatives pour Internet (CAI), vous pouvez écrire vos propres fonctions HTMLBusiness, qui, d’un point syntaxique, sont similaires à celles utilisées dans des langages de programmation comme ABAP ou C.

Par exemple, une fonction HTMLBusiness simple concatenate_string, qui lie deux chaînes de caractères, peut avoir la forme suivante :

`function concatenate_string (string1,string2)
result = string1 & string2;
return (result);
end;`

Vous transférez les deux chaînes de caractères qui doivent être liées dans les paramètres string1 et string2 , et renvoyez ensuite le résultat .

Vous pouvez appeler la fonction concatenate_string comme suit :


`write (concatenate_string("A","B"));`

Le résultat obtenu est AB .

L’avantage de la définition de fonctions HTMLBusiness est que vous pouvez les réutiliser, si nécessaire, dans autant de modèles que vous le souhaitez. Par conséquent, vous ne devez pas redéfinir le code à chaque fois.

SAP ne fournit pas une bibliothèque standard des fonctions HTMLBusiness réutilisables. C’est à votre équipe de développement de définir des fonctions répondant aux exigences de vos applications spécifiques.

Définition de fonctions HTMLBusiness

La définition de fonction spécifie :

Les fonctions HTMLBusiness doivent être définies avant de pouvoir être utilisées. Vous pouvez introduire une définition de fonction n’importe où dans le code, mais pas dans n’importe quelle autre instruction HTMLBusiness. Par exemple, vous ne pouvez pas insérer une définition de fonction dans une instruction if .

Syntaxe des fonctions HTMLBusiness

La syntaxe de base d’une définition de fonction HTMLBusiness est :

function <function name> (<parameter list>)
<function body>
return ( <return value> );
end;

La table suivante résume les composants de la syntaxe :

Composante

Désignation

<function name>

Identificateur unique, composé d’une séquence ininterrompue de caractères alphanumériques et de caractères spéciaux autorisés

Les noms de fonctions HTMLBusiness doivent commencer par une lettre. Après celle-ci, vous pouvez utiliser toute combinaison de lettres majuscules de A à Z ou minuscules de a à z et de chiffres de 0 à 9 .

Les blancs ne sont pas autorisés, mais vous pouvez utiliser le caractère de trait de soulignement _ pour regrouper des mots séparés qui constituent le nom de la fonction.

<parameter list>

Les noms des paramètres que vous souhaitez transférer

L’expression par défaut est utilisée lorsque l’appelant ne fournit pas de paramètre.

<function body>

Toute instruction HTMLBusiness valable

<return value>

Toute instruction HTMLBusiness valable

Appel des fonctions HTMLBusiness

Vous pouvez appeler les fonctions HTMLBusiness en tant que partie de n’importe quelle instruction HTML Business valable. La syntaxe est la suivante :

`

<function name> (<parameter expression>)

`

<parameter expression> est composée d’une liste de noms de paramètres, chacun séparé par une virgule. Pour chaque nom de paramètre, la syntaxe est :

<parameter name>=<any valid HTMLBusiness expression>

Lorsqu’une fonction HTMLBusiness est appelée, chaque expression de paramètre est évaluée et la valeur qui en résulte est affectée à l’identificateur de paramètre correspondant.

Cela signifie que vous pouvez appeler la fonction concatenate_string de deux façons :

concatenate_string(string1="prefix",string2="suffix") ;

concatenate_string("prefix","suffix").

Une fonction peut en appeler une autre, à condition que cette dernière ait été déclarée. Dans l’exemple ci-dessous, une fonction func_1 appelle une fonction func_2 , mais cela entraîne une erreur de durée de compilation car la fonction func_2 n’a pas été déclarée lorsqu’elle a été appelée.

`
function func_1 (x)
write(func_2(2*x)); < !—compile error -->
end;

function func_2 (y)
write(y);
end;

func_1(10);
`

Appel de fonctions HTMLBusiness de façon récursive

Une fonction HTMLBusiness peut s’appeler elle-même. Dans l’exemple suivant, la fonction calcule des factorielles :

`
function factorial(f,x=1)
if (x==f)
return (x);
else
return (x*factorial(f,x+1));
end;
end;

repeat with i from 1 to 10;
factorial(i);
end;
`

Valeurs de retour dans les fonctions HTMLBusiness

Les fonctions HTMLBusiness peuvent retourner des valeurs à l’appelant.

Si une fonction HTMLBusiness retourne une valeur de chaîne de caractères, qui est ensuite utilisée dans une expression se traduisant par une valeur numérique, le système convertit automatiquement le type.

Dans la fonction suivante dup_string , qui duplique les chaînes de caractères, toutes les instructions spécifiées ci-dessous sont possibles :

`
function dup_string (s)
return (s&s);
end;

dup_string(„a"); <-- outputs "aa" -->

write(dup_string(„b")); <-- outputs "bb" -->

dup_string(dup _string("c")); <-- outputs "cccc" -->

2*dup_string("1"); <-- outputs "22" -->

`

Périmètre variable dans les fonctions HTMLBusiness

Si un paramètre d’une fonction HTMLBusiness possède le même nom qu’une variable globale, ce paramètre contient la valeur fournie par l’appelant dans la fonction, mais la valeur de la variable globale est restituée lors du retour de la fonction vers l’appelant, comme le montre l’exemple suivant :

`

function write_numbers ( x1,x2,x3 )
global_variable = x1;
write(„global_variable is „,global_variable,"\n");
write(„x1 is „,x1,"\n");
write(„x2 is „,x2,"\n");
write(„x3 is „,x3,"\n");
end;

global_variable = 1000;
x1 = 100;
x2 = 200;
x3 = 300;
write(„Before the call\n");
write("global_variable is ",global_variable,"\n");
write("x1 is ",x1,"\n");
write("x2 is ",x2,"\n");
write("x3 is ",x3,"\n");
write("Calling the function . . .\n");
write_numbers(10,20,30);
write("After the call\n");
write("global_variable is ",global_variable,"\n");
write("x1 is ",x1,"\n");
write("x2 is ",x2,"\n");
write("x3 is ",x3,"\n");

`

Le résultat est le suivant :

Befor the call
global_variable is 1000
x1 is 100
x2 is 200
x3 is 300
Calling the function . . .
global_variable is 10
x1 is 10
x2 is 20
x3 is 30
After the call
global_variable is 10
x1 is 100
x2 is 200
x3 is 300

HTML standard dans les fonctions HTMLBusiness

Les fonctions HTMLBusiness peuvent contenir des codes HTML standard.

Dans l’exemple ci-dessous, une fonction HTMLBusiness intitulée write_html_text produit dix fois le texte HTML <H1> This is standard HTML </H1> dans le navigateur Web.

`
function write_html_text()
` < !—Now entering HTML mode -->
<H1> This is standard HTML </H1>
`end;`

repeat with i from 1 to 10;
write_html_text();
end;
`

Références de zone

Vous ne pouvez pas transférer des paramètres aux zones par la référence. Observez l’exemple ci-dessous :

`

function dump_table(t)
`<TABLE>`
repeat with i from 1 to t.dim;
`<TR><TD>`t[i]`</TD></TR>`
end;
`</TABLE>`
end;

mytable[1] = „Line 1";
mytable[2] = „Line 2";
mytable[3] = „Line 3";
dump_table(mytable);

`

Dans ce cas, HTMLBusiness fournit seulement la première ligne de la table car mytable , transférée comme paramètre à la fonction dump_table , est évaluée comme la valeur de la première ligne de la zone à valeurs multiples mytable , soit Line 1 .

Pour décider du nom au moment de l’exécution, vous devez transférer le nom de la variable en tant que chaîne de caractères et utiliser l’opérateur HTMLBusiness ^ , comme dans l’exemple suivant :

`

function dump_table(t)
`<TABLE>`
repeat with i from 1 to ^t.dim;
`<TR><TD>`^t[I]`</TD></TR>`
end;
`</TABLE>`
end;

mytable[1] = „Line 1";
mytable[2] = „Line 2";
mytable[3] = „Line 3";
dump_table(mytable);

`

Exemple d’application

Une application utile vous permet d’écrire des fonctions HTMLBusiness qui génèrent des codes HTML. Par exemple, vous pouvez définir une fonction screenfield comme suit :

`
function ( ~screenfield )
if (^~screenfield.disabled)
<!--- Screenfield is not ready for input -->
write(^screenfield.label);
else
write("<INPUT TYPE=\"");
if (^screenfield.type=="RadioButton")
write("RADIO\"");
write(" NAME=\"",^screenfield.group,"\"");
write(" VALUE=\"",^screenfield.name,"\"");
else
if (^screenfield.type=="CheckButton")
html_type = "CHECKBOX";
else
html_type = "TEXT";
end;
write(html_type,"\"");
write(" NAME=\"",^screenfield.name,"\"");
write(" VALUE=\"",^screenfield.value,"\"");
end;
end;
end;
`

Vous pouvez appeler la fonction screenfield de deux façons :

screenfield (~screenfield="VBAK-VBELN");

screenfield ("VBAK-VBELN");

Les appels de fonction peuvent évaluer des expressions. Vous pouvez donc également dire :

this_field = „VBAK-VBELN";
dnprofield (this_field);

Intégration de fonctions HTMLBusiness

Vous pouvez définir des fonctions HTMLBusiness dans un modèle, et ensuite les intégrer dans les modèles dans lesquels vous souhaitez les utiliser.

Dans l’exemple suivant, supposons que la fonction screenfield est définie dans le modèle util.html . Par conséquent, pour pouvoir utiliser screenfield , un autre modèle HTML Business doit inclure util.html  :

`
include(~service="util",~theme="",~name="util.html");

screenfield(~screenfield="VBAK-VBELN");
screenfield(~screenfield="VBAK-BELNR");
screenfield(~screenfield="VBAK-DATUM");

`

Bien que l’instruction include affecte des valeurs par défaut aux paramètres et ne génère pas de message d’erreur s’il manque des paramètres, vous devez énumérer les paramètres ~service , ~theme et ~name explicitement car l’interpréteur HTML Business distingue les includes au moment de la compilation et ceux au moment de l’exécution.

Les includes au moment de la compilation sont déjà intégrés lors de la compilation du modèle d’inclusion. C’est nécessaire pour connaître les fonctions définies dans le modèle inclus.