Aller au contenu principal

DisplayNames setzen per Serverskript?

Commentaires

9 commentaires

  • Zendesk API User
    Author: mbergmann - 11/24/2013 11:32

    Hallo Matthias,

    Scripte in Aufträgen nutzen per Default eine read only Connection. Sollen Änderungen durch das Script durchgeführt werden, muss mit dem Button "Eigenschaften" im Scriptdialog des Tasks eine eigene Connection konfiguriert werden. Üblicherweise nutzt man hierfür einen technischen User, der über die entsprechenden Rechte verfügt.

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: matthiasforberg - 11/24/2013 20:11

    Alle Achtung!

    Ich hätte nicht damit gerechnet, dass ich an einem Sonntag eine Antwort darauf bekomme. Nicht schlecht!

    Guter Hinweis mit den Verbindungsdaten im Auftrag. Jetzt weiß ich endlich, wozu die Felder gut sind... Leider bringt es aber in diesem Fall keine Veränderung. Ich bekomme immer noch dieselbe Exception. Ich habe das auch auf einem eigenen Testsystem ausprobiert, mit dem Admin - der definitiv alle Rechte hat. Leider nix!

    Gibt es noch einen anderen Ansatz, sich die richtige Connection zu holen? Ansonsten muss ich das doch als Client-Script laufen lassen, was dann vermutlich Stunden dauern wird.

    Grüße

    Matthias

    Edit:

    Hier noch ein Extrakt meines Codes. Vielleicht ist da ja ein Denkfehler drin?!

    import de.espirit.firstspirit.access.store.StoreElementFolder;

    import de.espirit.firstspirit.access.store.Store.Type;

    refMap = new HashMap();

    writeNames(testMode) {

      e = context.userService.getStore(Type.PAGESTORE,true,false);

      l = context.project.masterLanguage;

      all = e.getChildren(StoreElementFolder.class,true).toList();

     

      for (folder : all) {

        uid = folder.uid;

        dsp = folder.getDisplayName(l);

        rel = folder.releaseStatus;

        if(dsp.equals(uid)) {

          dsp = refMap.get(uid);

          context.logInfo(uid+" --> "+dsp);

          if(!testMode && dsp != null) {

            folder.setLock(true,false);

            folder.getLanguageInfo(l).setDisplayName(dsp);

            folder.save();

            folder.setLock(false,false);

            if(rel != 0) {

                folder.release(false);

            }

          }

        }

      }

    }

    // ...befüllen der HashMap

    writeNames(false);

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 11/25/2013 11:47

    Die Meldung nachdem der Umstellung des Auftrages muss aber eine andere sein. Die SecurityException wird durch die vorgschlagene Anpassung behoben.

    0
  • Zendesk API User
    Author: matthiasforberg - 11/25/2013 13:56

    Leider nein. Ich bekomme immer noch dieselbe "java.lang.SecurityException: changes not allowed for current connection"

    Das einzige, was sich geändert hat, sind diese Einträge:

    INFO  25.11.2013 14:44:35.815 {seID=843359} (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=3681609862860288097, user=Admin, userID=1, type=DUMMY) created

    INFO  25.11.2013 14:44:35.816 {seID=843359} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): skript connection created: 3681609862860288097, user=Admin

    INFO  25.11.2013 14:44:35.816 {seID=843359} (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=2062703538509913757, user=Admin, userID=1, type=DUMMY) created

    ...

    INFO  25.11.2013 14:44:36.026 {seID=843359} (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Session terminated (ID=2062703538509913757, user=Admin(dummy)), number of sessions now 80

    INFO  25.11.2013 14:44:36.026 {seID=843359} (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Invalid session id 2062703538509913757

    INFO  25.11.2013 14:44:36.026 {seID=843359} (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): close dummy session (ID=3681609862860288097, user=Admin)

    INFO  25.11.2013 14:44:36.026 {seID=843359} (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Invalid session id 3681609862860288097

    Und es sind definitiv die Berechtigungen zum Ändern im Pagestore vorhanden. Mein Try/Catch schmeißt mir aber bei JEDEM Knoten den Fehler. Scheint also doch noch irgendwas zu fehlen?!

    Es handelt sich übrigens noch um die Server-Version 4.2.468, falls das irgendwie relevant ist.

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 11/25/2013 14:17

    Wenn der Typ des Skriptes wirklich korrekt ist, dann ist das wohl ein Fall für den Helpdesk.

    Es handelt sich übrigens noch um die Server-Version 4.2.468, falls das irgendwie relevant ist.

    Der kann dazu dann kompetent Auskunft geben.

    0
  • Zendesk API User
    Author: tklein - 11/25/2013 14:27

    Hallo Matthias,

    du muss die connection im code auch benutzen, das sehe ich in dem Beispiel nicht. Machst du das?

    UserService und Project müssen über das connection Objekt und nicht über das context Objekt geholt werden.

    Viele Grüße


    Tobias

    0
  • Zendesk API User
    Author: matthiasforberg - 11/25/2013 15:10

    Hallo Tobias,

    vielen Dank, das klingt allerdings logisch! Ich dachte, es wird direkt die Connection verwendet, aber jetzt wo du's sagst, habe ich das wohl nicht berücksichtigt. Ich fürchte, ich muss mich aber weiter blamieren, ich weiß nämlich nicht, wie man sich die Connection aus den Eigenschaften holt. Mit context.getConnection() offenbar nicht, denn ich habe die zwei Zeilen umgebaut und es hat nichts gebracht:

      p = context.connection.getProjectById(pid);

      e = p.userService.getStore(Type.PAGESTORE,true,false);

    Muss ich die Verbindung irgendwie über getProperty holen oder so? Wie mache ich das ganz ohne "context"?

    Grüße

    Matthias

    EDIT:

    OK, ich ziehe die Frage zurück - wer lesen kann, ist klar im Vorteil. Laut Admin-Handbuch, geht es direkt über connection...

    Das probier ich jetzt nochmal aus.

    0
  • Zendesk API User
    Author: matthiasforberg - 11/25/2013 15:24

    Juhu,

    danke Euch, jetzt hat es endlich geklappt. Ich habe mir die Verbindung im Skript so geholt:

    pid = 12345;

    p = connection.getProjectById(pid);

    e = p.userService.getStore(Type.PAGESTORE,true,false);

    l = p.masterLanguage;

    Und so geht es jetzt.

    Grüße

    Matthias

    0
  • Zendesk API User
    Author: tklein - 11/25/2013 17:08

    genau wenn du bsh nutzt ist das connection objekt nutzbar. Im Executable musste es dir aus der map holen.

    Ex-/Import save und kopierbr wir es so: project = connection.getProjectById(context.getProject().getId());

    Viele Grüße


    Tobias

    0

Vous devez vous connecter pour laisser un commentaire.