Show TOC

Entwicklung von HTMLBusiness-FunktionenLocate this document in the navigation structure

Verwendung

Allgemeine Regeln

Zur Unterstützung des Designs von HTML-Templates bei der Implementierung von Internet-Anwendungen können Sie Ihre eigenen HTMLBusiness-Funktionen schreiben, die in syntaktischer Hinsicht den Programmiersprachen ABAP oder C ähnlich sind.

Eine einfache HTMLBusiness-Funktion concatenate_string, die zwei Zeichenketten verbindet, hat beispielsweise folgende Form:

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

Sie übergeben die beiden zu verbindenden Zeichenketten in den Parametern string1 und string2 und geben dann das Ergebnis ( result) zurück.

Sie können die Funktion concatenate_string folgendermaßen aufrufen:

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

Dies ergibt folgende Ausgabe: AB.

Der Vorteil der Definition von HTMLBusiness-Funktionen liegt darin, dass Sie sie beliebig oft in anderen Templates wiederverwenden können. Sie brauchen daher nicht jedes Mal den Quelltext neu zu definieren.

SAP liefert keine Standardbibliothek mit wiederverwendbaren HTMLBusiness-Funktionen aus. Es ist Aufgabe Ihres Entwicklungsteams, Funktionen zu definieren, die Ihren anwendungsspezifischen Bedürfnissen genügen.

HTMLBusiness-Funktionsdefinition

Die Funktionsdefinition gibt an:

  • Den Namen der Funktion

  • Die Zahl und Namen der Parameter, die die Funktion erhalten soll

  • Einen Funktionsköper mit den Anweisungen, die festlegen, was die Funktion tun soll

  • Einen Rückgabewert

HTMLBusiness-Funktionen müssen vor ihrem Einsatz definiert sein. Sie können eine Funktionsdefinition an einer beliebigen Stelle im Quelltext plazieren, jedoch nicht innerhalb einer anderen HTMLBusiness-Anweisung. So können Sie etwa eine Funktionsdefinition nicht in eine If-Anweisung einbinden.

HTMLBusiness-Funktionssyntax

Die Grundsyntax einer HTMLBusiness-Funktionsdefinition lautet:

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

In der folgenden Tabelle sehen Sie alle Syntaxkomponenten:

Komponente

Beschreibung

<Funktionsname>

Eindeutige Kennung, die sich aus einer ununterbrochenen Folge von alphanumerischen Zeichen und zulässigen Sonderzeichen zusammensetzt.

HTMLBusiness-Funktionsnamen müssen mit einem Buchstaben beginnen. Nach diesem Buchstaben können Sie jegliche Kombinationen von Großbuchstaben von A bis Z, Kleinbuchstaben von a bis z sowie Zahlen von 0 bis 9 verwenden.

Leerzeichen sind nicht zulässig, aber Sie können mit dem Unterstrichzeichen _ die einzelnen Wörter verbinden, die den Funktionsnamen bilden.

<Parameterliste>

Die Namen der zu übergebenden Parameter

Wenn der Aufrufer keinen Parameter angibt, wird der Standardausdruck verwendet,

<Funktionskörper>

Gültige HTMLBusiness-Anweisung

<Rückgabewert>

Gültige HTMLBusiness-Anweisung

HTMLBusiness-Funktionen aufrufen

Sie können HTMLBusiness-Funktionen als Teil einer gültigen HTMLBusiness-Anweisung aufrufen. Die Syntax ist:

`
 ...
  <function name> (<parameter expression>)
 ...
`
            

Der <Parameterausdruck> besteht aus einer Liste mit Parameternamen, die durch Kommata getrennt sind. Die Syntax für einen einzelnen Parameternamen lautet:

<parameter name>=<any valid HTMLBusiness expression>
            

Beim Aufruf einer HTMLBusiness-Funktion wird jeder Parameterausdruck geprüft, und der Ergebniswert wird der passenden Parameterkennung zugeordnet.

  • Wenn Parameter mit dem Parameternamen identifiziert werden, wird der passende Parametername in der Funktionsdefinition eingesehen. Wenn kein entsprechender Name gefunden wird, tritt ein Laufzeitfehler auf.

  • Wenn Parameter nicht mit dem Parameternamen identifiziert werden, werden sie als positionale Parameter betrachtet und einer nach dem anderen in die entsprechende Parameterkennung kopiert; dies geschieht durch Kopieren des nten Parameters in die nte Parameterkennung.

Sie können die Funktion concatenate_string also auf zwei verschiedene Weisen aufrufen:

  • Mit Parameternamen wie in:

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

  • Mit positionalen Parametern wie in:

    concatenate_string("prefix","suffix") ;

Eine Funktion kann eine andere Funktion aufrufen, vorausgesetzt, die andere Funktion wurde definiert.

Im folgenden Beispiel ruft die Funktion func_1 die Funktion func_2 auf, jedoch ergibt dies einen Kompilierzeitfehler, denn die Funktion func_2 ist zum Zeitpunkt des Aufrufs nicht definiert.

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

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

 func_1(10);
`
            

HTMLBusiness-Funktionen rekursiv aufrufen

Eine HTMLBusiness-Funktion kann sich selbst aufrufen. Die folgende Beispielfunktion berechnet Fakultäten:

`
 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;
`
            

Rückgabewerte in HTMLBusiness-Funktionen

HTMLBusiness-Funktionen können Werte an den Aufrufer zurückgeben.

Wenn die HTMLBusiness-Funktion einen Zeichenkettenwert zurückgibt, der dann in einem Ausdruck verwendet wird, der einen numerischen Wert zum Ergebnis hat, wird eine automatische Typkonvertierung durchgeführt.

Bei der folgenden Funktion dup_string, die Zeichenketten verdoppelt, sind alle unten aufgeführten Anweisungen möglich:

`
 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" -->
`
            

Umfang der Variablen in HTMLBusiness-Funktionen

Wenn ein Parameter einer HTMLBusiness-Funktion den gleichen Namen hat wie eine globale Variable, enthält dieser Parameter den Wert, der vom Aufrufer innerhalb der Funktion hinterlegt wurde. Der Wert der globalen Variablen wird jedoch wiederhergestellt, wenn die Verarbeitung von der Funktion an den Aufrufer zurückgeht, wie in folgendem Beispiel:

`
...
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");
...
`
            

Die Ausgabe sieht so aus:

Vor dem Aufruf

global_variable entspricht 1000

x1 entspricht 100

x2 entspricht 200

x3 entspricht 300

Aufruf der Funktion . .

global_variable entspricht 10

x1 entspricht 10

x2 entspricht 20

x3 entspricht 30

Nach dem Aufruf

global_variable entspricht 10

x1 entspricht 100

x2 entspricht 200

x3 entspricht 300

Standard-HTML in HTMLBusiness-Funktionen

HTMLBusiness-Funktionen können Standard-HTML-Quelltext enthalten.

Im folgenden Beispiel gibt die HTMLBusiness -Funktion write_html_text den HTML-Text <H1> This is standard HTML </H1> zehnmal im Web-Browser aus.

`
 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;
`
            

Feldverweise

Sie können keine Parameter an Felder über Verweise übergeben. Betrachten Sie einmal folgendes Beispiel:

`
 ...
  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);
...
`
            

In diesem Fall gibt HTMLBusiness nur die erste Zeile der Tabelle aus, da mytable, als Parameter an die Funktion dump_tableübergeben, als der Wert der ersten Zeile des mehrwertigen Feldes mytable geprüft wird, der Line 1 heißt.

Um den Namen zur Laufzeit aufzulösen, müssen Sie den Namen der Variablen als Zeichenkette übergeben und den HTMLBusiness-Operator ^ verwenden, wie in folgendem Beispiel:

`
... 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); ...
`
            

Anwendungsbeispiel

Eine nützliche Anwendung besteht darin, HTMLBusiness-Funktionen zu schreiben, die HTML-Quelltexte erzeugen. Sie können beispielsweise die Funktion screenfield folgendermaßen definieren:

`
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;
`
            

Sie können die Funktion screenfield auf zwei verschiedene Weisen aufrufen:

  • Mit Parameternamen wie in:

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

  • Mit positionalen Parametern wie in:

    screenfield ("VBAK-VBELN");

Funktionsaufrufe können Ausdrücke prüfen, daher können Sie immer schreiben:

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

HTMLBusiness-Funktionen einbinden

Sie können HTMLBusiness-Funktionen in einem Template definieren und dann in jedes beliebige andere Template einfügen.

Im folgendem Fall wird davon ausgegangen, dass die Funktion screenfield im Template util.html definiert ist. Um screenfield zu verwenden, muss in einem anderen HTMLBusiness-Template util.html eingefügt sein:

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

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

Obwohl die Anweisung include den Parametern Standardwerte zuweist und keine Fehlermeldung erzeugt, wenn Parameter fehlen, müssen Sie die Parameter ~service, ~theme und ~name explizit aufführen, da der HTMLBusiness-Interpreter zwischen Kompilierzeit-Includes und Laufzeit-Includes unterscheidet.

Kompilierzeit-Includes werden immer zur Kompilierzeit des entsprechenden Templates eingefügt. Dies ist erforderlich, damit die im eingefügten Template definierten Funktionen bekannt sind.