Projekt Settings (z.B. Auflösungen) übertragen?
Author: lbernau
Publication Date: 3/27/2015 14:38
Hallo zusammen,
ich hab in der Suche leider nichts dazu gefunden, aber uns kam bei der Benutzung des CorporateContent Moduls die Frage auf ob es möglich ist die im Master-Projekt angelegten Auflösungen für Medien in die Client-Projekteinstellungen zu übertragen.
Aktuell haben wir ca. 15 Auflösungen angelegt welche in 6 Client-Projekte übernommen werden müssen, was natürlich auf dem herkömlichen Wege über den Servermanager schon langsam zu einer nervigen Arbeit wird.
Gefunden haben wir auf dem FS-Server im Projektverzeichnis die Datei "project.xml", wo offenbar auch alle Auflösungen aufgelistet werden, wenn wir allerdings die Konfiguration der Auflösungen vom Master-Projekt in ein Client Projekt kopieren (bei heruntergefahrenem FS-Server) werden nach einem Server Neustart leider diese Auflösungen nicht angezeigt / übernommen.
Daher unsere Frage:
Ist es überhaupt (irgendwie) möglich solche Settings von Projekt A zu Projekt B zu übertragen? - Und wenn ja => Wie? ;-)
Grüße,
Lars
-
Author: witt - 3/27/2015 14:46
Hallo Lars,
die Funktion wird mit der FirstSpirit Version 5.2 zur Verfügung gestellt werden, allerdings nicht über das Modul CorporateContent oder ContentTransport, sondern über die Entwicklerfunktion "ExternalSync".
Viele Grüße,
Daniel
0 -
Author: lbernau - 3/27/2015 15:03
Hallo Daniel,
das ist leider nicht ganz die Antwort die wir uns erhofft haben, bis zum Release von 5.2. haben wir vermutlich die Auflösungen per Hand in die Projekte eingepflegt. ;-)
Trotzdem Danke für die Info.
Grüße,
Lars
0 -
Author: sguener - 3/27/2015 16:38
Hallo Lars,
wenn die Access-API lizensiert wurde, kannst du die Auflösungen per API auslesen und setzen. Bei unseren Kunden machen wir das auch so. Falls du Fragen zur Umsetzung hast, kann ich dir gerne weiterhelfen.
Schöne Grüße
Sahin
0 -
Author: ceggert - 4/9/2015 8:38
Hallo Sahin,
ich wäre an einem Lösungsansatz interessiert.
Wo führt Ihr dieses Script aus über die Admininistrationskonsole als Auftrag in dem Projekt von dem ihr die Auflösungen rausholen wollt?
vielen Dank und viele Grüße,
Christopher Eggert
0 -
Author: sguener - 4/14/2015 13:57
Hallo Christopher,
ich kann leider erst jetzt antworten. Wir haben eine eigene Applikation dafür geschrieben, die eine Verbindung zum Server aufbaut und mittels Access-API die notwendigen/gewünschten Operationen ausführt.
Wenn du weißt, wie eine externe Serververbindung zum FS-Server aufgebaut wird, dann ist das schon die halbe Miete. Du musst dir dann über diese Connection beide Projekte holen und die gewünschen Setter und Getter aufrufen.
Ich kann dir die Applikation leider nicht zur Verfügung stellen. Falls du nicht mehr weiter weißt, helfe ich gerne (sofern es die Zeit zulässt).
Schöne Grüße
Sahin
0 -
Author: ceggert - 4/14/2015 14:53
Hallo Sahin,
schon mal danke für deine Antwort. Ja etwas hab ich schon. Ich hole mir auf dem Server das Projekt in dem alle Auflösungen definiert sind und das Projekt in welche ich diese importieren möchte ich habe auch eine Methode in der API gefunden setResolutions(). Ich bekomme hier auch kein Fehler vom Server leider legt mir dieser aber auch die Auflösungen nicht automatisch an :smileysad:
Ich hatte zuerst den Verdacht, dass es an der Auflösung ORIGINAL liegt das er diese nicht importieren kann weil die ja schon zu jedem Projekt sowieso gehört. Daraufhin habe ich diese Auflösung aus der Liste entfernt aber jedoch auch ohne Erfolg. Leider keine Fehlermeldung ich habe einen eigenen Server auftrag dafür gemacht mit einem kleinen Beanshell-Script. Ergebnis auftrag läuft fehlerfrei durch aber keine Auflösungen.
Das Scrit ist bisher noch etwas unsauber war bisher nur ein Testing auf dem Server aber ich dachte so in der Art müsste es funktionieren:
//!Beanshell
import de.espirit.firstspirit.access.project.Resolution;
import java.util.List;
connection = context.getConnection();
masterProject = "Content Master";
List<Resolution> resolutions = null;
ArrayList<Resolution> resolutionList = null;
// get resolutions
project = connection.getProjectByName("Content Master");
if(project != null) {
resolutions = project.getResolutions();
}
for(resolution : resolutions) {
context.logInfo("DEBUG Resolutions " + resolution.getUid());
if("ORIGINAL".equals(resolution.getUid())) {
context.logInfo("DEBUG resolution to remove: " +resolution.getUid());
resolutions = new ArrayList(resolutions);
resolutions.remove(resolution);
}
}
// set resolutions
projects = connection.getProjects();
context.logInfo("DEBUG Class Info1: " + resolutions.getClass());
Resolution[] resArray = resolutions.toArray(new Resolution[resolutions.size()]);
for(project : projects) {
context.logInfo("DEBUG Array Groesse : " + resArray.length);
if(!masterProject.equals(project.getName())) {
project.setResolutions(resArray);
context.logInfo("DEBUG " + project.getName() + resArray);
}
}
context.logInfo("Script End");
habe ich hier evtl. noch einen Schritt vergessen?
viele Grüße und vielen Dank,
Christopher
0 -
Author: sguener - 4/14/2015 15:07
Hallo Christopher,
also auf den ersten Blick fällt mir auf, dass du das Projekt nicht lockst. Du müsstest vor project.setResolutions(resArray); das Projekt locken.
Also quasi (abgekürzt ohne Exception handling etc.):
project.lock();
project.setResolutions(resArray);
project.save();
project.unlock();
Ich hoffe, dass funktioniert dann auch schon. :smileyhappy:
Viele Grüße
Sahin
0 -
Author: TWidmayer - 4/20/2015 8:54
Hallo zusammen,
hat das so wie du in deinem Code beschrieben hast funktioniert?
Ich hab auch so ein Skript geschrieben, jedoch hat das mit setResolutions bei mir nicht wirklich funktioniert...
Ich musste da mit createResolution.
viele Grüße
Tobias
0 -
Author: ceggert - 4/20/2015 9:06
Hallo Tobias,
ich werde das mal testen, in der Tat hat setResolution() bisher leider noch nicht funktioniert.
Ich muss das nochmal ausprobieren.
vielen Dank für die Hilfe.
Christopher
0 -
Author: ceggert - 4/20/2015 9:13
Hallo Sahin,
super vielen Dank das war schon des Rätsels lösung :smileygrin:
viele Grüße,
Christopher
0 -
Author: th_biedermann - 8/19/2022 12:48
Hallo
Hat jemand diesen Script zum laufen gebracht? Ich habe das selbe Problem, dass die Resolutions nicht im Zielprojekt gespeichert werden. project.lock(); etc. wird bei mir einen Fehler.
//!Beanshell import de.espirit.firstspirit.access.project.Resolution; import java.util.*; connection = context.getConnection(); masterProject = context.getProperty("masterProject"); List<Resolution> resolutions = null; ArrayList<Resolution> resolutionList = null; context.logInfo("DEBUG-masterProject: " + masterProject); // get resolutions project = connection.getProjectByName(masterProject); if(project != null) { resolutions = project.getResolutions(); } for(resolution : resolutions) { context.logInfo("DEBUG Resolutions " + resolution.getUid()); if("ORIGINAL".equals(resolution.getUid())) { context.logInfo("DEBUG resolution to remove: " +resolution.getUid()); resolutions = new ArrayList(resolutions); resolutions.remove(resolution); } } // set resolutions context.logInfo("DEBUG Class Info1: " + resolutions.getClass()); Resolution[] resArray = resolutions.toArray(new Resolution[resolutions.size()]); targetProject = context.getProject(); targetProject.setResolutions(resArray); context.logInfo("DEBUG-Projectname: " + context.getProject().getName()); context.logInfo("Script End");0 -
Author: jammin - 12/14/2022 13:04
Hi ,
bei mir hat es mit einigen Anpassungen am Script geklappt:
import de.espirit.firstspirit.access.project.Resolution; import java.util.*; context.logInfo("Resolution Copy Script Start"); connection = context.getConnection(); sourceProjectName = "Source Project Name"; sourceProject = connection.getProjectByName(sourceProjectName); List<Resolution> resolutions = null; context.logInfo("DEBUG sourceProject: " + sourceProject); if(project != null) { resolutions = sourceProject.getResolutions(); } for(Resolution resolution : resolutions) { context.logInfo("DEBUG Resolutions " + resolution.getUid()); //exclude ORIGINAL resolution from resolution set if("ORIGINAL".equals(resolution.getUid())) { context.logInfo("DEBUG resolution to remove: " +resolution.getUid()); resolutions = new ArrayList(resolutions); resolutions.remove(resolution); } } // resolution list to array Resolution[] resArray = resolutions.toArray(new Resolution[resolutions.size()]); targetProject = context.getProject(); context.logInfo("DEBUG target Projectname (current project): " + context.getProject().getName()); targetProject.lock(); // set resolutions targetProject.setResolutions(resArray); targetProject.save(); targetProject.unlock(); context.logInfo("Resolution Copy Script End");Gruß,
Annika
0 -
Author: th_biedermann - 12/14/2022 15:07
Hallo Annika
Vielen lieben DANK für den angepassten Script.
Ich habe ich noch folgenden Fehler:
ERROR 14.12.2022 16:06:17.151{dNR=} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Method Invocation targetProject.lock : at Line: 34 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.project.Resolution; import ja . . . '' : targetProject .lock ( ) Called from method: __execute Target exception: java.lang.SecurityException: changes not allowed for current connection at line 34 de.espirit.firstspirit.access.script.ExecutionException: Method Invocation targetProject.lock : at Line: 34 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.project.Resolution; import ja . . . '' : targetProject .lock ( ) Called from method: __execute Target exception: java.lang.SecurityException: changes not allowed for current connection at line 34 at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:109) at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.lambda$execute$1(PermissionsScriptEngine.java:83) at java.base/java.security.AccessController.doPrivileged(Native Method) at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:88) at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:83) at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:109) at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:162) at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2709) at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2692) at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:2621) at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:629) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:491) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:58) Caused by: java.lang.SecurityException: changes not allowed for current connection at de.espirit.firstspirit.server.scheduler.RestrictedTaskSecurityManager.checkAction(RestrictedTaskSecurityManager.java:47) at de.espirit.firstspirit.client.io.PublicAccess.checkAccess(PublicAccess.java:199) at de.espirit.firstspirit.server.projectmanagement.ProjectImpl.checkAccess(ProjectImpl.java:3434) at de.espirit.firstspirit.server.projectmanagement.ProjectImpl.lock(ProjectImpl.java:230) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at bsh.Reflect.invokeMethod(Reflect.java:185) at bsh.Reflect.invokeObjectMethod(Reflect.java:118) at bsh.Name.invokeMethod(Name.java:858) at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) at bsh.BSHBlock.evalBlock(BSHBlock.java:130) at bsh.BSHBlock.eval(BSHBlock.java:80) at bsh.BshMethod.invokeImpl(BshMethod.java:371) at bsh.BshMethod.invoke(BshMethod.java:267) at bsh.BshMethod.invoke(BshMethod.java:170) at bsh.PreparsedScript.invoke(PreparsedScript.java:66) at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:100) ... 18 more INFO 14.12.2022 16:06:17.151 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): finished task 'script' - schedule entry 'Auflösungen übertragen' (id=644835)Hast du mir hier noch einen Tipp?
Grüsse. Thomas
0 -
Author: jammin - 12/15/2022 5:38
Wie ist das Setting bei dir? Sieht aus wie ein Script Step in einem Arbeitsablauf oder so? Von wo aus wird es ausgeführt?
Bei uns wurde nur das Script aus dem Menü heraus in dem Projekt (SiteArchitect) ausgeführt, welches das Ziel Projekt war.
Gruß,
Annika
0 -
Author: th_biedermann - 12/15/2022 5:59
Hoi Annika
Ich hatte das Script nicht im Projekt ausgeführt. Ich hatte es zu den Aktionsvorlagen ausgelagert.
Jetzt wo ich den Script im Projekt ausführe, klappt bei mir auch!
Vielen lieben DANK für die Hilfe
Grüsse. Thomas
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
15 commentaires