Problema

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

Problema

Qualcuno nel forum sa spiegarmi come mai lo script associato ad una regola che ho assegnato ad una cartella di alfresco, viene eseguito in maniera diversa ogni volta che viene richiamato? Al caricamento del file nel repository lo script dovrebbe creare in automatico un path adeguato per storare il file in base ai metadati. Il primo caricamento funziona correttamente, vengono estratti i metadati e viene assegnato un path coerente. Il secondo non funziona più, i metadati non vengono estratti e viene assegnato il path di default. Dal terzo giro in poi succede di tutto e di più dando anche errori del tipo "the folder XXX already exists" nonostante ci sia un controllo all'interno dello script che stabilisce che se la cartella esiste, non deve fare niente. Ad ogni giro quindi, nonostante il codice rimanga sempre lo stesso, il comportamento di Alfresco è sempre diverso e casuale. Qualcuno è in grado di svelare questo arcano mistero che innalza Alfresco ad essere senziente in grado di scegliere in autonomia quale sarà il suo comportamento indipendentemente dal codice scritto nello script?
3 Replies
davidciamberlan
Alfresco Employee

Re: Problema

Ciao,

puoi mostrarci (anche solo in parte) il codice dello script che utilizzi?

In questo modo potremmo cercare di capire qual è la causa dell'anomalia.

tytanix
Member II

Re: Problema

Grazie per l'interessamento David!

Questo è il codice del mio script

<blockcode>
function main()
{
   var spaceName="Sites/trilogis/documentLibrary";
   var  rootSpaceName=companyhome.childByNamePath(spaceName + "/Offerte");
   
   if(rootSpaceName == null)
   {
      spaceName = companyhome.childByNamePath("Sites/trilogis/documentLibrary");
      rootSpaceName = spaceName.createFolder("Offerte");
   }
   
   var childList = space.children;
   var count = childList.length;
   
   if(count == 0)
   {
      return;
   }
   else
   {
      for(i = 0; i < count; i++)
      {
         var child = childList;
      
         if(child.isDocument)
         {
            var childDate = child.properties["tr:date"];
            
            if(childDate == null)
            {
               var date = new Date();
               var childYear = date.getFullYear();
            }
            else
            {
               var childYear = childDate.getFullYear();
            }
            
            var newSpaceYear = rootSpaceName.childByNamePath("/" + childYear);
            
            if(newSpaceYear == null)
            {
               newSpaceYear = rootSpaceName.createFolder(childYear);
            }
            
            var childClient = child.properties["tr:name_cli"];
            
            if(childClient == null)
            {
               childClient = "Default Client";
            }
            
            var newSpaceClient = newSpaceYear.childByNamePath("/" + childClient);
            
            if(newSpaceClient == null)
            {
               newSpaceClient = newSpaceYear.createFolder(childClient);
            }
            
            child.move(newSpaceClient);
         }
      }
      
   
   }

   return;
   
}

main();
</blockcode>

Quello che sto cercando di ottenere è che, in qualsiasi punto del repository io carichi un file di un determinato tipo, venga effettuata una ricerca in un path stabilito ("Sites/trilogis/documentLibrary") per verificare l'esistenza di un path adeguato per lo store del file. Nel caso tale path non esista, viene creato e poi viene spostato il file al suo interno. Se effettuo il caricamento del file nella root, lo script funziona. Se eseguo lo script in qualche sotto cartella, vengono generati errori casuali e se si prova successivamente a caricare file nella root, lo script non funziona più. I due principali errori sono "l'impossibilità di creare la cartella perchè il nome è già stato utilizzato" (ma nello script è previsto un controllo per ovviare alla creazione di duplicati) o lo script non viene eseguito perchè il contenuto caricato non viene riconosciuto come documento (isDocument risulta false). Premetto che ho assegnato la regola sulla root, applicandola a tutte le sotto cartelle, che tale script venga eseguito ogni qual volta vengano aggiornati i dati di un documento di un dato tipo.
tytanix
Member II

Re: Problema

Grazie David per avermi prestato ascolto, sono riuscito a far funzionare tutto. Probabilmente erano problemi di refresh (ho provato a riavviare il server oltre al classico refresh della pagina con ctrl+F5).
Posto qui il codice funzionante nel caso qualcuno stia cercando, o cercherà, di effettuare lo store automatizzato dei suoi documenti ;-)
(script deployato direttamente in alfresco in DataDictionary/Scripts)
<blockcode>
function main()
{
   
   var spaceName="Sites/trilogis/documentLibrary";
   var  rootSpaceName=companyhome.childByNamePath(spaceName + "/Offerte");
   
   if(rootSpaceName == null)
   {
      spaceName = companyhome.childByNamePath("Sites/trilogis/documentLibrary");
      rootSpaceName = spaceName.createFolder("Offerte");
   }
   
   var subFolder = document.parent;
   
   var childList = subFolder.children;
   var count = childList.length;
   
   if(count == 0)
   {
      return;
   }
   else
   {
      for(i = 0; i < count; i++)
      {
         var child = childList;
      
         if(child.isDocument)
         {
            var childDate = child.properties["tr:date"];
            
            if(childDate == null)
            {
               var date = new Date();
               var childYear = date.getFullYear();
            }
            else
            {
               var childYear = childDate.getFullYear();
            }
            
            var newSpaceYear = rootSpaceName.childByNamePath("/" + childYear);
            
            if(newSpaceYear == null)
            {
               newSpaceYear = rootSpaceName.createFolder(childYear);
            }
            
            var childClient = child.properties["tr:name_cli"];
            
            if(childClient == null)
            {
               childClient = "Default Client";
            }
            
            var newSpaceClient = newSpaceYear.childByNamePath("/" + childClient);
            
            if(newSpaceClient == null)
            {
               newSpaceClient = newSpaceYear.createFolder(childClient);
            }
            
            child.move(newSpaceClient);
         }
      }
      
   
   }

   return;
   
}

main();
</blockcode>