Zum Hauptinhalt gehen

Rückgabewert (variable) eines Beanshell Scripts in Ausgabekanal verwenden

Kommentare

2 Kommentare

  • Zendesk API User
    Author: mbergmann - 8/12/2015 23:41

    Hallo,

    man kann hier dem Script ein "Container-Objekt" übergeben, das dann befüllt wird. Wichtig ist hier, dass dieser Container vor dem Aufruf von $CMS_RENDER(...)$ definiert wird, damit er im entsprechenden aufrufenden Template zur Verfügung steht. Der Übersichtlichkeit halber macht man das am besten direkt vor dem Aufruf.

    Beispiel:

    $CMS_SET(set_result,[])$ $--Leere Liste als Container --$

    $CMS_RENDER(script:"....",param1:...., param2:..., resultContainer:set_result)$

    $CMS_VALUE(set_result.get(0)....)$

    Im Script würde man dann einen entsprechenden Rückgabewert einfach in den übergebenen Container einfügen:

    ...

    myResult=...

    resultContainer.add(myResult);

    Wenn man hier mit einer Map statt einer Liste als Container arbeitet kann man sogar mehrere Rückgabewerte bekommen - wichtig nist nur das auch alles entsprechend zu dokumentieren ;-)

    Kleiner Hinweis: Das direkte Setzen bzw. Definieren von Variablen "von unten nach oben" (also aus dem Script in den Seiten / Absatzkontext) ist - obwohl technisch möglich - im Gegensatz dazu nicht zu empfehlen, weil es den Code schlecht les- bzw. wartbar macht und (z.B. bei unbewusster Mehrfachverwendung eines Variablennamens einmal im Script und im Template) zu entsprechenden Seiteneffekten führen kann.

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: sivaprasad9394 - 10/18/2020 16:44

    Hello Bergmann,

    Thank you for your reply to the question and it is helpful for me.

    But i am not getting return list value. I have completely explained down the issue for your reference.

    FS-Version: Version: 5.2.200312.78911

    In Page Template code :

    $CMS_SET(set_result,[])$

    $CMS_SET(set_lang, #global.language)$

             $CMS_RENDER(script:"pagestoresort", pageFolderElement:pt_folder.get(),resultContainer:set_result)$   // Calling Script                       

             $CMS_SET(set_result)$$CMS_RENDER(script:"pagestoresort", pageFolderElement:pt_folder.get(),resultContainer:set_result)$$CMS_END_SET$ // Not calling

                 Return_Size: $CMS_VALUE(set_result.size())$

                 RR$CMS_VALUE(set_result.get(0))$

                       $CMS_FOR(for_listValues, set_result)$

                                   $CMS_VALUE(for_listValues)$                              

                       $CMS_END_FOR$

               $CMS_SET(set_page_folder, set_result.get(0))$                                                                                                

               $CMS_SET(set_image,set_page_folder.getFormData().get(set_lang, "pt_image_1").get())$                     

               $CMS_SET(set_headline,set_page_folder.getFormData().get(set_lang, "headline").get())$

    Script Code:

    Page lastUpdatedPage;

    PageRefFolder siteStoreElement = context.getProperty("pageFolderElement");

    List resultValue = context.getProperty("resultContainer");

    ..................

    .........//code  inside// ......

    .............................................

    context.logInfo("**UID:**"+(lastUpdatedPage.getFormData().get(null,"pt_image_1").get()).getMedia().getUid());  

    context.logInfo("**Page Class:**"+lastUpdatedPage.getClass());

    resultValue.add(lastUpdatedPage);

    context.logInfo("Result Return Size:"+resultValue.size());

    result.setValue("");

    Here problem is if i call the $CMS_RENDER()$ inside the $CMS_SET()$ it is not calling the script. If i call the $CMS_RENDER()$ out side the $CMS_SET()$ the specific script is called and i can see the log statements in the preview.

    Below screenshot is outside of CMS_SET tag RENDERED script:

    18.10.2020 17:34:10.722 INFO  (Script 'pagestoresort' (id=1107464) at 0, 0): **UID:**demo_image_a_16_9_hd_2x

    18.10.2020 17:34:10.722 INFO  (Script 'pagestoresort' (id=1107464) at 0, 0): **Page Class:**class de.espirit.firstspirit.store.access.pagestore.PageImpl

    18.10.2020 17:34:10.722 INFO  (Script 'pagestoresort' (id=1107464) at 0, 0): Result Return Size:1

    RENDER is not calling inside if i place CMS_SET tag and  am not getting any results to HTML channel.

    I am not sure what else i am missing here.. It will be helpful for me to resolve the problem.

    Thanks and Regards,

    Siva

    0

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