Règle de copie

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

Règle de copie

Bonjour,

Je souhaite mettre en place une règle de copie d'un espace 1 à un espace 2. Le problème est que la structure n'est pas gardée dans l'espace de destination.
Exemple : si je créé un dossier dossier1 et que j'y met un fichier nommé fichier1 sous le dossier précédemment créé, alors le fichier sera au même niveau que dossier1 dans l'espace de destination.

J'ai testé avec et sans les deep copy. L'option appliqué aux sous-dossiers est cochée.

Avez-vous une solution ?


ps : La version utilisée est Alfresco community 4.0d.
12 Replies
sibe
Active Member

Re: Règle de copie

Pouvez-vous détailler votre script ?
nicolasb_4543
Member II

Re: Règle de copie

Voici la configuration effectuée :

[img]http://imageshack.us/a/img822/8075/copien.png[/img]
sibe
Active Member

Re: Règle de copie

Hello,

En fait sur ton cas tu utilise un script standard d'Alfresco qui ne fait que copier ton contenu vers le dossier de destination. La création d'une règle à mon avis ne correspond pas à la meilleure solution à votre besoin. Je vous suggère d'utiliser soit l'action "Copier Vers…"
Sinon si vous voulez vraiment automatiser cette migration ==> Vous pourrez utiliser une règle mais vous devez créer votre propre script et le placer dans "Company Home\Dictionnaire de données\Scripts", ce dernier sera disponible sur la liste des actions "Exécuter le script"

Remarque: Ton script doit aussi traiter aussi les doublons sur ton dossier de destination. Pour voir comment créer d'espace/copier … je te renvoi sur le site officiel voir le lien ci dessous :
http://wiki.alfresco.com/wiki/JavaScript_API_Cookbook.
nicolasb_4543
Member II

Re: Règle de copie

Ok merci.

Il n'y a pas possibilité d'appeler l'action copier vers… à partir d'un script ?
sibe
Active Member

Re: Règle de copie

Non je ne crois pas que ça soit possible car l'action "Copier vers …" n'est pas défini pour être utilisée dans ce genre de pratique (elle fait appelle à la fonction onActionCopyTo défini via le fichier webapps\share\js\documentlibrary ==>). Je te conseille pas à t'aventurer sur ça. Essaies avec un script simple
tu peux t'inspirer sur les scripts déjà disponibles dans l'espace "Company Home\Dictionnaires de données\Scripts" par exemple le script "backup and log.js" ==> qui permet de voir comment créer un dossier, puis copier un document dans un dossier, changer son nom …

J'espère que ça va t'aider un peu.
Bon courage
nicolasb_4543
Member II

Re: Règle de copie

Bonjour,

Pour information, voici un début de script

// Destination site
var destinationSite = "site2";
// Destination folder
var destinationFolder = "fromSite1";

// Source folder
var sourceFolder = "copyToSite2";

var documentName = document.name;

// Construct destination site path
var destName = "Sites/"+destinationSite+"/documentLibrary/"+destinationFolder;

// Construct source site path
var srcName = space.displayPath;
var fullSrcName = srcName+"/"+sourceFolder;


// Get relative document path
var fullDocumentPath = String(document.displayPath);
var reg = new RegExp(fullSrcName,"g");
var subfolder = fullDocumentPath.replace(reg,"");


var copyPath = "/"+destName+subfolder;
var fullDestDocumentName = copyPath+"/"+documentName;

var destPathChild = companyhome.childByNamePath(copyPath);
var fullDestDocumentChild = companyhome.childByNamePath(fullDestDocumentName);


if (document.isContainer) {
   if (null == fullDestDocumentChild) {
      document.copy(destPathChild);
   }
} else {
   if (null != fullDestDocumentChild) {
      fullDestDocumentChild.remove();
   }
   document.copy(destPathChild);
}


Je rencontre un problème car le site de destination n'est pas autorisé par les utilisateurs du site source donc j'ai un access denied. Est-il possible de faire l'équivalent d'un runas ?
sibe
Active Member

Re: Règle de copie

Si l'utilisateur n'a pas les droits nécessaires sur le dossier de destination c'est normal qu'ils ne puissent pas réaliser cette tâche, par ailleurs tu pourrais ajouter des droits sur le dossier de destination en passant par l'entrepôt afin de spécifier le ou les utilisateurs/groupes avec des rôles précis.

sinon plus pratique aussi tu peux dans ton script donner les droits d'accès via la méthode setPermission (voir un exemple ci dessous) :

  // récuperation du username de l'utilisateur courant
  var utilisateur = person.properties["cm:userName"];
  //ajout de la permission Coordinateur sur le noeud courant
  document.setPermission("Coordinator", utilisateur );
  document.save();

C'est juste un exemple, il faura l'adapter.
nicolasb_4543
Member II

Re: Règle de copie

Le problème que je rencontre pour les droits est le suivant :
- Le groupe1 a accès au site1
- Le groupe2 a accès au site2
- Dans le site1, il y a un dossier toSite2 qui copie dans le dossier fromSite1 du site2
- Le groupe1 ne peut pas avoir accès à tout le site2 (même en lecteur). J'ai ajouté les droits "collaborateur" pour le groupe1 dans le dossier fromSite1 (mais pas au site2)

Cela ne pose pas de problème avec la règle de copie offerte par Alfresco mais avec mon script oui.

Le problème de droit a l'air de poser problème à la ligne companyhome.childByNamePath.

Penses-tu qu'il y a possibilité d'outrepasser les droits ? Je ne pense pas que cela soit possible par le setPermission.
Ou une autre solution ?
nicolasb_4543
Member II

Re: Règle de copie

Précision, les copies sont effectuées à partir d'un montage WebDAV.