Aller au contenu principal

Mit CMS_SET Rückgabewert setzen

Commentaires

9 commentaires

  • Zendesk API User
    Author: wiegele - 7/1/2014 13:47

    Hallo zusammen,

    also das Script liefert mir ein TemplateDocument zurück.

    TemplateDocument hat eine überschaubare Menge an Methoden, aber nichts was mir meine Rückgabe in ein String umwandeln kann.

    Was muss ich machen damit ich meinen Rückgabewert (String) auch im Template als String weiter verarbeiten kann.

    habe schon überall toString() angehängt, ohne erfolg.

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 7/1/2014 15:07

    Ein "CMS_RENDER" gibt nur etwas aus. Wenn darüber Variablen ausgetauscht werden sollen, muss das über den Variablen-Kontext realisiert werden. Dafür hier ein paar potentiell hilfreiche Hinweise:

    1. Der Context für ein Script ist bei derGenerierung "GenerationScriptContext"
    2. Über "getGenerationContext().getContext(String name)" kommt man an einen Variablekontext (u.a.)
    3. In diesem kann man Werte setzen oder überschreiben

    Eventuell hilft das. Wenn nicht müsstest du eventuell deinen Anwendungsfall etwas konkreter darlegen.

    0
  • Zendesk API User
    Author: wiegele - 7/2/2014 10:05

    Hallo Herr Jodeleit,

    der genaue Anwendungsfall ist:

    Auf einer News Übersichtsseite möchte ich, dass neueste Datum einer News ermitteln.

    Es sollte beim iterieren über die News immer geprüft werden, ob die momentane News ein aktuellers Datum als die zuvor bearbeitete News hatte.

    Und genau diese Überprüfung wollte ich auslagern.

    Zwei Datumswerte als Parameter übergeben und ein Datumswert als Rückgabewert.

    Eine Ausgabe im Ausgabekanal ist unerwünscht.

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 7/2/2014 11:08

    Das geht wie oben von mir beschrieben, der passende Kontext ist der Seitenkontext (die Absätze haben jeweils einen eigenen Kontext) und der hat den Namen "page". Realisieren lässt sich das auch ohne Skript über Templatecode:

    $CMS_IF((newestNewsDate == null) || (newestNewsDate < newsDate))$

        $CMS_SET(#global.context("page")["newestNewsDate"], newsDate)$

    $CMS_END_IF$

    Disclaimer: Ich habe das nicht getestet, keine Garantie gegen Tippfehler :smileywink:

    0
  • Zendesk API User
    Author: MichaelaReydt - 7/10/2014 10:43

    Hallo Dirk,

    benötigst Du noch weitere Hilfe oder haben Dir Peters Antworten bereits geholfen?

    Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

    Viele Grüße

    Michaela

    0
  • Zendesk API User
    Author: j_mueller - 7/31/2014 12:38

    Ich verwende immer folgendes Snippet am Ende meine "API"-Formatvorlagen, wenn ich Werte zurückgeben möchte:

    $CMS_IF(!return.empty)$

          $CMS_SET(context, if(#global.context("section").empty, #global.context("PAGE"), #global.context("section")))$

          $CMS_SET(void, context.setVariableValue(return, _result))$

    $CMS_END_IF$

    Vorteil ist also auch, dass ich von aussen bestimmen kann, wie meine Rückgabe-Variable heißen wird...

    $CMS_RENDER(template:"...", value:"...", return:"myValue")$
    $CMS_VALUE(myValue)$ 
    0
  • Zendesk API User
    Author: mbergmann - 8/7/2014 6:50

    Die Variante, den "gewünschten" Variablennamen einfach mit zu übergeben ist eine sehr schöne Sache, weil es möglichst seiteneffektfrei ist.

    Es gibt nämlich nichts schlimmeres als ein großes Projekt mit vielen Rendertemplates, wo Variablen im aufrufendem Template einfach "aus dem Nichts" auftauchen weil ihr Name nur im Rendertemplates steht.

    Noch besser ist es, wenn man immer in den direkt darüber liegenden Context schreibt, sonst könnte es zu Problemen bei verschachtelten Rendertemplates kommen (da die dann alle in denselben context schreiben).

    $CMS_SET(void, #global.context.parentContext.setVariableValue(return,_result))$

    Eine andere Variante ist, den Wert in ein Map zu wrappen, d.h. man übergibt mit dem Parameter return eine vorher mit CMS_SET gesetzte leere Map als Parameter und ruft im Rendertemplate return.put("result", ...) auf. Geht auch mit einer Liste, Geschmackssache.

    0
  • Zendesk API User
    Author: j_mueller - 8/7/2014 13:40

    Genau diese Probleme habe ich bereits gehabt, daher der Ansatz mit dem Übergeben der Variablennamen. :smileyhappy:

    Das mit dem Parent-Context klingt auch gut. Funktioniert das dann wirklich immer? Welche Arten von Kontexten kann man durch den Aufruf erhalten?

    0
  • Zendesk API User
    Author: joachim_nissler - 6/24/2015 17:47

    @Julius Müller: Danke! Sie haben meine Abend gerettet. Bin gerade fast an einer Variablen verzweifelt, die weder Null, noch leer war, noch eine bestimmte size oder length hatte.

    Die Variable wurde über ein CMS_RENDER befüllt.

    Ihr Snippet eingebaut und schon läufts :-)

    0

Vous devez vous connecter pour laisser un commentaire.