Recherche


    Les formulaires de recherches sont des modèles de recherche pré-configurés et mis à disposition des utilisateurs finaux.

    Un formulaire de recherche permet de configurer entièrement un écran de recherche. Ceux-ci sont associés à des équipes d’un scope afin de personnaliser l’affichage présenté à l’utilisateur.


    Exemple : Un formulaire de recherche RechercheAgent basique dont le titre est Recherche de dossier agent avec une description

    <bean id="RechercheAgent" class="com.flower.docs.gui.client.search.ComponentSearchPresenter" scope="prototype">
      <property name="title" value="Recherche de dossier agent"/>
      <property name="description" value="Ne remplissez aucun critère pour retrouver l'ensemble des dossiers agents"/>
    </bean>
    


    Plusieurs propriétés sont mises à disposition pour configurer l’onglet de recherche de manière générale :

    Namespace Description Type de valeur Valeur par défaut
    search.export.max Nombre maximum de données à exporter Entier 200
    search.export.separator Séparateur du fichier csv de l’export Caractère ;
    search.export.hiddenColumns Colonnes masquées à l’export Caractère
    search.cache.previous Mise en cache de la dernière recherche Booléen false

    A une équipe

    Un formulaire de recherche peut être associé à une équipe d’utilisateur à travers une propriété qui peut être définie via :

    • le CLM et le fichier scope.xml :
      Exemple d'équipe
      <profiles>
      	<name>ALL_USERS</name>
      	<Description>User profile</Description>
      	<principals>ou=users,dc=arondor,dc=com</principals>
      	<properties>
      		<ns3:name>search.template</ns3:name>
      		<ns3:value>RechercheAgent(Agent search)</ns3:value>
      	</properties>
      </profiles>
      
    • la console d’administration : dans la section Sécurité > Equipes > Propriétés, ajouter une propriété Formulaire de recherche


    Cette propriété prend pour valeur : <identifiant>(<libellé>) soit par exempletemplate_id(libellé du formulaire)



    Si aucun libellé n’est renseigné, le titre provenant du formulaire de recherche sera utilisé.

    A un dossier virtuel

    Il est possible de configurer des filtres au sein d’un dossier virtuel et de surcharger la recherche utilisée pour ajouter ou masquer des colonnes dans la liste de résultats.

    Onglet

    Pour cela, il suffit de respecter la convention de nommage du bean de recherche comme suit :

    • pour appliquer le formulaire à l’ensemble des recherches du dossier virtuel, il faut utiliser le nom de bean suivant : content{VirtualFolder class id avec la première lettre en majuscule}VirtualFolder

      Exemple : pour la classe de dossier virtuel CourrierCollective, le nom du bean du formulaire de recherche associé sera contentCourriercollectiveVirtualFolder

    • pour appliquer le formulaire à l’une des recherches d’un dossier virtuel, il faut utiliser le nom de bean suivant : content{VirtualFolder class id avec la première lettre en majuscule}VirtualFolder{search id avec la première lettre en majuscule}

      Exemple : pour la classe de dossier virtuel CourrierCollective avec la recherche CourrierSearch, le nom du bean du formulaire de recherche associé sera contentCourriercollectiveVirtualFolderCourriersearch

    • pour appliquer le formulaire à cette recherche tout dossier virtuel confondu, il faut utiliser le bean suivant : contentVirtualFolder{search id avec la première lettre en majuscule}

      Exemple : pour la recherche CourrierSearch, le nom du bean du formulaire de recherche associé sera contentVirtualFolderCourriersearch


    Exemple
    	<bean id="contentCourriercollectiveVirtualFolderCourriersearch"
    		class="com.flower.docs.gui.client.search.ComponentSearchPresenter"
    		scope="prototype">
    		<property name="responsePresenterProvider">
    			<bean
    				class="com.flower.docs.gui.client.search.response.TableSearchResponsePresenterProvider" />
    		</property>
    		<property name="categorySelectorPresenter">
    			<bean
    				class="com.flower.docs.gui.client.search.criteria.item.FakeCategorySelectorPresenter">
    				<property name="value">
    					<value type="com.flower.docs.domain.component.Category">TASK</value>
    				</property>
    			</bean>
    		</property>
    		<property name="keywordCriteriaPresenter">
    			<bean
    				class="com.flower.docs.gui.client.search.criteria.KeywordCriteriaPresenter">
    				<property name="enabled" value="false" />
    			</bean>
    		</property>
    		<property name="hiddenColumns">
    			<list>
    				<value>status</value>
    				<value>classid</value>
    				<value>B_DirectionDestinataire</value>
    			</list>
    		</property>
    		<property name="advancedCriteriaPresenter">
    			<bean
    				class="com.flower.docs.gui.client.search.criteria.advanced.AdvancedCriteriaPresenter">
    				<property name="enabled" value="true" />
    				<property name="forceOpen" value="true" />
    				<property name="inline" value="false" />
    				<property name="displayClassSelector" value="false" />
    				<property name="addEmptyCriterion" value="false" />
    				<property name="showSearchButton" value="true" />
    				<property name="searchButtonTitle" value="Filtrer" />
    				<property name="fixedCriterionPresenters">
    					<list>
    						<ref bean="ObjetCriterion" />
    						<ref bean="DateCriterion" />
    						<ref bean="NomAdherentCriterion" />
    					</list>
    				</property>
    				<property name="searchableCriteria">
    					<list>
    						<value>B_DateCourrier</value>
    						<value>B_NomClient</value>
    						<value>B_ObjetCourrier</value>
    					</list>
    				</property>
    			</bean>
    		</property>
    	</bean>
    

    Indexation

    La définition d’un formulaire de recherche pour un dossier virtuel en indexation est très proche de celle en onglet, il suffit de respecter la convention de nommage du bean de recherche comme suit :

    • pour appliquer le formulaire à l’ensemble des recherches du dossier virtuel, il faut utiliser le nom de bean suivant : content{VirtualFolder class id avec la première lettre en majuscule}VirtualFolder{Phase}

      Exemple : pour la classe de dossier virtuel CourrierCollective en modification, le nom du bean du formulaire de recherche associé sera contentCourriercollectiveVirtualFolderModify

    • pour appliquer le formulaire à l’une des recherches d’un dossier virtuel, il faut utiliser le nom de bean suivant : content{VirtualFolder class id avec la première lettre en majuscule}VirtualFolder{Phase}{search id avec la première lettre en majuscule}

      Exemple : pour la classe de dossier virtuel CourrierCollective avec la recherche CourrierSearch, le nom du bean du formulaire de recherche associé sera contentCourriercollectiveVirtualFolderModifyCourriersearch

    • pour appliquer le formulaire à cette recherche tout dossier virtuel en indexation confondu, il faut utiliser le bean suivant : contentVirtualFolder{Phase}{search id avec la première lettre en majuscule}

      Exemple : pour la recherche CourrierSearch, le nom du bean du formulaire de recherche associé sera contentVirtualFolderModifyCourriersearch

    NB : Concernant la phase, les valeurs disponibles sont : Modify et ReadOnly.

    Sélecteur de catégorie

    Pour exécuter une recherche, il est nécessaire de définir le type d’objet recherché (documents, dossiers…) : une catégorie de composant.

    Pour cela, un sélecteur de catégorie est mis à disposition. Pour le masquer, la classe FakeCategorySelectorPresenter est mise à disposition afin de définir la catégorie sans que l’utilisateur n’ait à la sélectionner.

    Exemple : Forcer la catégorie d’une recherche de dossiers virtuels

    <property name="categorySelectorPresenter">
            <bean class="com.flower.docs.gui.client.search.criteria.item.FakeCategorySelectorPresenter">
                <property name="value">
                    <value type="com.flower.docs.domain.component.Category">VIRTUAL_FOLDER</value>
                </property>
            </bean>
    </property>
    

    Recherche par mot clés

    La recherche par mot clés se configure en ajoutant la propriété suivante :

    <property name="keywordCriteriaPresenter">
    	<bean class="com.flower.docs.gui.client.search.criteria.KeywordCriteriaPresenter" />
    </property>
    

    Pour désactiver la recherche par mot clés, il faut ajouter au bean de classe KeywordCriteriaPresenter la propriété suivante :

    <property name="enabled" value="false" />
    

    Par défaut, la recherche par mot-clé va permettre une recherche sur tous les tags de composants. Il est possible de changer ce comportement et de spécifier sur quels tags cette recherche par mot clés doit être effectuée :

    <property name="fields">
        <list>
        	<value>Matricule</value>
        	<value>Contractor</value>
        </list>
    </property>
    

    Recherche avancée

    La recherche avancée peut être configurée en ajoutant la propriété suivante :

    <property name="advancedCriteriaPresenter">
        <bean class="com.flower.docs.gui.client.search.criteria.advanced.AdvancedCriteriaPresenter" />
    </property>
    

    Pour désactiver la recherche avancée, il faut ajouter la propriété suivante :

    <property name="enabled" value="false" />
    

    Par défaut, la recherche avancée permet de filtrer sur une ou plusieurs classes de composants. Pour ne pas afficher le sélecteur de classes, il faut ajouter la propriété suivante :

    <property name="displayClassSelector" value="false" />
    

    Pour que la recherche avancée soit disposée en ligne, il faut ajouter la propriété suivante :

    <property name="inline" value="true" />
    

    Pour que la recherche avancée soit forcée à être ouverte et cacher le bouton permettant de la réduire, il faut ajouter la propriété suivante :

    <property name="forceOpen" value="true" />
    

    Le libellé par défaut de l’action est Rechercher, il peut être surchargé en ajoutant la propriété :

    <property name="searchButtonTitle" value="Vérifier" />
    

    Critères libres

    Par défaut, l’ensemble des classes de tag définies comme recherchables peuvent être ajoutées comme critère de recherche. Afin de restreindre la portée des recherches effectuées, il est possible de :

    • Empêcher les utilisateurs d’ajouter un critère libre grâce au bouton + : ajouter la propriété suivante au bean AdvancedCriteriaPresenter :

      <property name="addEmptyCriterion" value="true" />
      
    • Masquer un tag dans la liste des critères disponibles : ajouter la valeur de son idenfiant à la propriété unsearchableCriteria

      <property name="unsearchableCriteria">
      	<list>
      		<value>ServiceName</value>
      		<value>Assignee</value>
      	</list>
      </property>
      
    • Forcer les tags pouvant être utilisés comme critères dans un formulaire de recherche : ajouter la valeur de son idenfiant à la propriété searchableCriteria. Lorsque cette propriété est définie, la propriété unsearchableCriteria n’est pas utilisée.

      <property name="searchableCriteria">
      	<list>
      		<value>Nature</value>
      	</list>
      </property>
      

    Critères fixes

    La recherche avancée peut être configurée pour afficher, par défaut, des critères fixes que l’utilisateur n’aura plus qu’à remplir avant d’exécuter sa recherche. Pour les critères de type chaine de caractères, il est possible de définir une description, à l’aide de la propriété description, qui sera présentée à l’utilisateur.

    Pour définir un critère fixe :

    <bean id="FirstnameCriterionPresenter" class="com.flower.docs.gui.client.search.criterion.SimpleCriterionPresenter">
        <property name="model">
            <bean class="com.flower.docs.domain.search.Criterion">
                <property name="name" value="Firstname" />
                <property name="type">
                    <value type="com.flower.docs.domain.search.Types">STRING</value>
                </property>
                <property name="operator">
                    <value type="com.flower.docs.domain.search.Operators">CONTAINS</value>
                </property>
            </bean>
        </property>
        <property name="description" value="Prénom du collaborateur"/>
    </bean>
    

    Pour affecter ces critères à une recherche avancée :

    <property name="fixedCriterionPresenters">
    	<list>
    		<ref bean="FirstnameCriterionPresenter" />
    	</list>
    </property>
    

    Il est possible de personnaliser l’affichage d’un champ avec un bean de classe com.flower.docs.gui.client.search.criterion.FilterCriterionPresenter à l’aide de différentes propriétés :

    • displayOperatorSelector : permet de cacher le sélecteur d’opérateur
    • forceMonovalued : pour un critère normalement multivalué, force l’utilisateur à ne choisir qu’une valeur
    • mandatory : rend le champ obligatoire pour effectuer la recherche

    Exemple :

    <bean id="ValidationStatusCriterionPresenter" class="com.flower.docs.gui.client.search.criterion.FilterCriterionPresenter">
    	<property name="displayOperatorSelector" value="false" />
    	<property name="forceMonovalued" value="true" />
    	<property name="mandatory" value="true" />
    	<property name="model">
    		<bean class="com.flower.docs.domain.search.Criterion">
    			<property name="name" value="ValidationStatus" />
    			<property name="type">
    				<value type="com.flower.docs.domain.search.Types">STRING</value>
    			</property>
    			<property name="operator">
    				<value type="com.flower.docs.domain.search.Operators">STARTS_WITH</value>
    			</property>
    		</bean>
    	</property>
    </bean>
    

    Pour affecter ces critères à une recherche avancée :

    <property name="fixedCriterionPresenters">
    	<list>
    		<ref bean="ValidationStatusCriterionPresenter" />
    	</list>
    </property>
    

    Critères multiples :

    Par défaut, l’ensemble de ces critères est défini comme unique, à savoir que chaque tag présent dans la liste des critères ne peut être utilisé qu’une seule fois. Cependant, il est possible de définir qu’un tag puisse correspondre à plusieurs critères, grâce à la propriété nonUniqueCriteria :

    <property name="nonUniqueCriteria">
    	<list>
    		<value>name</value>
    		<value>TIAmount</value>
    		<value>creationDate</value>
    	</list>
    </property>
    

    Cette fonctionnalité est désactivable en ajoutant la propriété activateUniqueCriteria

    <property name="activateUniqueCriteria" value="false" />
    

    Sélecteur de classe

    Il est possible de personnaliser la sélection de la classe de composant lors d’une recherche à l’aide d’un bean de classe com.flower.docs.gui.client.search.criteria.clazz.ComponentClassCriterionSelectorPresenter.

    Ce critère de classe est personnalisable de la même façon que les critères filtres cités ci-dessus :

    • displayOperatorSelector : permet de cacher le sélecteur d’opérateur
    • forceMonovalued : pour un critère normalement multivalué, force l’utilisateur à ne choisir qu’une valeur
    • mandatory : rend le champ obligatoire pour effectuer la recherche

    Exemple :

    <bean id="classIdCriterionPresenter" class="com.flower.docs.gui.client.search.criteria.clazz.ComponentClassCriterionSelectorPresenter">
    	<property name="displayOperatorSelector" value="false" />
    	<property name="forceMonovalued" value="true" />
    	<property name="mandatory" value="true" />
    	<property name="model">
    		<bean class="com.flower.docs.domain.search.Criterion">
    			<property name="name" value="classid" />
    			<property name="type">
    				<value type="com.flower.docs.domain.search.Types">STRING</value>
    			</property>
    			<property name="operator">
    				<value type="com.flower.docs.domain.search.Operators">EQUALS_TO</value>
    			</property>
    		</bean>
    	</property>
    </bean>
    

    Le sélecteur de classe de type com.flower.docs.gui.client.search.criteria.clazz.CreatableTaskClassCriterionSelectorPresenter va permettre d’afficher uniquement les tâches qui n’ont pas de pièces jointes obligatoires et techniques et où l’utilisateur a les droits de création.

    Pour affecter ce critère de classe à une recherche avancée, il faut définir la propriété classCriterionPresenter et afficher le critère de classe:

    <property name="advancedCriteriaPresenter">
    		<bean class="com.flower.docs.gui.client.search.criteria.advanced.AdvancedCriteriaPresenter">
    			<property name="enabled" value="true" />
    			<property name="displayClassSelector" value="true" />
    			<property name="showSearchButton" value="true" />
    			<property name="classCriterionPresenter" ref="classIdCriterionPresenter" />
    		</bean>
    </property>
    

    Validation

    Afin de décider si le bouton de recherche doit être désactiver ou non, la propriété enableIfInvalid peut être définie. Cette propriété accepte les valeurs suivantes.

    • true : le formulaire de recherche peut être invalide
    • false : le formulaire doit être valide pour pouvoir rechercher des composants

    Exemple
    <bean id="RechercheAgent" class="com.flower.docs.gui.client.search.ComponentSearchPresenter" scope="prototype">
      <property name="title" value="Recherche de dossier agent"/>
      <property name="enableIfInvalid" value="true" />
    </bean>
    

    Pour chaque formulaire de recherche, il est possible de définir une requête de recherche cachée et donc non-visible des utilisateurs.

    Cette requête permet par exemple de :

    • ajouter des critères masqués
    • configurer les colonnes à afficher
    • définir le tri par défaut
    • définir le nombre de résultats à remonter

    L’objet ComponentSearchPresenter accepte une propriété hiddenRequest avec un bean de classe com.flower.docs.domain.search.SearchRequest.


    Exemple
    <bean id="monFormulaire" class="com.flower.docs.gui.client.search.ComponentSearchPresenter"
    		scope="prototype">
    		<!-- ... -->
    		<property name="hiddenRequest">
    			<bean class="com.flower.docs.domain.search.SearchRequest">
    				<property name="selectClause">
    					<bean class="com.flower.docs.domain.search.SelectClause">
    						<property name="fields">
    							<list>
    								<!-- Colonnes à afficher -->
    								<value>name</value>
    								<value>TypeCourrier</value>
    							</list>
    						</property>
    					</bean>
    				</property>
    				<property name="filterClauses">
    					<list>
    						<bean class="com.flower.docs.domain.search.AndClause">
    							<!-- Critères masqués -->
    							<property name="criteria">
    								<list>
    									<bean class="com.flower.docs.domain.search.Criterion">
    										<property name="name" value="classid" />
    										<property name="type">
    											<value type="com.flower.docs.domain.search.Types">STRING</value>
    										</property>
    										<property name="operator">
    											<value type="com.flower.docs.domain.search.Operators">EQUALS_TO</value>
    										</property>
    										<property name="values">
    											<list>
    												<value>CourrierEntrant</value>
    											</list>
    										</property>
    									</bean>
    								</list>
    							</property>
    						</bean>
    					</list>
    				</property>
    				<!-- Nombre de résultats à afficher -->
    				<property name="max" value="42" />
    			</bean>
    		</property>
    		<!-- ... -->
    	</bean>
    


    Dans certains cas, il peut être nécessaire d’ajouter des tags dans la selectClause de la requête cachée afin de remonter les valeurs d’un tag sans pour autant vouloir que la colonne soit visible. Pour cela, il est possible d’ajouter sur l’objet ComponentSearchPresenter la propriété hiddenColumns tel que :

    <property name="hiddenColumns">
    	<list>
    		<value>TypeCourrier</value>
    	</list>
    </property>
    


    • Il est préconiser d’utiliser la notion de requête cachée afin de simplifier l’accès à des composants et non pour sécuriser l’accès à ceux-ci.
    • Ajouter le critère ADD_FILTERS_TO_SELECT avec la valeur true dans les contextes de la requête permet d’afficher les critères renseignés en tant que colonnes.

    Pour chaque formulaire de recherche, il est possible de définir une liste d’action qu’un utilisateur peut exécuter.

    Ces actions doivent être définies à travers la propriété actions sur l’objet ComponentSearchPresenter.


    Exemple
    <bean id="EnvelopeSearch" class="com.flower.docs.gui.client.search.ComponentSearchPresenter" scope="prototype">
    	<property name="actions">
    		<list>
    			<ref bean="myAction1" />
    			<ref bean="myAction2" />
    		</list>
    	</property>
    </bean>
    

    Par défaut ces actions ne sont visibles qu’à partir du moment où la recherche a été exécutée. Pour changer ce comportement, il est possible d’ajouter la propriété :

    <property name="enableActionsIfDirty" value="false" />
    

    Types d’action

    Création de composant

    Il est possible d’ajouter une action permettant aux utilisateurs de créer un composant à partir d’un formulaire de recherche. Ce type d’action permet ainsi de pré-indexer le composant à créer à partir des critères de la recherche effectuée.

    Par exemple, si un utilisateur recherche un document de classe Facture avec un tag statut dont la valeur est réglé alors l’action permettra de créer un document avec ces mêmes informations.


    Exemple : Création de dossier
    <bean id="EnvelopeSearch" class="com.flower.docs.gui.client.search.ComponentSearchPresenter" scope="prototype">
    	<property name="actions">
    		<list>
    			<ref bean="createComponentFromSearchAction" />
    		</list>
    	</property>
    </bean>
    
    <bean id="createComponentFromSearchAction" class="com.flower.docs.gui.client.search.action.ComponentCreationActionPresenter">
    	<property name="componentRef">
    		<bean class="com.flower.docs.domain.component.ComponentReference">
    			<property name="category">
    				<value type="com.flower.docs.domain.component.Category">FOLDER</value>
    			</property>
    			<property name="id">
    				<bean class="com.flower.docs.domain.common.Id">
    					<property name="value" value="Agency" />
    				</bean>
    			</property>
    		</bean>
    	</property>
    </bean>
    

    Changement d’écran

    Les actions de type GoToPlaceActionPresenter permettent de changer d’écran.


    Exemple : Aller sur un écran de création de tâche avec vérification
    <bean class="com.flower.docs.gui.client.search.action.GoToPlaceActionPresenter">
    	<constructor-arg type="java.lang.String" value="Créer une enveloppe" />
    	<property name="place">
    		<bean class="com.flower.docs.gui.client.search.CreateWithVerificationPlace">
    			<property name="id">
    				<bean class="com.flower.docs.domain.common.Id">
    					<property name="value" value="EnvelopeSearch" />
    				</bean>
    			</property>
    			<property name="criteria">
    				<bean class="com.flower.docs.domain.search.Criteria">
    					<property name="category">
    						<value type="com.flower.docs.domain.component.Category">TASK</value>
    					</property>
    				</bean>
    			</property>
    		</bean>
    	</property>
    </bean>
    

    Activation

    Comme toutes les actions, il est possible de définir quelle est la stratégie d’activation grâce à la propriété enablingStrategy.

    Plusieurs stratégies sont fournies nativement :

    • Quelque soit les résultats de la recherche (par défaut) : AnyResultEnablingStrategy
    <bean class="com.flower.docs.gui.client.search.action.AnyResultEnablingStrategy" />
    
    • Seulement si la recherche ne remonte aucun résultat : NoResultEnablingStrategy
    <bean class="com.flower.docs.gui.client.search.action.NoResultEnablingStrategy" />
    
    • Si l’utilisateur a sélectionné, en fonction d’un opérateur, un certain nombre de composants : MultipleComponentsEnablingStrategy Cette stratégie d’activation à deux propriétés :

      • operator : L’opérateur avec lequel évaluer le nombre de composants sélectionnés. Les opérateurs disponibles sont EQUALS_TO, GREATER_THAN, LESS_THAN et DIFFERENT.
      • componentsCount : Le nombre de composants

      Exemple : Activation de l’action, si le nombre de composants sélectionnés est supérieur ou égal à 2

      <bean class="com.flower.docs.gui.client.search.action.MultipleComponentsEnablingStrategy">
          <property name="componentsCount" value="2"/>
          <property name="operator">
              <value type="com.flower.docs.domain.search.Operators">GREATER_THAN</value>
          </property>
      </bean>
      
    <bean id="AgentSearch" class="com.flower.docs.gui.client.search.ComponentSearchPresenter" scope="prototype">
    	<property name="title" value="Rechercher des dossiers agents" />
    	<property name="description" value="Remplissez les critères pour retrouver facilement le dossier désiré" />
    	<property name="categorySelectorPresenter">
    		<bean class="com.flower.docs.gui.client.search.criteria.item.FakeCategorySelectorPresenter">
    			<property name="value">
    				<value type="com.flower.docs.domain.component.Category">VIRTUAL_FOLDER</value>
    			</property>
    		</bean>
    	</property>
    	<property name="keywordCriteriaPresenter">
    		<bean class="com.flower.docs.gui.client.search.criteria.KeywordCriteriaPresenter">
    			<property name="enabled" value="false" />
    		</bean>
    	</property>
    	<property name="advancedCriteriaPresenter">
    		<bean class="com.flower.docs.gui.client.search.criteria.advanced.AdvancedCriteriaPresenter">
    			<property name="enabled" value="true" />
    			<property name="showSearchButton" value="true" />
    			<property name="displayClassSelector" value="false" />
    			<property name="fixedCriterionPresenters">
    				<list>
    					<ref bean="MatriculeCriterionPresenter" />
    					<ref bean="creationDateCriterion" />
    				</list>
    			</property>
    		</bean>
    	</property>
    	<property name="hiddenColumns">
    		<list>
    			<value>status</value>
    			<value>Matricule</value>
    		</list>
    	</property>
    	<property name="hiddenRequest">
    		<bean class="com.flower.docs.domain.search.SearchRequest">
    			<property name="selectClause">
    				<bean class="com.flower.docs.domain.search.SelectClause">
    					<property name="fields">
    						<list>
    							<value>name</value>
    							<value>classid</value>
    							<value>creationDate</value>
    							<value>lastUpdateDate</value>
    						</list>
    					</property>
    				</bean>
    			</property>
    			<property name="filterClauses">
    				<list>
    					<bean class="com.flower.docs.domain.search.AndClause">
    						<property name="criteria">
    							<list>
    								<bean class="com.flower.docs.domain.search.Criterion">
    									<property name="name" value="name" />
    									<property name="type">
    										<value type="com.flower.docs.domain.search.Types">STRING</value>
    									</property>
    									<property name="operator">
    										<value type="com.flower.docs.domain.search.Operators">STARTS_WITH</value>
    									</property>
    									<property name="values">
    										<list>
    											<value>Agent</value>
    										</list>
    									</property>
    
    								</bean>
    							</list>
    						</property>
    					</bean>
    				</list>
    			</property>
    		</bean>
    	</property>
    	<property name="emptyResultsMessages">
    		<list>
    			<bean class="com.flower.docs.domain.i18n.I18NLabel">
    				<property name="language" value="EN" />
    				<property name="value" value="No agent document was found" />
    			</bean>
    			<bean class="com.flower.docs.domain.i18n.I18NLabel">
    				<property name="language" value="FR" />
    				<property name="value" value="Aucun dossier agent n'a été trouvé" />
    			</bean>
    		</list>
    	</property>
    </bean>
    
    <bean id="EDSCriterionPresenter" class="com.flower.docs.gui.client.search.criterion.SimpleCriterionPresenter">
        <property name="model">
            <bean class="com.flower.docs.domain.search.Criterion">
                <property name="name" value="EDS" />
                <property name="type">
                    <value type="com.flower.docs.domain.search.Types">STRING</value>
                </property>
                <property name="operator">
                    <value type="com.flower.docs.domain.search.Operators">CONTAINS</value>
                </property>
            </bean>
        </property>
    </bean>
    
    <bean id="MatriculeCriterionPresenter" class="com.flower.docs.gui.client.search.criterion.SimpleCriterionPresenter">
        <property name="model">
            <bean class="com.flower.docs.domain.search.Criterion">
                <property name="name" value="Matricule" />
                <property name="type">
                    <value type="com.flower.docs.domain.search.Types">STRING</value>
                </property>
                <property name="operator">
                    <value type="com.flower.docs.domain.search.Operators">STARTS_WITH</value>
                </property>
            </bean>
        </property>
    </bean>
    
    <bean id="creationDateCriterion" class="com.flower.docs.gui.client.search.criterion.SimpleCriterionPresenter">
    	<property name="model">
    		<bean class="com.flower.docs.domain.search.Criterion">
    			<property name="name" value="creationDate" />
    			<property name="type">
    				<value type="com.flower.docs.domain.search.Types">TIMESTAMP</value>
    			</property>
    			<property name="operator">
    				<value type="com.flower.docs.domain.search.Operators">BETWEEN</value>
    			</property>
    		</bean>
    	</property>
    </bean>
    

    Masquer des colonnes

    Dans le tableau de résultats il est possible de masquer des colonnes. Pour cela, il faut ajouter la propriété hiddenColumns.


    Exemple
    <property name="hiddenColumns">
    	<list>
    		<value>TypeCourrier</value>
    	</list>
    </property>
    

    Affichage : tableaux & vignettes

    FlowerDocs permet d’afficher les résultats d’une recherche de deux façons différentes :

    • tabulaire : les résultats sont présentés de manière classique sous forme de tableau
    • en vignette : ARender est utilisé pour générer une vignette du composant

    L’affichage par défaut laisse à l’utilisateur la possibilité de choisir entre le mode de présentation des résultats. Par défaut, l’affichage tabulaire est présenté à l’utilisateur.


    Pour afficher, par défaut, les résultats de recherche sous forme de vignette, ajouter la propriété tableByDefault avec la valeur false :

    <property name="responsePresenterProvider">
    	<bean class="com.flower.docs.gui.client.search.response.SwitcherSearchResponsePresenterProvider">
    		<property name="tableByDefault" value="false" />
    	</bean>
    </property>
    


    Pour aller plus loin et configurer le contenu des miniatures, ajouter la propriété suivante sur l’objet SwitcherSearchResponsePresenterProvider :

    <property name="cardPresenter">
    	<bean class="com.flower.docs.gui.client.search.response.CardSearchResponsePresenterProvider">
    		<property name="titleTemplate" value="${name}" />
    		<property name="headingTemplate" value="Ajouté le ${creationDate}, par ${owner}" />
    		<property name="contentTemplate" value="" />
    	</bean>
    </property>
    


    Dans le cas où vous souhaitez que l’utilisateur ne puisse voir/utiliser qu’un seul mode de présentation des résultats d’une recherche :

    • Tabulaire :
    <property name="responsePresenterProvider">
    	<bean class="com.flower.docs.gui.client.search.response.TableSearchResponsePresenterProvider" />
    </property>	
    
    • Vignettes :
    <property name="responsePresenterProvider">
    	<bean class="com.flower.docs.gui.client.search.response.CardSearchResponsePresenterProvider">
    		<property name="titleTemplate" value="${name}" />
    		<property name="headingTemplate" value="Ajouté le ${creationDate}, par ${owner}" />
    		<property name="contentTemplate" value="" />
    	</bean>
    </property>	
    

    Lors du clic droit sur un ou plusieurs résultats de recherche, un menu contextuel apparaît. Celui-ci présente à la fois :

    • Les actions natives (ouvrir, visualiser…)
    • Les tâches que l’on peut créer à partir des résultats sélectionnés

    Ces actions sont également ajoutés dans l’en-tête du tableau de résultats de recherche.

    Pour désactiver une action native, il est possible d’ajouter la propriété menu.contextual.${category}.hidden.actions${category} est la catégorie de composant concerné. S’il s’agit de désactiver l’action Télécharger du menu contextuel par défaut des documents, ajouter la propriété menu.contextual.document.hidden.actions=DOWNLOAD_CONTENT.

    Déterminer l’identifiant du bean Spring

    Pour aller plus loin et personnaliser le menu contextuel, il est possible de définir les actions s’y trouvant.

    Pour cela, il est tout d’abord nécessaire de définir quel menu contextuel configurer :

    • pour quelle catégorie de composant ?
    • pour quel contexte ? Une recherche ? Un dossier ? Un dossier virtuel ?

    Quelques exemples ci-dessous de clé à utiliser en fonction du contexte :

    • contextualMenuDocument : pour définir manuellement le menu contextuel par défaut
    • contextualMenuDefaultsearchDocument: pour définir le menu contextuel d’un formulaire de recherche spécifique DefaultSearch
    • contextualMenuDossierAgentDocument: pour définir le menu contextuel des documents contenus dans un dossier virtuel de classe DossierAgent

    Déterminer la classe du bean Spring

    En fonction de la catégorie de composant, utiliser la classe Java indiquée :

    • document : com.flower.docs.gui.client.search.document.DocumentContextualMenuPresenter
    • tâche : com.flower.docs.gui.client.search.task.TaskContextualMenuPresenter
    • dossier : com.flower.docs.gui.client.search.folder.FolderContextualMenuPresenter
    • dossier virtuel : com.flower.docs.gui.client.search.virtualfolder.VirtualFolderContextualMenuPresenter

    Exemple : Définition du menu contextuel pour le formulaire de recherche de document DefaultSearch

    <bean id="contextualMenuDefaultsearchDocument" 
    class="com.flower.docs.gui.client.search.document.DocumentContextualMenuPresenter" scope="prototype">
    </bean>
    

    Définir les actions personnalisées

    Pour définir des actions, il est nécessaire de :

    Exemple : Ajout d’une action JavaScript exportToCRM dans le menu contextuel du formulaire de recherche de document DefaultSearch

    <bean id="contextualMenuDefaultsearchDocument" 
    class="com.flower.docs.gui.client.search.document.DocumentContextualMenuPresenter" scope="prototype">
    	<property name="actions">
    		<list>
    			<ref bean="exportToCRM" />
    		</list>
    	</property>
    </bean>