<aside> ⁉️
Depuis la mise à jour de septembre 2023 apportant son lot de nouvelles fonctions, le comportement des formules peut avoir changé. Si Notion annonce que toutes les anciennes formules continuent de fonctionner, ce n’est en pratique pas toujours le cas.
</aside>
Prenons l’exemple suivant :
or(
prop("Date") > now(),
empty(prop("Date"))
)
La formule EXEMPLE teste si la date (propriété Date, de type date) est supérieure à l’instant présent OU si la date est vide.
Dans la base de données ci-dessous, on constate que la formule renvoie FAUX lorsqu’une date est précisée et VRAI lorsqu’aucune date n’est renseignée. Dans le détail, on obtient VRAI ou FAUX si on utilise empty() ou un comparateur (> dans l’exemple).
La base de donnée ci-dessous reprend le même principe sauf que la date n’est pas rentrée manuellement. Elle est issue d’une formule qui, pour ne pas renvoyer de date, utilise fromTimestamp(toNumber("")). Ce dernier bout de code était fréquemment utilisé avant la mise à jour pour obtenir un résultat de type date, vide, qui pouvait être utilisé dans une fonction if(). Cette astuce était même nécessaire car les deux valeurs renvoyées par if() devaient être du même type (en l’occurrence de type date).
if(
prop("Nom")=="Pas de date", /* Condition */
**fromTimestamp(toNumber(""))**, /* Si la condition est vérifiée, alors renvoie une date vide (Formule 1.0) */
parseDate("20230927") /* Si la condition n'est pas vérifiée, alors renvoie une date */
)
Si la formule EXEMPLE renvoie bien FAUX lorsqu’une date n’est précisée, elle ne renvoie rien, et surtout elle ne renvoie pas VRAI, lorsqu’aucune date n’est renseignée. Désormais, avec les formules 2.0, le résultat de la formule peut ne plus simplement être VRAI ou FAUX mais également ne rien contenir.
Dans ce contexte de date “vide” (fromTimestamp(toNumber(""))), le comportement des formules est donc bien différent. Cela peut ne pas avoir d’incidence sur la finalité mais cela peut également tout changer. Il faut donc lui trouver un substitue. Les formules 2.0 permettant désormais de mélanger les types (date et texte par exemple), pourquoi ne pas essayer tout simplement ""?
if(
prop("Nom")=="Pas de date", /* Condition */
**""**, /* Si la condition est vérifiée, alors renvoie une date vide (Formule 1.0) */
parseDate("20230927") /* Si la condition n'est pas vérifiée, alors renvoie une date */
)