Skip to main content

rekursive Beanshell Skripte, Übergabe von Werten

Comments

6 comments

  • Zendesk API User
    Author: marro - 9/16/2015 10:14

    Hallo Fabian,

    Du musst der Map zunächst einmal den context mitgeben. Und dem context kannst Du zuvor noch Deine Liste übergeben. Dann kannst Du aus dem zweiten Skript über den context auf die Liste zugreifen.

    Skript 1:

    Map map = new HashMap();

    ArrayList pageList = new ArrayList();

    pageList.add("root");

    context.setProperty("pages", pageList);

    map.put("context", context);

    templateStore = context.getUserService().getTemplateStore();
    templateStore.getScripts().getScriptByName("get_page_names").getExecutable(context.getProject().getTemplateSets().get(0)).execute(map);

    Skript 2:

    pageList = context.getProperty("pages"));

    Viele Grüße

    Donato

    0
  • Zendesk API User
    Author: Anonymous - 9/16/2015 13:14

    Hat geklappt danke.
    Ich habe jetzt weiter am Skript gebaut und jetzt wird Skript2 nicht mehr aufgerufen. Skript 1 bleibt in einer If-Schleife stehen. return("if") wurde eingefügt um zu sehen wo's hängt.

    //!BeanShell

    import de.espirit.firstspirit.access.store.Store.Type;
    import de.espirit.firstspirit.access.store.pagestore.Page;
    import de.espirit.firstspirit.access.store.pagestore.PageFolder;
    import de.espirit.firstspirit.access.store.pagestore.PageStoreRoot;

    userService = context.getUserService();
    templateStore = userService.getTemplateStore();
    Map contextMap = new HashMap();

    if(context.getProperty("pages") == null)
    {
    ArrayList pageList = new ArrayList();
    Map pageMap = new HashMap();

    currentPageStore = userService.getStore(Type.PAGESTORE, false);
    currentPage = currentPageStore.getUid().toString();

    if(!currentPage.isEmpty())
    {
      pageList.add(currentPage);
      pageMap.put("0", pageList);
      context.setProperty("pages", pageMap);
      contextMap.put("context", context);
      templateStore.getScripts().getScriptByName("get_page_names").getExecutable(context.getProject().getTemplateSets().get(0)).execute(contextMap);
      return("if");
    }
    else
    {
      return("Error: No entry point found.");
    }
    }
    else
    {
    templateStore.getScripts().getScriptByName("get_page_names").getExecutable(context.getProject().getTemplateSets().get(0)).execute(contextMap);
    }

    0
  • Zendesk API User
    Author: marro - 9/16/2015 13:37

    Kannst Du denn sagen, wo genau es hängen bleibt? Ich habe Dein Skript 1:1 in mein Projekt kopiert und es ruft das zweite Skript wie erwartet auf. Nur scheint die Abfrage "if (context.getProperty("pages") == null)" nichts zu bringen, weil die Property beim Start des Skripts immer fehlt und somit der if-Block immer ausgeführt wird.

    0
  • Zendesk API User
    Author: Anonymous - 9/16/2015 13:44

    Ich vermute, dass es bei mir in dem markierten if-Block nicht weiter geht ( if(!currentPage.isEmpty() ). Wenn ich hier das return("if") entferne erhalte ich keine Ausgabe / Fehler.

    Wenn Skript 2 aufgerufen wird müsste ich über ein return eine Ausgabe erhalten.

    Da ich Skript 1 mehrmals aufrufen will prüfe ich zuerst auf context.getProperty("pages") == null.

    0
  • Zendesk API User
    Author: Anonymous - 9/18/2015 13:13

    Skript 1

    //!BeanShell

    import de.espirit.firstspirit.access.UserService;
    import de.espirit.firstspirit.access.project.Project;
    import de.espirit.firstspirit.access.store.Store;
    import de.espirit.firstspirit.access.store.Store.Type;
    import de.espirit.firstspirit.access.store.pagestore.Page;
    import de.espirit.firstspirit.access.store.pagestore.PageFolder;
    import de.espirit.firstspirit.access.store.pagestore.PageStoreRoot;

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;

    userService = context.getUserService();
    templateStore = userService.getTemplateStore();
    Map contextMap = new HashMap();
    contextMap.put("context", context);

    if(context.getProperty("pages") == null){
    ArrayList pageList = new ArrayList();
    Map pageMap = new HashMap();

    currentPageStore = userService.getStore(Type.PAGESTORE, false);
    currentPage = currentPageStore.getUid().toString();
     
    if(!currentPage.isEmpty()){
      pageList.add(currentPage);
      pageMap.put("0", pageList);
      context.setProperty("pages", pageMap);
      templateStore.getScripts().getScriptByName("get_page_names").getExecutable(context.getProject().getTemplateSets().get(0)).execute(contextMap);
    }
    else{
      return("Error: No entry point found.");
    }
    }
    else{
    templateStore.getScripts().getScriptByName("get_page_names").getExecutable(context.getProject().getTemplateSets().get(0)).execute(contextMap);
    }

    Skript 2

    //!Beanshell

    import de.espirit.firstspirit.access.UserService;
    import de.espirit.firstspirit.access.project.Project;
    import de.espirit.firstspirit.access.store.Store;
    import de.espirit.firstspirit.access.store.Store.Type;
    import de.espirit.firstspirit.access.store.pagestore.Page;
    import de.espirit.firstspirit.access.store.pagestore.PageFolder;
    import de.espirit.firstspirit.access.store.pagestore.PageStoreRoot;

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;

    HashMap pageMap = context.getProperty("pages");

    if(pageMap != null){
    userService = context.getUserService();
    currentPageStore = userService.getStore(Type.PAGESTORE, false);

    pageList = currentPageStore.getChildren().toList();
    String[] pageNames;

    /*for(int i=get0; i<currentPageStore.getChildCount(); i++)
    {
      pageNames[i] = pageList.get(i).getName();
    }*/

    return("skript2");
    }
    else{
    return("Error: pageMap was empty. No pages submitted by previous script.");
    }

    Beide Skripte laufen ohne Fehlermeldung. Wenn ich Skript 2 direkt aufrufe erhalte ich auch die erwartete Ausgabe. Wenn ich Skript 2 über Skript 1 aufrufe erhalte ich keine Ausgabe. Script 1 geht bei meinem Aufruf in den 1. und anschließend in den 2. if-Block.

    Hat jemand eine Idee was falsch ist?
    Wie debuggt ihr? Ich binde mein Skript momentan in eine Seite mit CMS_RENDER ein und schaue an welchen Stellen ich mit return noch eine Ausgabe erhalte.

    0
  • Zendesk API User
    Author: Anonymous - 9/28/2015 7:26

    Skript 2 wird wirklich aufgerufen. return gibt jedoch keine Ausgabe. Um Fehlermeldungen und Infomeldungen ( context.logInfo() ) zu erhalten muss im ersten Skript folgendes hinzugefügt werden:

    contextMap.put("out", out);

    contextMap.put("err", err);

    0

Please sign in to leave a comment.