cancel
Showing results for 
Search instead for 
Did you mean: 

Script pour amp, obtenir le dossier d'exécution d'une règle

luciel
Champ in-the-making
Champ in-the-making

Bonjour,

Alors voilà, j'ai un script que j'ai développé et mis dans dictionnaire de données/scripts que je vous ai joint. Il me permet de mettre un fichier que j'importe dans année/mois/jour et de créé ses dossiers s'il n'existe pas.

Je voudrais maintenant mettre ce script dans un amp que je déploierai sur alfresco.

J'ai donc adapté le script en créant la classe suivante :

public class ClassementPlanFromDateOfCreationRule extends ActionExecuterAbstractBase {
    
    private FileFolderService fileFolderService;
    
    public void setFileFolderService(FileFolderService fileFolderService) {
        this.fileFolderService = fileFolderService;
    }

    @Override
    protected void addParameterDefinitions(List<ParameterDefinition> paramList) {   
    }

    @Override
    protected void executeImpl(Action ruleAction, NodeRef fileNodeRef) {
        FileInfo fileInformations = fileFolderService.getFileInfo(fileNodeRef);
        if (!fileInformations.isFolder()) {
            Calendar calendar = Calendar.getInstance();
            int yearOfDate = calendar.get(Calendar.YEAR);
            int monthOfDate = calendar.get(Calendar.MONTH) + 1;
            int dayOfDate = calendar.get(Calendar.DAY_OF_MONTH);
            NodeRef destinationParent = ???;
            NodeRef yearFolder = fileFolderService.searchSimple(destinationParent, String.valueOf(yearOfDate));
            if (yearFolder == null) {
                FileInfo yearInformations = fileFolderService.create(destinationParent, String.valueOf(yearOfDate), ContentModel.TYPE_FOLDER);
                yearFolder = yearInformations.getNodeRef();
            }
            NodeRef monthFolder = fileFolderService.searchSimple(yearFolder, String.valueOf(monthOfDate));
            if (monthFolder == null) {
                FileInfo monthInformations = fileFolderService.create(yearFolder, String.valueOf(monthOfDate), ContentModel.TYPE_FOLDER);
                monthFolder = monthInformations.getNodeRef();
            }
            NodeRef dayFolder = fileFolderService.searchSimple(monthFolder, String.valueOf(dayOfDate));
            if (dayFolder == null) {
                FileInfo dayInformations = fileFolderService.create(monthFolder, String.valueOf(dayOfDate), ContentModel.TYPE_FOLDER);
                dayFolder = dayInformations.getNodeRef();
            }
            try {
                fileFolderService.move(fileNodeRef, dayFolder, null);
            } catch (FileExistsException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}

Mon problème c'est d'arriver à récupérer le dossier sur lequel s'exécute la règle pour pouvoir vérifier si le dossier année existe déjà dans celui-ci.

Auriez-vous une idée de comment faire ?

Merci pour le temps que vous prendrez.

1 REPLY 1

luciel
Champ in-the-making
Champ in-the-making

C'est bon, j'ai trouvé une solution.

Il faut ajouter

private static final String PARAM_DESTINATION_FOLDER = "destination-folder";

paramList.add(
                new ParameterDefinitionImpl(PARAM_DESTINATION_FOLDER,
                                            DataTypeDefinition.NODE_REF,
                                            true,
                                            getParamDisplayLabel(PARAM_DESTINATION_FOLDER))); dans addParameterDefinitions

NodeRef destinationParent = (NodeRef) ruleAction.getParameterValue(PARAM_DESTINATION_FOLDER);

Et lors de la création de la règle, il faut passer le nodeRef comme arguments.

Merci encore.

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.