cancel
Showing results for 
Search instead for 
Did you mean: 

Problème JavaScript et Crontab

houcine1986
Champ in-the-making
Champ in-the-making
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 3

cleseach
Star Contributor
Star Contributor
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
Champ in-the-making
Champ in-the-making
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
Star Contributor
Star Contributor
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
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.