lotus domino c developpement web

Formules

Les @formules ne sont pas très digestes. Mais elles peuvent faire une foule de choses en seulement quelques lignes...
  • Soustraction dans une liste
  • Formule Ou (Exclusif) entre 2 listes
  • Supprimer les accents d'une liste
  • Forcer un Logoff avant l'ouverture d'un masque de saisie 
  • Calcul de séparateurs de milliers

Soustraction dans une liste

Cette formule permet de supprimer des éléments d'une liste dans une autre.

La formule supprime tout les élèments de la liste2 dans la liste1

ListeNulle := @Explode(@Repeat(";"; @Elements(Liste1)); ";");
Resultat := @Replace(Liste1; Liste2; ListeNulle);
@Trim(Resultat)

Exemple:


Liste1 := "1":"2":"3":"4":"5":"6":"7":"8";
Liste2 := "1":"2":"3";
ListNulle := @Explode(@Repeat(";"; @Elements(Liste1)); ";");
Tmp := @Replace(Liste1; Liste2; ListNulle);
Resultat := @Trim(Tmp)

Il est conseillé de faire afficher @implode(Resultat; "#") pour tester.

Fonction OU exclusif entre 2 listes

Ce code permet de fusionner 2 listes sans prendre les éléments communs aux 2 listes
(OU exclusif)

ListeFinale := @Explode(@Implode(@Replace(Liste1 ; Liste2 ; "");";");";";@False)

Exemple:
Liste1 := "André":"Bertrand":"Camille":"Delphine":"Emilie":"Francoise" ;
Liste2 := "Francoise":"Bertrand":"Gaston" ;
ListeFinale := @Explode(@Implode(@Replace(Liste1 ; Liste2 ; "");";");";";@False) ;
ListeFinale

Le résultat donne:
"André":"Camille":"Delphine":"Emilie":"Gaston"

Si vous faites un test, afficher plutôt le résultat @implode(ListeFinale; ";")

Virer les accents d'une liste

Cette formule supprime les accents d'une liste.
Elle n'est pas belle, elle n'est pas très pratique, mais une fois qu'on l'a trouvé, on la garde dans un coin.

Process := @ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(@ReplaceSubstring(Liste;"+";" ");"é";"e");"è";"e");"à";"a");"â";"a");"ä";"a");"ê";"e");"ë";"e");"ù";"u");"û";"u");"ü";"u");"ï";"i");"î";"i");"á";"a");"å";"a");"ã";"a");"ì";"i");"í";"i");"ò";"o");"ö";"o");"ô";"o");"ó";"o");"õ";"o");"ú";"u");"ý";"y");"ç";"c");"ñ";"n");"\'";" ");


Forcer un logoff avant l'ouverture d'1 masque de saisie

Forcer une demande de mot de passe avant l'ouverture d'un masque, peut sembler un peu inutile.
Mais, cela peut etre utile si le client est particulièrement sensible à la sécurité.

Inserer la formule suivante dans le QueryOpen d'un masque.


@Command([ToolsUserLogoff])

Calcul de séparateurs de milliers

Ce n'est pas que la formule soit particulièrement difficile, mais la développer est astreignant.
Voila de quoi vous simplifier la vie...


stmp :=ValeurAAfficher;
Calcul := @If( stmp != "";stmp;"0");

sDecimal := @If( @Contains(Calcul;",")=@True;","+@Right(Calcul;","); @Contains(Calcul;".")=@True;","+@Right(Calcul;".");"");

sEntier := @If( @Contains(Calcul;",")=@True;@Left(Calcul;","); @Contains(Calcul;".")=@True;@Left(Calcul;".");Calcul);

sMilliars :=@Text(@Integer( (@Abs(@TextToNumber(sEntier))/1000000000)));
sMillions :=@Text(@Integer( (@Abs(@TextToNumber(sEntier))/1000000)));
sMilliers :=@Text(@Integer( (@Abs(@TextToNumber(sEntier))/1000)));
sMillions1 := @Right(sMillions;3);
sMilliers1 := @Right(sMilliers;3);
sUnite :=@Right(@Text(@Abs(@TextToNumber(sEntier)));3);

pos := @If( sMilliars != "0"; sMilliars+ " " +sMillions1 + " " + sMilliers1 + " " + sUnite +sDecimal;sMillions != "0"; sMillions + " " + sMilliers1 + " " + sUnite +sDecimal;sMilliers1 != "0"; sMilliers1 + " " + sUnite +sDecimal;sUnite+sDecimal);

neg := "-"+@If( sMilliars != "0"; sMilliars+ " " +sMillions1 + " " + sMilliers1 + " " + sUnite +sDecimal;sMillions != "0"; sMillions + " " + sMilliers1 + " " + sUnite +sDecimal;sMilliers1 != "0"; sMilliers1 + " " + sUnite +sDecimal;sUnite+sDecimal);

@If(@TextToNumber(sEntier) >= 0;pos;neg)