Eigene Funktionen: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „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 Hi…“) |
|||
Zeile 52: | Zeile 52: | ||
Aufrufender Include: | Aufrufender Include: | ||
<source lang="xml"> | <source lang="xml"> | ||
− | <sp:include template="!{ | + | <sp:set name="myvalue" value="5"/> |
+ | <sp:include template="!{include.target.errorhandling}" return="_result"> | ||
<sp:argument name="mode" value="x"/> | <sp:argument name="mode" value="x"/> | ||
<sp:argument name="value" object="myvalue"/> | <sp:argument name="value" object="myvalue"/> | ||
Zeile 64: | Zeile 65: | ||
</sp:else> | </sp:else> | ||
</sp:condition> | </sp:condition> | ||
− | |||
</source> | </source> | ||
Zeile 70: | Zeile 70: | ||
<source lang="xml"> | <source lang="xml"> | ||
<sp:map name="_result" action="new"/> | <sp:map name="_result" action="new"/> | ||
− | <sp:map name="_result" key="success" action=" | + | <sp:map name="_result" key="success" action="put" value="true"/> |
<sp:condition> | <sp:condition> | ||
<sp:if name="system.arguments.mode" eq="x"> | <sp:if name="system.arguments.mode" eq="x"> | ||
− | <sp: | + | <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} + 10"/> |
− | |||
− | |||
− | |||
</sp:if> | </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:else> | ||
− | <sp:map name="_result" key="success" action=" | + | <sp:map name="_result" key="success" action="put" value="false"/> |
− | <sp:map name="_result" key="message" action=" | + | <sp:map name="_result" key="message" action="put" value="invalid mode '${system.arguments.mode}'"/> |
</sp:else> | </sp:else> | ||
</sp:condition> | </sp:condition> | ||
+ | <sp:return object="_result"/> | ||
</source> | </source> | ||
<noinclude> | <noinclude> | ||
[[Category:Funktionen]] | [[Category:Funktionen]] | ||
</noinclude> | </noinclude> |
Version vom 5. Mai 2015, 08:33 Uhr
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 Fehler-Fall entsprechende selbst definierte Fehler-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"/>