Bonjour
Je vous explique en quelques lignes ce que je souhaite faire.je dispose de 3 dossiers:a. qui contient le fichier DOC et toutes ses versions antérieures si elle existe.b. la dernière version du fichier DOC en format PDFc. la dernière version du fichier DOC en format de base.je souhaite executer cette action en tant qu'administrateur. ( cad que les validateurs auront le droit d'accéder à ces fichiers en mode lecteur )pour l'instant j'ai développé que la classe java:je vais décortiquer le programme pour vous puissiez m'aider à corriger les erreurs
en ce qui concerne le dossier a: recherche du fichier DOC dans le dossier, s'il existe on incrémente la version sinon on l'ajoute.
if(nodeService.hasAspect(actionedUponNodeRef,"versionable")==false)
{
nodeService.addAspect(actionedUponNodeRef,"versionable",null);
fileFolderService.move(actionedUponNodeRef, destinationParent0, null);
}
List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent0);
if(!listFichierAndDossier.isEmpty())
{
return;
}
for( FileInfo fichierOuDossier : listFichierEtDossier)
{
if(fichierOuDossier.isFolder())
{
// rien faire:fichierOuDossier est un dossier
}
else if(fichierOuDossier.isLink())
{
// ne rien faire: fichierOuDossier est un link
}else {
// fichierOuDossier est un fichier
if(nodeService.getPath(fichierOuDossier.getNodeRef())==nodeService.getPath(actionedUponNodeRef));
{
checkOutCheckInService.checkout(fichierOuDossier.getNodeRef());
NodeRef copieDeTravail=checkOutCheckInService.getWorkingCopy(fichierOuDossier.getNodeRef());
ContentData Contenu = (ContentData) nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_CONTENT);
nodeService.setProperty(copieDeTravail, ContentModel.PROP_CONTENT, Contenu);
Map<String,Serializable> versionProperties = new HashMap<String,Serializable>();
versionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MAJOR);
checkOutCheckInService.checkin(copieDeTravail, versionProperties);
pt0++;
}
}
}
if(pt0==0)
{
fileFolderService.copy(fichier, destinationParent0, null);
}
en ce qui concerne le dossier b: recherche du fichier DOC dans le dossier, s'il existe on change le contenu en format PDF sinon on l'ajoute.
List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent2);
if(listFichierAndDossier.isEmpty())
{
return;
}
for( FileInfo fichierOuDossier : listFichierEtDossier)
{
if(fichierOuDossier.isFolder())
{
// rien faire:fichierOuDossier est un dossier
}
else if(fichierOuDossier.isLink())
{
// ne rien faire: fichierOuDossier est un link
}else {
// fichierOuDossier est fichier
if(nodeService.getPath(fichierOuDossier.getNodeRef())==nodeService.getPath(actionedUponNodeRef));
{
// changer le contenu du fichier existant
ContentData Contenu = (ContentData) nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_CONTENT);
ContentData newContenu = ContentData.setMimetype(Contenu, "application/PDF");
nodeService.setProperty(fichierOuDossier.getNodeRef(), ContentModel.PROP_CONTENT, newContenu);
pt2++;
}
}
}
// changer le format du fichier en PDF et l'ajouter au dossier
if(pt2==0)
{
NodeRef fichier = actionedUponNodeRef;
ContentData Contenu = (ContentData) nodeService.getProperty(fichier, ContentModel.PROP_CONTENT);
ContentData newContenu = ContentData.setMimetype(Contenu, "application/PDF");
nodeService.setProperty(fichier, ContentModel.PROP_CONTENT, newContenu);
fileFolderService.copy(fichier, destinationParent2, null);
}
en ce qui concerne le dossier c: recherche du fichier DOC dans le dossier, s'il existe on change le contenu sinon on l'ajoute.
List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent1);
if(listFichierEtDossier.isEmpty())
{
return;
}
for( FileInfo fichierOuDossier : listFichierEtDossier)
{
if(fichierOuDossier.isFolder())
{
// rien faire:fichierOuDossier est un dossier
}else if(fichierOuDossier.isLink())
{
// ne rien faire: fichierOuDossier est un link
}else {
// fichierOuDossier est fichier
if(nodeService.getPath(fichierOuDossier.getNodeRef())==nodeService.getPath(actionedUponNodeRef));
{
ContentData Contenu = (ContentData) nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_CONTENT);
nodeService.setProperty(fichierOuDossier.getNodeRef(), ContentModel.PROP_CONTENT, Contenu);
pt1++;
}
}
}
if(pt1==0)
{
fileFolderService.copy(actionedUponNodeRef, destinationParent1, null);
et enfin pour la fonction d’exécution en tant qu'administrateur:
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Void>() {
@Override
public void doWork() throws Exception {
…mon code Java …
}
}, "admin");
le code en entier est le suivant:
package org.alfresco.sample;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.model.FileNotFoundException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.version.VersionType;
import org.alfresco.repo.version.VersionModel;
public class MonActionActionExecuter extends ActionExecuterAbstractBase{
public static final String NAME = "traitement";
public static final String PARAM_DESTINATION_FOLDER_0 = "destination-folder-0";
public static final String PARAM_DESTINATION_FOLDER_1 = "destination-folder-1";
public static final String PARAM_DESTINATION_FOLDER_2 = "destination-folder-2";
private NodeService nodeService;
private CheckOutCheckInService checkOutCheckInService;
private FileFolderService fileFolderService;
int pt1=0;
int pt2=0;
int pt0=0;
public void setNodeService(NodeService nodeService)
{
this.nodeService=nodeService;
}
public void setCheckOutCheckInService(CheckOutCheckInService checkOutCheckInService)
{
this.checkOutCheckInService = checkOutCheckInService;
}
public void setFileFolderService(FileFolderService fileFolderService)
{
this.fileFolderService=fileFolderService;
}
@Override
protected void executeImpl(Action MonAction, NodeRef actionedUponNodeRef)
{
// TODO Auto-generated method stub
NodeRef destinationParent0 = (NodeRef)MonAction.getParameterValue(PARAM_DESTINATION_FOLDER_0);
NodeRef destinationParent1 = (NodeRef)MonAction.getParameterValue(PARAM_DESTINATION_FOLDER_1);
NodeRef destinationParent2 = (NodeRef)MonAction.getParameterValue(PARAM_DESTINATION_FOLDER_2);
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<void>()
{
public void doWork() throws Exception
{
//… mon code Java …
try
{
List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent1);
if(listFichierEtDossier.isEmpty())
{
return;
}
for( FileInfo fichierOuDossier : listFichierEtDossier)
{
if(fichierOuDossier.isFolder())
{
// rien faire:fichierOuDossier est un dossier
}else if(fichierOuDossier.isLink())
{
// ne rien faire: fichierOuDossier est un link
}else {
// fichierOuDossier est fichier
if(nodeService.getPath(fichierOuDossier.getNodeRef())==nodeService.getPath(actionedUponNodeRef));
{
ContentData Contenu = (ContentData) nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_CONTENT);
nodeService.setProperty(fichierOuDossier.getNodeRef(), ContentModel.PROP_CONTENT, Contenu);
pt1++;
}
}
}
if(pt1==0)
{
fileFolderService.copy(actionedUponNodeRef, destinationParent1, null);
}
List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent2);
if(listFichierAndDossier.isEmpty())
{
return;
}
for( FileInfo fichierOuDossier : listFichierEtDossier)
{
if(fichierOuDossier.isFolder())
{
// rien faire:fichierOuDossier est un dossier
}
else if(fichierOuDossier.isLink())
{
// ne rien faire: fichierOuDossier est un link
}else {
// fichierOuDossier est fichier
if(nodeService.getPath(fichierOuDossier.getNodeRef())==nodeService.getPath(actionedUponNodeRef));
{
// changer le contenu du fichier existant
ContentData Contenu = (ContentData) nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_CONTENT);
ContentData newContenu = ContentData.setMimetype(Contenu, "application/PDF");
nodeService.setProperty(fichierOuDossier.getNodeRef(), ContentModel.PROP_CONTENT, newContenu);
pt2++;
}
}
}
// changer le format du fichier en PDF et l'ajouter au dossier
if(pt2==0)
{
NodeRef fichier = actionedUponNodeRef;
ContentData Contenu = (ContentData) nodeService.getProperty(fichier, ContentModel.PROP_CONTENT);
ContentData newContenu = ContentData.setMimetype(Contenu, "application/PDF");
nodeService.setProperty(fichier, ContentModel.PROP_CONTENT, newContenu);
fileFolderService.copy(fichier, destinationParent2, null);
}
// faire une verfication et une modification l'aspect du fichier
if(nodeService.hasAspect(actionedUponNodeRef,"versionable")==false)
{
nodeService.addAspect(actionedUponNodeRef,"versionable",null);
fileFolderService.move(actionedUponNodeRef, destinationParent0, null);
}
List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent0);
if(!listFichierAndDossier.isEmpty())
{
return;
}
for( FileInfo fichierOuDossier : listFichierEtDossier)
{
if(fichierOuDossier.isFolder())
{
// rien faire:fichierOuDossier est un dossier
}
else if(fichierOuDossier.isLink())
{
// ne rien faire: fichierOuDossier est un link
}else {
// fichierOuDossier est un fichier
if(nodeService.getPath(fichierOuDossier.getNodeRef())==nodeService.getPath(actionedUponNodeRef));
{
checkOutCheckInService.checkout(fichierOuDossier.getNodeRef());
NodeRef copieDeTravail=checkOutCheckInService.getWorkingCopy(fichierOuDossier.getNodeRef());
ContentData Contenu = (ContentData) nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_CONTENT);
nodeService.setProperty(copieDeTravail, ContentModel.PROP_CONTENT, Contenu);
Map<String,Serializable> versionProperties = new HashMap<String,Serializable>();
versionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MAJOR);
checkOutCheckInService.checkin(copieDeTravail, versionProperties);
pt0++;
}
}
}
if(pt0==0)
{
fileFolderService.copy(fichier, destinationParent0, null);
}
}
catch (FileNotFoundException e)
{
// ne rien faire
}
}
}, "admin");
}
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
paramList.add(new ParameterDefinitionImpl(PARAM_DESTINATION_FOLDER_0,
DataTypeDefinition.NODE_REF,
true,
getParamDisplayLabel(PARAM_DESTINATION_FOLDER_0)));
paramList.add(new ParameterDefinitionImpl(PARAM_DESTINATION_FOLDER_1,
DataTypeDefinition.NODE_REF,
true,
getParamDisplayLabel(PARAM_DESTINATION_FOLDER_1)));
paramList.add(new ParameterDefinitionImpl(PARAM_DESTINATION_FOLDER_2,
DataTypeDefinition.NODE_REF,
true,
getParamDisplayLabel(PARAM_DESTINATION_FOLDER_2)));
}
}
pour l'instant j'ai une erreur!! Syntax error on token "void", Dimensions expected after this token
eclipse n' accepte pas le "void " et je ne sais pas comment y remédier !!Merci à vous