Zum Hauptinhalt gehen

Rückgabe einer Datenstruktur von einem Executable in ein Template

Kommentare

7 Kommentare

  • Zendesk API User
    Author: mbergmann - 8/11/2018 2:14

    Hallo Christian,

    doch, das geht - habe ich schon öfter gemacht.

    Du brauchst allerdings trotzdem ein Skript-Objekt, das dann auf das Executable "veweist".

    Ist das Skript auch vom Typ "Vorlage"?

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: pavone - 8/27/2018 15:07

    Hallo Christian,

    benötigst Du noch weitere Hilfe oder hat Dir Michaels Antwort bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

    Viele Grüße

    Tim

    0
  • Zendesk API User
    Author: ChKo - 8/27/2018 15:15

    Hallo,

    soweit ich weiß sollte es da zwei Möglichkeiten geben:

    a) Im Executable die Rückgabe in einen der Kontexte schreiben:

    Beispiel: context.getGenerationContext().getPageContext().setVariableValue("set_pt_myValue", "MAGIC!");

    Dies hat den Vorteil, dass auch mehrere oder komplexere Werte übergeben werden können.

    b) Falls die Rückgabe nur ein String sein soll, könnte man folgendermaßen im Template-Code verfahren:

    $CMS_SET(set_myResult)$$--

    --$$CMS_RENDER(script:"my_script")$$--

    --$$CMS_END_SET$

    $CMS_SET(set_myValue,set_myResult.toString())$$-- .toString() muss auf die Variable ausgeführt werden, da ansonsten das Template-Document nicht geparsed wird --$

    Die Variable "set_myValue" hätte nun das Ergebnis der Executable und könnte weiter manipuliert werden, bevor es in einem $CMS_VALUE()$ ausgegeben wird.

    Gruß,

    Christopher

    0
  • Zendesk API User
    Author: mbergmann - 8/27/2018 16:34

    Hallo,

    einen Wert "einfach so von außen" in den Kontext zu schreiben finde ich nicht wirklich "schön", wenn dann sollte der Name der Variablen dem Executable übergeben werden - ist aber immer noch ein bisschen zu viel "Magie" meiner Meinung nach.

    Mein "Standard-Weg" ist hier noch etwas anders - so wie ich es schon grob skizziert hatte:

    Im Template:

    $CMS_SET(set_result,{:})$

    $CMS_RENDER(script:"some_script_name", result:set_result)$

    $-- und dann z.B. sowas: --$

    $CMS_VALUE(set_result.someKey.someMethod())$

    $-- oder --$

    $CMS_SET(set_someResultObject, set_result.anotherKey)$

    Im Skript "some_script_name":

    #!executable-class

    My_Executable_Name_From_Module_XML

    Im Executable:

    ...

    Map<String, Object> result = (Map<String,Object>) params.get("result");

    ...

    result.put("someKey", someResultObject);

    result.put("anotherKey", anotherResultObject);

    ...

    Wenn man tatsächlich nur einen Wert braucht, kann man natürlich statt der Map auch eine leere Liste übergeben uns sich da dann das erste Element heraus holen.

    Was mir an dem Ansatz gefällt: Es ist "weniger Magie". Insbesondere tauchen nicht irgendwelche Variablen in irgendwelchen Kontexten auf. Alles was man im Template als Variable nutzt hat man auch vorher als Variable dort definiert.

    Welche Objekte dann unter den einzelnen Keys zu finden sind, kann man gut im ApiDoc des Executables dokumentieren. Mit der Map-Variante ist man da auch recht flexibel - wenn sich später herausstellt, dass man "mehr" braucht, kann man das recht "schön" ergänzen.

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: choff - 8/28/2018 7:52

    Hallo Tim (und Christopher und Michael),

    vielen Dank für eure Antworten, ich bin noch nicht dazu gekommen, diese Vorschläge auszuprobieren. Bisher lasse ich das Executable einfach einen String zurückgeben und das funktioniert für unseren Anwendungsfall. Prinzipiell interessiert es mich aber sehr, auch andere Datenstrukturen zurückzugeben, deshalb möchte ich, sobald ich Zeit habe, wieder zu diesem Thema zurückkehren und eure Vorschläge ausprobieren.

    Viele Grüße,

    Christian

    0
  • Zendesk API User
    Author: choff - 8/29/2018 12:20

    Danke Michael,

    so geht es. Ich hatte wohl etwas falsch gemacht. Vielleicht wollte ich einen neuen Parameter durch params.put("rueckgabewert", ...) einfügen.

    Viele Grüße,

    Christian

    0
  • Zendesk API User
    Author: choff - 8/29/2018 12:22

    Danke Christopher,

    für deine Antwort. Ich hatte mehr so etwas gesucht in der Richtung, wie Michael es geschrieben hat. Ist aber auf jeden Fall interessant zu sehen, was man noch so machen kann. Vielleicht ist das in anderem Zusammenhang ja mal ganz nützlich.

    Viele Grüße,

    Christian

    0

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.