Bonjour,

Le comparateur ISNULL est bien celui qu'il faut utiliser pour chercher les champs dont la valeur est null.

Pour prévenir ce genre de cas, il est possible d'attribuer une valeur par défaut dans votre champ de type date dans le cas où aucune date n'a été rentrée, ceci à l'aide du fichier eventlistner.jsp

Dans ce cas votre eventlistner ressemblerait à ça:

<jsp:useBean id="eventsToTrap" class="java.util.Vector" scope="application"/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="org.jahia.content.*" %>
<%@ page import="org.jahia.data.*" %>
<%@ page import="org.jahia.data.containers.*" %>
<%@ page import="org.jahia.data.fields.*" %>
<%@ page import="org.jahia.data.events.*" %>
<%@ page import="org.jahia.engines.*" %>
<%@ page import="org.jahia.engines.categories.*" %>
<%@ page import="org.jahia.engines.selectpage.*" %>
<%@ page import="org.jahia.engines.shared.*" %>
<%@ page import="org.jahia.params.*" %>
<%@ page import="org.jahia.registries.*" %>
<%@ page import="org.jahia.services.categories.*" %>
<%@ page import="org.jahia.services.containers.*" %>
<%@ page import="org.jahia.services.database.*" %>
<%@ page import="org.jahia.services.fields.*" %>
<%@ page import="org.jahia.services.pages.*" %>
<%@ page import="org.jahia.services.version.*" %>
<jsp:useBean id="eventsToTrap" class="java.util.Vector" scope="application"/>
<%
if (eventsToTrap.size() == 0) {
    eventsToTrap.add("addContainerEngineAfterInit");
}

String eventName = (String) request.getAttribute("eventName");
JahiaEvent jahiaEvent = (JahiaEvent) request.getAttribute("jahiaEvent");
ParamBean jParams = jahiaEvent.getParams();

if ( eventsToTrap.contains(eventName)){
    HashMap engineMap =
(HashMap) jParams.getSession().getAttribute( "jahia_session_engineMap" );
    if (engineMap == null) { return; }
    String languageCode = (String)engineMap.get("languageCode");
    HashSet updatedFields = (HashSet)engineMap.get("updated.fields");
    if (updatedFields == null) {
        updatedFields = new HashSet();
        engineMap.put("updated.fields", updatedFields);
    }
    JahiaContainer theContainer = (JahiaContainer)jahiaEvent.getObject();
    if ( "yourContainerName".equals(theContainer.getDefinition().getName()) ){
        if ( "addContainerEngineAfterInit".equals(eventName) ) {
            JahiaField theField = theContainer.getField("yourDateFieldName");
            if (theField.getObject() == null) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
                long now = cal.getTime().getTime();
                String nowStr = String.valueOf(now);
                theField.setObject(nowStr);
                updatedFields.add(new Integer(theField.getID()));
            }
        }
    }
}
%>

Philippe

At 23.11.2005 10:18, you wrote:


Bonjour,
Je souhaiterais faire un filtre sur une valeur null,

Le Contexte :
J'ai un champs datefin qui n'est pas toujours renseigné, je souhaiterais faire un filtre sur tous les éléments dont ( la date de fin est supérieure ou égale a Now ) OU (la date de fin est null). Et donc je suppose que si je ne renseigne pas la date de fin, celle ci reste a null. (a moins qu'elle n'ai une valeur par défaut comme '' )
Mon filtre ressemble a ceci :

ContainerFilterBean dateFilter = new ContainerFilterBean("datefin",true,jData.params().getEntryLoadRequest());

dateFilter.addClause(ContainerFilterBean.COMP_BIGGER_OR_EQUAL,"" +todayCalendar.getTimeInMillis() );

Et dès que j'applique ce filtre aucun élément dont datefin est non renseigné n'apparait . (ce qui est logique du point de vue SQL)

J'ajoute donc une clause COMP_ISNULL en ecrivant :
 dateFilter.addClause(ContainerFilterBean.COMP_ISNULL,""  );
(déja la syntaxe n'est pas correcte car la requete générée ne semble pas bonne : b.value_jahia_fields_dataISNULL '' ) J'ai meme modifié les sources pour avoir b.value_jahia_fields_data IS NULL mais ca ne change rien. (hypersonic serait - t 'il différent ?)

Je me pose donc la question de comment filtrer sur un élément dont la valeur n'est pas renseignée.
Si quelqu'un a la solution..

Eric

Jahia 4.1 Hypersonic (ou Oracle) + Tomcat 4.1

-------=[ pvollenweider at jahia dot com ]=---------
Jahia : A collaborative source CMS and Portal Server
www.jahia.org Community and product web site
www.jahia.com Commercial services company

Répondre à