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