Ereditare proprietà personalizzata a cascata

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

Ereditare proprietà personalizzata a cascata

Ciao a tutti,

ho un problema che non riesco a risolvere su Alfresco share 3.4d, ho questa situazione ho una cartella Clienti che contiene n cartelle identificate dal nome del cliente e all'interno di queste possono esserci sia altre cartelle che altri documenti.

Quindi mi sono fatto una regola che specializza il tipo in cliente e che aggiunge un aspect con la proprietà cliente.

Come faccio a far ereditare il nome della cartella che identifica il cliente a tutto il contenuto? Sto provando con uno script ma senza risultati

Non so se mi sono spiegato, grazie a tutti.
12 Replies
openpj
Moderator
Moderator

Re: Ereditare proprietà personalizzata a cascata

Allora forse credo di aver capito in parte quello che vuoi fare, ma sarebbe meglio se riuscissi a spiegarti in modo più dettagliato.

A mira di naso direi che dovrebbe essere fattibile tramite la realizzazione di uno script utilizzando la Javascript API di Alfresco e magari facendola eseguire tramite una action applicata ad una regola su uno o più spazi.

Ti ricordo inoltre che una stessa regola in Alfresco, una volta definita ed applicata ad uno spazio, può essere utilizzata anche su altri spazi, senza alcun bisogno di ridefinirla.
need
Member II

Re: Ereditare proprietà personalizzata a cascata

Grazie per la risposta,

mi spiego meglio, ho definito una struttura di cartelle sotto documenti in alfresco share. Ho la cartella clienti che è riempita dinamicamente da un applicazione esterna che crea l'entrata quando avviene un certo evento.

La cartella che salvo prende il nome del cliente quindi ho questa struttura:

Clienti
     Nome Cliente uno
              Qui dentro posso avere n documenti o n annidamenti di cartelle che devono avere sempre la proprietà cliente riempita con il Nome   Cliente uno. ( Questo mi serve farlo per associare qualsiasi contenuto all'interno della cartella al Nome Cliente uno ).
     Nome Cliente due
     Nome Cliente n

Per provare a fare questo mi sono definito una regola applicata anche alle sottocartelle. Lo script che non funziona è questo:
perche funziona solo per un livello di annidamento.



var name = document.parent.name;
var cliente = document.properties["let:cliente"] = name;
var area = document.properties["let:area"] = "Mia area";

document.save();

Grazie a tutti.
openpj
Moderator
Moderator

Re: Ereditare proprietà personalizzata a cascata

Eh si, invece di usare il parent su un nodo, ed è proprio questa la limitazione del tuo codice, dovresti provare ad implementare uno script più furbo che agisca sulle ricerche e sulla comparazione rispetto al nodo Company Home, si può fare facilmente.

Devi utilizzare l'oggetto search disponibile nello scope dello script e cominciare a giocarci.
Potresti cominciare a giocare con le Lucene Query introducendo il token PATH sulle ricerche:

var luceneQuery = "PATH:\"/app:company_home/cm:Clienti/*\"";
var results = search.luceneSearch(luceneQuery);

La variabile results è un vettore di nodi risultato che rappresenta tutti i figli di primo livello per lo space Clienti.
Questo è solo uno spunto, però penso che puoi cominciare a lavorarci.

Spero ti sia di aiuto  Smiley Wink
need
Member II

Re: Ereditare proprietà personalizzata a cascata

Esatto mi trovo con te con un possibile spunto per la soluzione, infatti ieri ci avevo pensato. Ci provo un pò e vediamo che succede  :roll:

Pero se uso questo metodo devo settare la regola solo sulla cartella clienti senza spuntare applica alle relative sottocartelle. Giusto?
Grazie  :mrgreen: .
need
Member II

Re: Ereditare proprietà personalizzata a cascata

Buongiorno a tutti,

ho provato a usare il tuo suggerimento e ho realizzato questo script:


var query = ("PATH:\"/app:company_home/st:sites/cm:let/cm:documentLibrary/cm:Tax/cm:Clienti/*\"AND TYPE:\"cm:folder\" AND NOT TYPE:\"cm:systemfolder\"");
var result = search.luceneSearch(query);
for each(d in result){
   var name = d.name;
     d.properties["let:cliente"] = name;
        d.save();
}

Ho applicato lo script alla cartella cliente e alle relative sottocartelle. Questo non dovrebbe funzionare? Perchè se il path lo definisco io ad ogni livello all interno della cartella clienti dovrebbe cercare i figli di primo livello e poi applicare la proprietà col nome. Mi sbaglio?

Grazie a tutti.
openpj
Moderator
Moderator

Re: Ereditare proprietà personalizzata a cascata

Forse dovresti prima specializzare il nodo con il tuo tipo custom oppure aggiungere l'aspetto al nodo con la decorazione dei metadati corretta prima di settare un valore di una proprietà. Dico questo perché nella query vedo TYPE:"cm:folder" e di default questo tipo non ha nessuna proprietà del tuo tipo custom, dovresti prima specializzare i nodi di tipo cm:folder nel tuo tipo custom:yourCustomType che include il metadato che stai cercando di valorizzare.
need
Member II

Re: Ereditare proprietà personalizzata a cascata

Buondì,

si ho specializzato il tipo e ho rifatto la query sul mio customtype però ho sempre lo stesso problema sulla prima cartella col nome del cliente che viene inserita il metadato cliente viene settato correttamente col nome.

se inserisco una cartella all'interno della cartella <nome cliente> il tipo viene specializzato ma il metadato non viene settato con il nome della cartella che si trova sul primo livello.  Smiley Surprisedops:
openpj
Moderator
Moderator

Re: Ereditare proprietà personalizzata a cascata

Sicuramente c'è un baco nello script.

Devi debuggare lo script utilizzando il Javascript Debugger di Mozilla Rhino, lo abiliti dalla schermata dell'indice dei WebScript:
http://wiki.alfresco.com/wiki/4.0_JavaScript_API#Alfresco_JavaScript_Debugger
need
Member II

Re: Ereditare proprietà personalizzata a cascata

No siccome il javascript debugger non mi funziona, ho modificato il file log4j.properties e mi sono fatto stampare il log nel file stdout_data, cmq non ho risolto nulla non capisco perchè non va.

Devo modificare qualcosa nel codice?