Champs obligatoires en fonction d'une liste

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Champs obligatoires en fonction d'une liste

Messagepar DomNotes » 08 Mars 2011 à 13:51

Bonjour,
Je souhaite faire un contrôle sur des champs obligatoire qui s'affichent en fonction des valeurs sélectionné dans le "Champ1".
Champ 1: "A":"B":"C" :"D" (case à coché avec valeurs multiples)

Quand je sélectionne par exemple "A" et "B" deux champs s'affiche (chamA,champB) et doivent être obligatoires.

@If(@Contains(champ1;"A");
@If(ChampA="";@Prompt([Ok];"Error";"Fill in the A field.") & @Command([EditGotoField] ;"A");@Success);
@If(@Contains(champ1;"B");
@If(ChampB="";@Prompt([Ok];"Error";"Fill in B field.") &@Command([EditGotoField] ;"B");@Success);
""))

Ce code m'affiche uniquement le 1er message concernant le champA et ne vérifie plus le reste des formules après.

Merci d'avance
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Messagepar Michael DELIQUE » 08 Mars 2011 à 13:54

salut

tes @if sont imbriqué revois ton algo.

et je te conseil de n'afficher qu'un seule message avec toutes les erreurs. tes utilisateurs te remercions

et puis

@Prompt([Ok];"Error";"Fill in B field.") &@Command([EditGotoField] ;"B");@Success)

n'est pas une fomule valide , utilise la fonction @do

@do(@Prompt([Ok];"Error";"Fill in B field.");@Command([EditGotoField] ;"B");@Success))
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar DomNotes » 08 Mars 2011 à 17:03

Merci pour la réponse;
J'ai modifier la formule mais ça n'exécute que la 1ere.

@If(@Contains(champ1;"A");
@Do(
@If(ChampA="";@Prompt([Ok];"Error";"Fill in the A field."); @Command([EditGotoField] ;"A");@Success);@Return(""));

@If(@Contains(champ1;"B");
@Do(@If(ChampB="";@Prompt([Ok];"Error";"Fill in B field.") ;@Command([EditGotoField] ;"B");@Return(""));
@Success);
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Messagepar Michael DELIQUE » 08 Mars 2011 à 17:06

re,

vire les @Return("") ça te sort de ton code
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar DomNotes » 08 Mars 2011 à 17:20

Quand j'ai supprimé les @return, il affiche les deux message l'un après l'autre sans faire le Gotofield
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Messagepar Michael DELIQUE » 08 Mars 2011 à 21:22

essais ça

@Return(@Command([EditGotoField] ;"A"))
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar roubech » 08 Mars 2011 à 22:08

tu l'utilises comment cette formule ?
@Succes et @Failure ne s'applique que dans des formules de validation

pour un controle plus global, LS dans QuerySave

sinon, pour ta formule, tu peux essayer de commencer par créer une liste des champs obligatoires non renseignés, puis si cette liste est non vide, afficher ton message. Un truc du genre (j'ai pas testé) :
[syntax="Formula"]tLstField := @If( @Contains(champ1;"A") & ChampA = ""; "ChampA"; "" ) :
@If( @Contains(champ1;"B") & ChampB = ""; "ChampB"; "" );
tLstField := @Trim(tLstField);
@If( tLstField = ""; @Return(""); "");
@Prompt( [Ok]; "Error"; "Fill in the field(s) : " & @Implode(tLstField; ", ") );
@Command( [EditGotoField]; @Subset(tLstField; 1) );[/syntax]
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar DomNotes » 09 Mars 2011 à 11:02

Bonjour,
J'ai réadapter le code que vous avez envoyé et ça marche super bien.
Mille merci
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Messagepar roubech » 10 Mars 2011 à 01:18

content pour toi que ça fonctionne
mais pour les autres qui viendraientt lire ce sujet, ca serait bien de répondre à ma question sur l'endroit où tu as mis le code et de donner le code final que tu as modifié
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar DomNotes » 11 Mars 2011 à 00:17

J’ai utilisé le code dans un bouton d’action (Approuver). Avant de valider le document et le passer à l’étape suivante ce fait le contrôle sur ces deux listes.

Code du bouton d’action

REM {Test champs obligatoires Champ A & champ B};
FIELD Valueliste:=Valueliste;
FIELD FieldListe:=FieldListe;
@If(fieldliste!="";@Prompt( [Ok]; "Error"; "Fill in the field(s) : " + @Implode(Valueliste; ", ") );"");
@If(fieldliste!="";@Command( [EditGotoField]; @Subset(FieldListe; 1)) ;"");
@If(fieldliste!="";@Return("");@Success);

Dans mon masque j’ai ajouté ces deux champs FieldListe qui contiend le nom des champs obligatoires et le champ ValueListe qui contient les libellés des champs obligatoire qui seront affichés dans le message d’erreur.

le champ FieldListe
tLstField := @If( @Contains(champ1;"A")|@Contains(Champ;"A") & ChampA = ""; " ChampA "; "" ) : @If( @Contains(champ1;"B")||@Contains(Champ;"A") & ChampB = ""; "ChampB"; "" );
@Trim(tLstField)



Le champ ValueListe
tLstValue := @Replace(FieldListe;"ChampA":"ChampB;"Libellé A":"Libellé B");
@Trim(tLstValue)
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08


Retour vers Développement