[Résolu] Détecter qu'un document a été créé par CIFS

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

[Résolu] Détecter qu'un document a été créé par CIFS

Bonjour,

J'ai une propriété "niveau d'importance" dans un aspect qui déclenche l'envoi d'un email à une liste de personnes déterminées selon sa valeur (de 1 à 5) grâce à une classe Java qui répond à onAddAspect et onUpdateProperties.

J'ai une règle dans un espace qui applique cet aspect dès qu'on y met un document.
En ne mettant pas de valeur par défaut à cette propriété dans la définition de l'aspect j'ai réussi à faire que l'email n'est envoyé qu'après la saisie de cette valeur dans la boite de saisie des propriétés liées à l'aspect.
Jusque là le comportement est tel que je le souhaite.

Le problème arrive si on dépose un document dans cet espace par CIFS.
La règle est appliquée, donc le document a l'aspect, c'est ok, mais comme il n'y a pas de valeur par défaut pour la propriété "niveau d'importance" celle-ci est vide.
Il faudrait que par défaut cette propriété soit forcée à 1 uniquement dans ce cas, et je ne peux pas la mettre à 1 par défaut dans l'aspect sinon le comportement par l'interface web n'est plus bon.

Là je sèche et je ne trouve rien sur les forums…

Merci pour vos lumières éventuelles.

Stéphane
7 Replies
michaelh
Active Member

Re: [Résolu] Détecter qu'un document a été créé par CIFS

A défaut de solution toute faite, une piste pourrait être d'utiliser l'aspect "incomplet".
Cet aspect est positionné automatiquement si un élément ne comporte pas l'ensemble des propriétés obligatoires qui lui sont associées.

Ça peut aider à lister les documents qui arrive par une autre voie que l'interface Web.
stephane_botell
Member II

Re: [Résolu] Détecter qu'un document a été créé par CIFS

A mon avis cette solution ne marche pas dans mon cas.

En effet, mon aspect contient bien une propriété mandatory dont la valeur par défaut n'est pas fournie.
Donc si je créé le document par l'interface web voici ce qui va se passer :
1 - je créé un nouveau content, je valide la boite de création en laissant cochée l'option permettant de saisir les propriétés liées à mon aspect qui va être appliqué par la règle de mon espace.
2 - alfresco créé le content, applique la règle et donc ajoute mon aspect et donc déclenche la policy que je gère. A ce moment-là le content doit avoir ton aspect "incomplet" puisque le champs n'est pas encore renseigné. Et pourtant je suis bien par l'interface Web mais en attente des propriétés qui vont être fournies par l'utilisateur d'ici quelques secondes. Je me retrouve donc pendant ces quelques secondes dans le même état que si le document était arrivé par CIFS.

Me trompe-je ?

Merci toutefois pour cet aspect "incomplet" que je ne connaissais pas.


Stéphane
tcaiati
Member II

Re: [Résolu] Détecter qu'un document a été créé par CIFS

A défaut de solution toute faite, une piste pourrait être d'utiliser l'aspect "incomplet".
Cet aspect est positionné automatiquement si un élément ne comporte pas l'ensemble des propriétés obligatoires qui lui sont associées.

Ça peut aider à lister les documents qui arrive par une autre voie que l'interface Web.

Bonjour Mickaël,

Merci pour l'infos sur l'aspect "incomplet", cela pourra servir plus tard.

Thomas
michaelh
Active Member

Re: [Résolu] Détecter qu'un document a été créé par CIFS

A ce moment-là le content doit avoir ton aspect "incomplet" puisque le champs n'est pas encore renseigné. Et pourtant je suis bien par l'interface Web mais en attente des propriétés qui vont être fournies par l'utilisateur d'ici quelques secondes. Me trompe-je ?

Il me semble que cet aspect n'est positionné qu'une fois l'ensemble du processus d'insertion terminé (à la fin de la transaction). Ca devrait donc fonctionner.
C'est facile et rapide à vérifier avec le navigateur de nœud par exemple …

Racontez-nous Smiley Happy
stephane_botell
Member II

Re: [Résolu] Détecter qu'un document a été créé par CIFS

Bonjour Michael,

Je viens de vérifier et en fait ça fonctionne bien comme je l'avais décrit.

J'ai fait un add content, puis validé la première boite de dialogue.
Le noeud est donc créé et a bien l'aspect "{http://www.alfresco.org/model/system/1.0}incomplete" alors que je viens de le créer par l'interface web et que j'ai à l'écran la boite de dialogue suivante, celle concernant la modification des propriétés de mon aspect.
Donc si je devais traiter cet aspect "incomplete" comme étant un indicateur de provenance CIFS, j'aurai forcé à 1 ma propriété "importance" de mon aspect et mon email serait déjà parti alors que l'utilisateur est en train de définir le niveau réel d'importance du content   Smiley Surprised

A moins que dans ton esprit il y avait une autre approche liée à cet aspect "incomplete" ? sinon là ça marche pas…

Mais ça peut servir un jour cet aspect "incomplete", c'était une bonne info (notamment j'ai un template spécial pour cet espace et si il n'y a pas de niveau d'importance défini ça fait pas beau :mrgreenSmiley Happy

Stéphane
stephane_botell
Member II

Re: [Résolu] Détecter qu'un document a été créé par CIFS

J'ai une solution (en fait même 2)  Smiley Very Happy

Ayant suivi la super formation "Intensive Alfresco Training for Development 5 days"  (que je recommande vivement) dispensée par Hervé QUIROZ de Componize, j'ai pu lui poser cette question directement et voici ses solutions qu'il m'a autorisé à diffuser ici :

1ère possibilité (que j'utilise avec succès) :
Depuis mon code de policy, je peux savoir si le point d'entrée était CIFS avec ce test :

if (ExceptionUtils.getStackTrace(new Exception()).contains("org.alfresco.jlan"))
{
// On vient de CIFS
}

Remarque: ExceptionUtils est une classe utilitaire de commons-lang et fait partie des classes disponibles en standard dans une application Alfresco.

Selon Hervé : "C'est peut-être un peu lourd comme approche (fabriquer une stack trace puis la parcourir pour trouver le nom d'un package)."
Mais dans mon système il n'y aura pas beaucoup de requêtes de ce genre.

2ième possibilité
Essayer de déterminer si on traverse le code de la policy en venant d'une requête via le client web:

if (FacesContext.getCurrentInstance() != null)
{
// On vient du client web
}

Remarque d'Hervé : il faudra vérifier que la méthode retourne bien null quand il n'y a pas de contexte JSF courant. Ce n'est pas très explicite dans la documentation officielle:
http://java.sun.com/javaee/javaserverfaces/1.0/docs/api/javax/faces/context/FacesContext.html#getCur...
J'ai cru à son doute (je comprends bien que ça peut peut-être poser problème en cas de 2 utilisateurs en simultané, l'un par Web et l'autre par CIFS) et du coup je n'ai pas essayé cette approche.

Voilà, encore merci à vous pour vos tentatives de réponses, et merci encore à Hervé pour sa réponse et son excellente formation.  :wink:

Stéphane
leyer
Member II

Re: [Résolu] Détecter qu'un document a été créé par CIFS

Bonjour je réactualise ce post car je souhaite faire la même chose mais dans Share.