Scripting Eigene Funktionen

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Um Coding redundanzfrei zu halten sind im Script-Code im LiveCycle Designer „Eigene Funktionen“ sehr wichtig. Sie entsprechen in ABAP einem Funktionsbaustein, einer Form-Routine oder einer Methode.

Eigene Funktionen lassen sich nur mit JavaSript anlegen. Mit FormCalc ist das nicht möglich.

Eigene Funktionen unterscheiden sich von den „Eingebauten Funktionen“, die bereits von FormCalc, bzw. JavaScript mitgliefert wurden.

Warum Funktionen

  • Mit Funktionen kann man Redundanz vermeiden
  • Man spart sich Tipparbeit
  • Das Coding wird übersichtlicher
  • Funktionen in einem Skriptobjekt lassen sich leicht finden und so schneller in andere Formulare kopieren

Grundlagen

  • Die Variablen, die einer Funktion übergeben werden, werden immer als Kopie übergeben und nicht als Referenz. Werden die Variablen also in der Funktion verändert, werden die Variablen im Aufrufer nicht verändert.
  • Eine Funktion besteht immer aus dem Coding der Funktion und ein oder mehreren Aufrufstellen der Funktion.
  • Eigene Funktionen können nur mit JavaScript programmiert werden. Dies stellt gerade für Formulare mit umfangreichem Scripting eine deutliche Einschränkung der Verwendbarkeit von FormCalc gegenüber JavaScript dar.

Kommentierung Funktion

Da eine Funktion relativ selten verwendet wird, aber dann oft eine hohe Bedeutung hat, sollte eine Fuktion ausführlich kommentiert werden

  • Was macht die Funktion?
  • Bei welchem Ereignis und in welchem Objektknoten wird die Funktion aufgerufen?
  • Welche Importparameter gibt es und welche Werte werden erwartet?
  • Von welchen Annahmen geht die Funktion aus?
  • Autor + Datum

Verwendung Funktion

Returnwert Funktion

  • Eine Funktion hat immer (nur) genau einen Return-Wert, bzw. Exportparameter.
  • Benötigt man mehrere Returnwerte, dann kann man diese Werte in einem Array speichern. Die Zählung des Array beginnt bei 0 und setzt sich dann fort mit 1, 2 etc.
  • Der Return-Parameter ist zu erkennen im Coding durch "return <Variablenname>;". Es ist nicht wichtig wie die Returnvariable heißt.
return Variablenname;

Wird ein Arrayparameter verwendet.

ArrayParameter = new Array();
...
ArrayParameter[0] = ...
ArrayParameter[1] = ...
ArrayParameter[2] = ...

return ArrayParameter;

Funktion

Die nachfolgende Funktion "FunktionAddition" hat zwei Importparameter "Parameter1" und "Parameter2".

function FunktionAddition(Parameter1, Parameter2) 
{  
 var Returnparameter;

 Returnparameter = Parameter1 + Parameter2; //Addition der Parameter

 return Returnparameter;   //Rückgabeparameter 
 }

Aufruf Funktion

  • 2 Importparameter der Funktion
  • Funktionsbausteiname
  • Aufnahme des Returnparameters der Funktion
var Par1;
var Par2;
var Returnwert;

Par1 = 10;
Par2 = 20;

//Die Variable "Returnwert" nimmt den Rückgabeparameter der Funktion auf
//Die Variablen "Par1" und "Par2" sind die Importparameter der Funktion
//FunktionAddition ist der Name der Funktion

Returnwert = FunktionAddition(Par1, Par2);  //Ergebnis = 30

Skriptobjekt

  • Theoretisch kann das Coding der Funktion in der Codingroutine stehen, in der das Coding des Aufrufers sich befindet. Dies ist selten sinnvoll, da eine Funktion gewöhnlich von mehreren Codingstellen aufgerufen wird.
  • Vom gesamten Formular aufrufbar ist Coding in einem Skriptobjekt.

Skriptobjekt1.JPG

Projektbeispiel

Es wird ein Skriptobjekt "Main" angelegt, in dem die Funktion abgespeichert wird.

EigeneFunktion1.JPG

Die Funktion wird im Skriptobjekt abgelegt. Es wird hier praktisch wie in ABAP mit dem Befehl "static" eine Variable „counter“ jeweils um den Wert der übergebenen Variable „Parameter1“ addiert.

data.#variables[0].Main - (JavaScript, client)
function FunktionWertAdd(Parameter1) 
{  //Wenn statische Variable noch nicht definiert ist, initialisiere sie 
   if ( typeof counter == 'undefined' ) 
   {
      counter = 0;
   }
   
  //Erhöhe den Gesamtwert um den Wert der jeweiligen Ausgabeseite 
   counter = counter + Parameter1;
   
return counter;   //Rückgabeparameter mit Gesamtwert inklusive jeweils letzter Ausgabeseite
}


Aufruf der Funktion.

var lv_geswert = 0;

//Füllen Variable lv_wert. Er wird der Funktion "FunktionWertAdd" übergeben 
 lv_wert = ..

//Der Rückgabewert der Funktion wird in die Variable "lv_geswert" übertragen 
lv_geswert = Main.FunktionWertAdd(lv_wert); 

Siehe auch stackoverflow.com: Using of "undefined" (EN).

Siehe auch Nutzung einer globalen Variable zur Füllung des Übertrags einer Seite.

Projektbeispiel Füllen mehrerer Übertragsfelder

Eingebaute Funktionen

Anwendungen für eigene Funktionen

  • Aufaddierung einer „statischen“ Variablen
  • umfangreich gestaltete Messageboxen (mit Titel, Text und Typ)
  • Dialogboxen
  • komplexe Berechnungen

Web-Links

Literatur