Eigene Funktionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen

Ab Version 2.13

Eigene Funktionen können in SPML nicht innerhalb eines Templates/SPML-Datei definiert werden. Jede Funktion in SPML ist ein eigenes Templates/SPML-Datei.

Mit Hilfe von sp:include kann das Funktions-Template aufgerufen werden.

Funktions-Argumente

Dem Funktionsaufruf können Argumente übergeben werden. Dafür wird im Body von sp:include der sp:argument-Tag verwenden

Aufrufender Include:

<sp:include template="!{myfunctions.addition}">
   <sp:argument name="myvar1" value="x"/>
   <sp:argument name="myobj1" object="system.information.myfield"/>
</sp:include>

Die Abfrage der Übergabe-Argumente in dem Funktions-Template erfolgt über system.arguments und enthält eine Map mit den Argumenten.

Funktions-Template:

<sp:print name="system.arguments"/>

Rückgabe-Wert

Um Werte einer Funktion zurück zu geben wird der sp:return-Tag verwendet. Dieser beendet sofort die Ausführung der Funktion und liefert den angegebene Wert an den aufrufenden sp:include-Tag zurück. Der Include-Tag kann ein Attribut return definieren in dem der Name der Variable angegeben wird in dem der Rückgabe-Wert gespeichert werden soll.

Aufrufender Include:

<sp:include template="!{myfunction}" return="c">
   <sp:argument name="mode" value="x"/>
   <sp:argument name="value" object="myvalue"/>
</sp:include>
result: <sp:print name="c"/>

Funktions-Template

<sp:condition>
   <sp:if name="system.arguments.mode" eq="x">
      <sp:return expression="${system.arguments.value} + 10"/>
   </sp:if>
   <sp:else>
      <sp:return expression="${system.arguments.value} * 2"/>
   </sp:else>
</sp:condition>


Fehlerbehandlung

Zur Fehlerbehandlung gibt es keine zusätzliche Funktionalität. Hierfür wird ebenfalls sp:return verwendet. Das im diesem-Fall entsprechende selbst definierte Result-Objekte zurück liefert.


Aufrufender Include:

<sp:set name="myvalue" value="5"/>
<sp:include template="!{include.target.errorhandling}" return="_result">
   <sp:argument name="mode" value="x"/>
   <sp:argument name="value" object="myvalue"/>
</sp:include>
<sp:condition>
   <sp:if name="_result.success">
      result: <sp:print name="_result.value"/>
   </sp:if>
   <sp:else>
      error: <sp:print name="_result.message"/>
   </sp:else>
</sp:condition>

Funktions-Template

<sp:map name="_result" action="new"/>
<sp:map name="_result" key="success" action="put" value="true"/>
<sp:condition>
   <sp:if name="system.arguments.mode" eq="x">
      <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} + 10"/>
   </sp:if>
   <sp:elseif name="system.arguments.mode" eq="y">
      <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} * 2"/>
   </sp:elseif>
   <sp:else>
      <sp:map name="_result" key="success" action="put" value="false"/>
      <sp:map name="_result" key="message" action="put" value="invalid mode '${system.arguments.mode}'"/>
   </sp:else>
</sp:condition>
<sp:return object="_result"/>