Problème JavaScript et Crontab

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

Problème JavaScript et Crontab

bonjour,

je suis entrain de développer un projet de record management sur alfresco, le projet est le suivant :
lorsque un utilisateur crée un espace "espace_x"  dans un espace alfresco "Espace_Source", je lance - à l'aide du fichier "scheduled-action-services-context .xml" à chaque 10 min un script js qui supprime l'espace "espace_x" aprés un certain temps par exemple 5 h, donc pour une durée de 5 h, 10 h ça marche trés bien ,mais le problème c'est que lorsque la durée est grande ( 1 an, 2 ans ou plus) ça marche plus :!:  :?:

j'utilise Alfresco 3.0 Stable , Windows XP SP2

merci d'avance pour votre aide
cordialement
3 Replies
cleseach
Active Member II

Re: Problème JavaScript et Crontab

Bonjour,

J'ai rien compris !
Sans script, sans détail de ce qui ne marche pas, sans explication de la relation entre le 2 ans et les 5H (paramétrage de la durée de conservation ?), … comment est-il possible de vous apporter une réponse ?

Cordialement,
Charles Le Seac'h
houcine1986
Member II

Re: Problème JavaScript et Crontab

Bonjour,

Désolé j'étais pas clair dans l'explication du problème, donc je vais vous expliquer :
le cœur de mon projet est le suivant:  un acte de gestion est espace contenant des fichiers doc, pdf, excel … , chaque utilisateur - ayant le droit - peut créer un espace dans le dossier suivant : "Company_home>RM>Espace_Actes_Actifs", et donc cet espace créé suit un cycle de vie : il doit rester dans le dossier "Company_home>RM>Espace_Actes_Actifs" pendant une durée déterminée (je l'appelle EtatActif qui peut être une année ou plusieurs ), ensuite il se déplace automatiquement à l'aide d'un script "Deplacement_de_contenu.js" vers un autre dossier : "Company_home>RM>Espace_Actes_Semi_Actifs", et de la même manière il doit rester dans ce dossier pendant une durée déterminée (je l'appelle EtatSemiActif qui peut être une année ou plusieurs ) avant d'être supprimé automatiquement à l'aide d'un script "Suppression_de_contenu.js"
pour cela j'ai crée 2 aspect "adg:AspectEtatActif" et "AspectEtatSemiActif" qui contiennet les 2 informations "EtatActif" et "EtatSemiActif ", que je les récupère dans les fichiers Js pour déplacer et supprimer les espaces contenu dans les 2 dossiers :  "Company_home>RM>Espace_Actes_Actifs" et "Company_home>RM>Espace_Actes_Semi_Actifs".

donc si je donne à "EtatActif" et "EtatSemiActif " une petite durée comme par exemple 1h, 5h… ça marche sans problème, mais si je donne une longue durée : 1 année, 5 ans ça marche plus.

j'espère que j'étais clair cette fois, et merci pour vos réponse

Cordialement

  -  scheduled-action-services-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>
    <!–
      Define the model factory used to generate object models suitable for use with freemarker templates.
    –>
    <bean id="templateActionModelFactory" class="org.alfresco.repo.action.scheduled.FreeMarkerWithLuceneExtensionsModelFactory">
        <property name="serviceRegistry">
            <ref bean="ServiceRegistry"/>
        </property>
    </bean>
   
   <!–   1
      Exemple de deplacement du contenu d'un dossier
      pour cet exemple le dossier est situe dans  :   Company Home  > Data Dictionary  > RM > Espace_Actes_Actifs
      le fichier de script est  :   Deplacement_de_contenu.js
   –>
   
   <bean id="Deplacement_de_contenu_runScriptAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
      <property name="actionName">
         <value>script</value>
      </property>
   
      <property name="parameterTemplates">
         <map>
            <entry>
               <key>
                  <value>script-ref</value>
               </key>
               <value>${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:scripts/cm:Deplacement_de_contenu.js"' )}</value>
            </entry>
         </map>
      </property>
      
      <property name="templateActionModelFactory">
         <ref bean="templateActionModelFactory"/>
      </property>
   
      <property name="dictionaryService">
         <ref bean="DictionaryService"/>
      </property>
   
      <property name="actionService">
         <ref bean="ActionService"/>
      </property>

      <property name="templateService">
         <ref bean="TemplateService"/>
      </property>
   </bean>
   
   
   <!–   2
      Exemple de suppression du contenu d'un dossier
      pour cet exemple le dossier est situe dans  :   Company Home  > Data Dictionary  > RM > Espace_Actes_Semi_Actifs
      le fichier de script est  :   Deplacement_de_contenu.js
   –>

   <bean id="Suppression_de_contenu_runScriptAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
      <property name="actionName">
         <value>script</value>
      </property>
   
      <property name="parameterTemplates">
         <map>
            <entry>
               <key>
                  <value>script-ref</value>
               </key>
               <value>${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:scripts/cm:Suppression_de_contenu.js"' )}</value>
            </entry>
         </map>
      </property>
      
      <property name="templateActionModelFactory">
         <ref bean="templateActionModelFactory"/>
      </property>
   
      <property name="dictionaryService">
         <ref bean="DictionaryService"/>
      </property>
   
      <property name="actionService">
         <ref bean="ActionService"/>
      </property>

      <property name="templateService">
         <ref bean="TemplateService"/>
      </property>
   </bean>

   <!–
      Exemple de deplacement du contenu d'un dossier
      pour cet exemple le dossier est situe dans  :   Company Home  > Data Dictionary  > RM > Espace_Actes_Actifs
      le fichier de script est  :   Deplacement_de_contenu.js
   –>
   
   <bean id="Deplacement_de_contenu_runScript" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
      <property name="transactionMode">
         <value>UNTIL_FIRST_FAILURE</value>
      </property>

      <property name="compensatingActionMode">
         <value>IGNORE</value>
      </property>

      <property name="searchService">
         <ref bean="SearchService"/>
      </property>

      <property name="templateService">
         <ref bean="TemplateService"/>
      </property>

      <property name="queryLanguage">
         <value>lucene</value>
      </property>

      <property name="stores">
         <list>
            <value>workspace://SpacesStore</value>
         </list>
      </property>

      <property name="queryTemplate">
         <value>PATH:"/app:company_home"</value>
      </property>

      <property name="cronExpression">
         <!– Deplacement_de_contenu –>
         <value>5 0/5 * * * ?</value>
         <!– 0 0 0 * * ? –>
      </property>

      <property name="jobName">
         <value>jobD</value>
      </property>

      <property name="jobGroup">
         <value>jobGroup</value>
      </property>

      <property name="triggerName">
         <value>triggerD</value>
      </property>

      <property name="triggerGroup">
         <value>triggerGroup</value>
      </property>

      <property name="scheduler">
         <ref bean="schedulerFactory"/>
      </property>

      <property name="actionService">
         <ref bean="ActionService"/>
      </property>

      <property name="templateActionModelFactory">
         <ref bean="templateActionModelFactory"/>
      </property>

      <property name="templateActionDefinition">
         <ref bean="Deplacement_de_contenu_runScriptAction"/>
         <!– This is name of the action (bean) that gets run –>
      </property>

      <property name="transactionService">
         <ref bean="TransactionService"/>
      </property>

      <property name="runAsUser">
         <value>System</value>
      </property>
   </bean>

   
   <!–   2
      Exemple de suppression du contenu d'un dossier
      pour cet exemple le dossier est situe dans  :   Company Home  > Data Dictionary  > RM > Espace_Actes_Semi_Actifs
      le fichier de script est  :   Deplacement_de_contenu.js
   –>
   
   <bean id="Suppression_de_contenu_runScript" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
      <property name="transactionMode">
         <value>UNTIL_FIRST_FAILURE</value>
      </property>

      <property name="compensatingActionMode">
         <value>IGNORE</value>
      </property>

      <property name="searchService">
         <ref bean="SearchService"/>
      </property>

      <property name="templateService">
         <ref bean="TemplateService"/>
      </property>

      <property name="queryLanguage">
         <value>lucene</value>
      </property>

      <property name="stores">
         <list>
            <value>workspace://SpacesStore</value>
         </list>
      </property>

      <property name="queryTemplate">
         <value>PATH:"/app:company_home"</value>
      </property>

      <property name="cronExpression">
         <!– Suppression_de_contenu  –>
         <value>15 0/5 * * * ?</value>
      </property>

      <property name="jobName">
         <value>jobS</value>
      </property>

      <property name="jobGroup">
         <value>jobGroup</value>
      </property>

      <property name="triggerName">
         <value>triggerS</value>
      </property>

      <property name="triggerGroup">
         <value>triggerGroup</value>
      </property>

      <property name="scheduler">
         <ref bean="schedulerFactory"/>
      </property>

      <property name="actionService">
         <ref bean="ActionService"/>
      </property>

      <property name="templateActionModelFactory">
         <ref bean="templateActionModelFactory"/>
      </property>

      <property name="templateActionDefinition">
         <ref bean="Suppression_de_contenu_runScriptAction"/>      
         <!– This is name of the action (bean) that gets run –>
      </property>

      <property name="transactionService">
         <ref bean="TransactionService"/>
      </property>

      <property name="runAsUser">
         <value>System</value>
      </property>
   </bean>
</beans>

   - Deplacement_de_contenu.js


//   Definir l'espace racine de stackage des actes en etat actif
var Espace_Actes_Actifs = companyhome.childByNamePath("RM/Espace_Actes_Actifs");
Fonction_Recursive_Actif(Espace_Actes_Actifs);


//    Fonction de parcours recursif
function Fonction_Recursive_Actif(currentSpace)
{
   if (currentSpace != null)
   {
      //   Lancement de l'action sur l'espace courant
      Deplacer_Espace(currentSpace);
         
      if (currentSpace.children != null)
      {
         for each ( child in currentSpace.children )
         {
            if ( child.isContainer ) // Si c'est un repertoire…
            {
               Fonction_Recursive_Actif(child);
            }
         }
      }
   }
}


//   fonction qui deplace le contenu d'un espace source vers un espace destinataire     
   function Deplacer_Espace(ElementCourant)
{
   if ((ElementCourant.properties["adg:AspectEtatActif"]) && (ElementCourant.isContainer))
   {
         var today = new Date();   
         var TodayInt = Date.parse(today.toGMTString());
         
         var EtatActif = ElementCourant.properties["adg:AspectEtatActif"];
         
         var Last_ParentPath = ElementCourant.displayPath;
         var position = Last_ParentPath.indexOf("Espace_Actes_Actifs");

         // recuperer le chemin  du dossier apres l'espace  :  Espace_Actes_Actifs
         var New_ParentPath = Last_ParentPath.substring(position+19);
         
         // ajouter le chemin recupere apares l'espace  :  Espace_Actes_Semi_Actifs pour tomber dans le meme espace du  dossier courant
         var Espace_Actes_Semi_Actifs = companyhome.childByNamePath("RM/Espace_Actes_Semi_Actifs"+New_ParentPath);
         
            
         var dateDeplacement = new Date(ElementCourant.properties["cm:created"]);
         var newYear = dateCreation.getFullYear() + EtatActif;
         dateDeplacement.setFullYear(newYear);
         var dateDeplacementInt = Date.parse(dateDeplacement.toGMTString());
         
         if(TodayInt >= dateDeplacementInt)
                              {
                                 ElementCourant.move(Espace_Actes_Semi_Actifs);
                              }
      }
}

   - Suppression_de_contenu.js

//   Definir l'espace racine de stackage des actes en etat semi actif
var Espace_Actes_Semi_Actifs = companyhome.childByNamePath("RM/Espace_Actes_Semi_Actifs");
Fonction_Recursive_Semi_Actif(Espace_Actes_Semi_Actifs);

//    Fonction de parcours recursif sur l'espace des actes en etat semi actif
function Fonction_Recursive_Semi_Actif(currentSpace)
{
   if (currentSpace != null)
   {
      //   Lancement de l'action sur l'espace courant
      Supprimer_Espace(currentSpace);
         
      if (currentSpace.children != null)
      {
         for each ( child in currentSpace.children )
         {
            if ( child.isContainer ) // Si c'est un repertoire…
            {
               Fonction_Recursive_Semi_Actif(child);
            }
         }
      }
   }
}


//   fonction qui supprime le contenu de l'espace destinataire     
   function Supprimer_Espace(ElementCourant)
{
   var today = new Date();
   var TodayInt = Date.parse(today.toGMTString());
         
   if ((ElementCourant.properties["adg:AspectEtatSemiActif"]) && (ElementCourant.isContainer))   
   {      
         var EtatSemiActif = ElementCourant.properties["adg:AspectEtatSemiActif"];
      
         var dateModification = new Date(ElementCourant.properties["cm:modified"]);
         var dateSuppression = new Date(ElementCourant.properties["cm:modified"]);
         
         var newYear = dateModification.getFullYear() + EtatSemiActif;
         dateSuppression.setFullYear(newYear);
         
         var dateSuppressionInt = Date.parse(dateSuppression.toGMTString());
      
         if(TodayInt > dateSuppressionInt)
                                 {
                                    ElementCourant.remove();
                                 }
   }                        
}
cleseach
Active Member II

Re: Problème JavaScript et Crontab

Bonjour,

Pour voir ce qui "ne marche pas", quelques logs pourraient être utiles : http://wiki.alfresco.com/wiki/3.0_JavaScript_API#Logging_API

Ca permettrait au moins de voir si les méthodes sont bien appelées el de vérifier les différentes conditions.

Cordialement,
Charles Le Seac'h