Générer un site à partir d'un modèle de site

cancel
Showing results for 
Search instead for 
Did you mean: 
dorra87
Member II

Générer un site à partir d'un modèle de site

Bonjour tous le monde,
Bon j'ai essayé de créer un site Share en utilisant un modèle de site mais quand je crée le site j'obtiens url est déja utilisé,alors que j'ai pas d'autre site avec la même URL.
voila le code de shared/classes/alfresco/extension/behaviour-bean-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
   <bean id="onCreateNode_Site" class="org.alfresco.repo.policy.registration.ClassPolicyRegistration" parent="policyRegistration">
               <property name="policyName">
                       <value>{http://www.alfresco.org}onCreateNode</value>
               </property>
               <property name="className">
                       <value>{http://www.alfresco.org/model/site/1.0}site</value>
               </property>
               <property name="behaviour">
                       <bean class="org.alfresco.repo.jscript.ScriptBehaviour" parent="scriptBehaviour">
                        <property name="notificationFrequency">
                           <value>TRANSACTION_COMMIT</value>
                        </property>
                               <property name="location">
                                       <bean class="org.alfresco.repo.jscript.ClasspathScriptLocation">
                                               <constructor-arg>
                                                       <value>alfresco/extension/script/onCreateSite_addSpaceTemplate.js</value>
                                               </constructor-arg>
                                       </bean>
                               </property>
                       </bean>
               </property>
       </bean>
</beans>
et le js shared/classes/alfresco/extension/script/onCreateSite_addSpaceTemplate.js
// execute onCreate of a Site
var site = document;

if (site.properties["st:sitePreset"]=="prj-dashboard"){
  logger.log("### Prepping to get Templates folder");
  var templates = companyhome.childByNamePath("/Data Dictionary/Space Templates/Projet").children;
  var docLib = site.childByNamePath("documentLibrary");
  if (!docLib){
    docLib = site.createFolder("documentLibrary");
  }
  if (docLib) {
    for (var i in templates){
      var child = templates[i];
      child.copy(docLib, true);
    } // end for
  } // end if
} // end if
et j'ai ajouté dans le fichier presets.xml ça :
<preset id="prj-dashboard">
      <components>        
         <!– title –>
         <component>
            <scope>page</scope>
            <region-id>title</region-id>
            <source-id>site/${siteid}/dashboard</source-id>
            <url>/components/title/collaboration-title</url>
         </component>
         <!– navigation –>
         <component>
            <scope>page</scope>
            <region-id>navigation</region-id>
            <source-id>site/${siteid}/dashboard</source-id>
            <url>/components/navigation/collaboration-navigation</url>
         </component>
         <!– dashboard components –>
         <component>
            <scope>page</scope>
            <region-id>full-width-dashlet</region-id>
            <source-id>site/${siteid}/dashboard</source-id>
            <url>/components/dashlets/dynamic-welcome</url>
            <properties>
               <dashboardType>site</dashboardType>
            </properties>
         </component>
         <component>
            <scope>page</scope>
            <region-id>component-1-1</region-id>
            <source-id>site/${siteid}/dashboard</source-id>
            <url>/components/dashlets/colleagues</url>
            <properties>
               <height>504</height>
            </properties>
         </component>
         <component>
            <scope>page</scope>
            <region-id>component-2-1</region-id>
            <source-id>site/${siteid}/dashboard</source-id>
            <url>/components/dashlets/docsummary</url>
         </component>
         <component>
            <scope>page</scope>
            <region-id>component-2-2</region-id>
            <source-id>site/${siteid}/dashboard</source-id>
            <url>/components/dashlets/activityfeed</url>
         </component>
      </components>
      <pages>
         <page id="site/${siteid}/dashboard">
            <title>Collaboration Site Dashboard</title>
            <title-id>page.siteDashboard.title</title-id>
            <description>Collaboration site's dashboard page</description>
            <description-id>page.siteDashboard.description</description-id>
            <template-instance>dashboard-2-columns-wide-right</template-instance>
            <authentication>user</authentication>
            <properties>
               <sitePages>[{"pageId":"documentlibrary"}]</sitePages>
            </properties>
         </page>
      </pages>
   </preset>
J'ai essayé de faire ça avec alfresco 4.0.c et 4.0.d mais toujours le même résultat.
Une autre question comment je peux savoir s'il y a une erreur dans le javascript,sachant que j'ai essayé d'utiliser le débogueur javascript de Share mais la page m'affiche une erreur status 500.
J’espère avoir d'aide la dessous car je suis bloquée la dessous depuis une semaine et j'en ai bien besoin.
Merci d'avance de votre aide
12 Replies
dorra87
Member II

Re: Générer un site à partir d'un modèle de site

voila le log de tomcat
 2012-02-27 10:56:10,236  ERROR [extensions.webscripts.AbstractRuntime] [http-8080-1] Exception from executeScript - redirecting to status template error: 01270011 Failed to execute transaction-level behaviour public abstract void org.alfresco.repo.node.NodeServicePolicies$OnCreateNodePolicy.onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef) in transaction fce514ba-51ef-447c-9fa5-84589ee0410f
org.alfresco.error.AlfrescoRuntimeException: 01270011 Failed to execute transaction-level behaviour public abstract void org.alfresco.repo.node.NodeServicePolicies$OnCreateNodePolicy.onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef) in transaction fce514ba-51ef-447c-9fa5-84589ee0410f
   at org.alfresco.repo.policy.TransactionBehaviourQueue.execute(TransactionBehaviourQueue.java:257)
   at org.alfresco.repo.policy.TransactionBehaviourQueue.beforeCommit(TransactionBehaviourQueue.java:134)
   at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:747)
   at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:727)
   at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:687)
   at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:927)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:737)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
   at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
   at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:472)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:410)
   at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:462)
   at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:500)
   at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:316)
   at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:372)
   at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)
   at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:118)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
   at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
   at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
   at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
   at java.lang.Thread.run(Thread.java:662)
Caused by: org.alfresco.scripts.ScriptException: 01270010 Failed to execute script 'alfresco/extension/script/onCreateSite_addSpaceTemplate.js': 01270009 ReferenceError: "document" n'est pas défini (alfresco/extension/script/onCreateSite_addSpaceTemplate.js#2)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:195)
   at org.alfresco.repo.processor.ScriptServiceImpl.execute(ScriptServiceImpl.java:212)
   at org.alfresco.repo.processor.ScriptServiceImpl.executeScript(ScriptServiceImpl.java:164)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
   at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at $Proxy264.executeScript(Unknown Source)
   at org.alfresco.repo.jscript.ScriptBehaviour$JavaScriptInvocationHandler.invokeScript(ScriptBehaviour.java:161)
   at org.alfresco.repo.jscript.ScriptBehaviour$JavaScriptInvocationHandler.invoke(ScriptBehaviour.java:144)
   at $Proxy20.onCreateNode(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.alfresco.repo.policy.TransactionBehaviourQueue.execute(TransactionBehaviourQueue.java:245)
   … 34 more
Caused by: org.alfresco.error.AlfrescoRuntimeException: 01270009 ReferenceError: "document" n'est pas défini (alfresco/extension/script/onCreateSite_addSpaceTemplate.js#2)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:499)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:191)
   … 60 more
Caused by: org.mozilla.javascript.EcmaError: ReferenceError: "document" n'est pas défini (alfresco/extension/script/onCreateSite_addSpaceTemplate.js#2)
   at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3350)
   at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3340)
   at org.mozilla.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3413)
   at org.mozilla.javascript.ScriptRuntime.name(ScriptRuntime.java:1612)
   at org.mozilla.javascript.gen.c8._c0(alfresco/extension/script/onCreateSite_addSpaceTemplate.js:2)
   at org.mozilla.javascript.gen.c8.call(alfresco/extension/script/onCreateSite_addSpaceTemplate.js)
   at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
   at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
   at org.mozilla.javascript.gen.c8.call(alfresco/extension/script/onCreateSite_addSpaceTemplate.js)
   at org.mozilla.javascript.gen.c8.exec(alfresco/extension/script/onCreateSite_addSpaceTemplate.js)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:483)
   … 61 more
cleseach
Active Member II

Re: Générer un site à partir d'un modèle de site

Bonjour,

Le problème vient de :
var site = document;
Comme le dit votre log :
ReferenceError: "document" n'est pas défini
Lorsque vous utilisez le behaviours en JavaScript, le noeud à l'origine de l'évènement est disponible dans le tableau de paramètres. Essayez-donc avec ;
var site = args[0];

Cordialement,
Charles Le Seac'h
dorra87
Member II

Re: Générer un site à partir d'un modèle de site

J'ai ajouté
var childAssoc = behaviour.args[0];
var site = childAssoc.getChild();
mais maintenant j'ai un autre problème :
Caused by: org.alfresco.error.AlfrescoRuntimeException: 01270007 ReferenceError: "companyhome" n'est pas défini (alfresco/extension/script/onCreateSite_addSpaceTemplate.js#8)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:499)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:191)
   … 60 more
Caused by: org.mozilla.javascript.EcmaError: ReferenceError: "companyhome" n'est pas défini (alfresco/extension/script/onCreateSite_addSpaceTemplate.js#8)
   at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3350)
   at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3340)
   at org.mozilla.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3413)
   at org.mozilla.javascript.ScriptRuntime.name(ScriptRuntime.java:1612)
   at org.mozilla.javascript.gen.c8._c0(alfresco/extension/script/onCreateSite_addSpaceTemplate.js:8)
   at org.mozilla.javascript.gen.c8.call(alfresco/extension/script/onCreateSite_addSpaceTemplate.js)
   at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
   at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
   at org.mozilla.javascript.gen.c8.call(alfresco/extension/script/onCreateSite_addSpaceTemplate.js)
   at org.mozilla.javascript.gen.c8.exec(alfresco/extension/script/onCreateSite_addSpaceTemplate.js)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:483)
Es que companyHome n'est pas défini par défaut?
Merci pour vos réponses.
cleseach
Active Member II

Re: Générer un site à partir d'un modèle de site

Bonjour,

En effet, "companyhome" n'est pas défini par défaut dans ce contexte.
Pour identifier votre noeud, le mieux est de passer par une recherche.

Cordialement,
Charles Le Seac'h
dorra87
Member II

Re: Générer un site à partir d'un modèle de site

Comment par recherche pouvez vous m'expliquer plus.
cleseach
Active Member II

Re: Générer un site à partir d'un modèle de site

Comment par recherche pouvez vous m'expliquer plus.
Oui, c'est possible ;-)

Dans votre JavaScript, vous utilisez companyhome pour récupérer les enfants de votre espace modèle :
var templates = companyhome.childByNamePath("/Data Dictionary/Space Templates/Projet").children;
Or, companyhome n'est pas un objet JavaScript disponible (et la méthode childByNamePath n'est pas forcément des plus optimale).
Donc il faut trouver une autre méthode pour récupérer l'ensemble des noeuds fils de votre espace "Projet".

Et cette méthode va être d'utiliser le moteur de recherche !
En JavaScript, il est disponible (normalement) avec l'objet racine search : http://wiki.alfresco.com/wiki/4.0_JavaScript_API#Search_API
Cet objet possède une méthode luceneSearch qui va permettre d'exécuter une recherche Lucene sur le référentiel.

Il ne reste plus qu'à mettre au point la requête Lucene a éxécuter.
Pour cela, l'utilisation du navigateur de noeuds est fortement conseillée.

Après quelques tâtonnements… (arrêtez votre lecture ici et entraînez-vous, n'allez pas tout de suite à la solution, ce serait tricher ;-))
vous devriez tomber sur une requête du style :
PATH:"/app:company_home/app:dictionary/app:space_templates/cmSmiley Tonguerojet/*"

Cordialement,
Charles Le Seac'h
dorra87
Member II

Re: Générer un site à partir d'un modèle de site

ok merci pour vos explications,maintenant c'est plus clair.
dorra87
Member II

Re: Générer un site à partir d'un modèle de site

j'ai configurer le deboggeur de javascript et j'ai utilisé cette recherche histoire de commencer à m'entrainer  :wink:
var templateFolder = search.luceneSearch('PATH:"/app:company_home/app:dictionary/appSmiley Frustratedpace_Templates"')[0];
au lieu de
var templates = companyhome.childByNamePath("/Data Dictionary/Space Templates/Projet").children;
mais là il me dis search n'est pas définis.
comment faire pour qu'elle devient définis faut il ajouter quelques chose?
cleseach
Active Member II

Re: Générer un site à partir d'un modèle de site

Bonsoir,

Je viens de faire un rapide test sur un behaviour JavaScript et "chez moi ça marche". J'utilise pour ce test Alfresco 4.0d.
Quand je dis "ça marche", je veux dire que search est bien défini et qu'il ne me semble pas avoir fait quoi que ce soit pour en bénéficier.
Parce que pour que ça marche "pour de vrai", il va falloir corriger "appSmiley Frustratedpace_Templates" en "app:space_templates".
Et là, le "ça marche" signifie "obtenir au moins un résultat en retour de la requête".

Un question peut-être idiote pour avancer sur votre problème : êtes-vous sûr de ne pas avoir fait de faute de frappe ?

Cordialement,
Charles Le Seac'h