Page 1 sur 1
Champs obligatoires en fonction d'une liste

Publié:
08 Mars 2011 à 13:51
par DomNotes
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

Publié:
08 Mars 2011 à 13:54
par Michael DELIQUE
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))

Publié:
08 Mars 2011 à 17:03
par DomNotes
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);

Publié:
08 Mars 2011 à 17:06
par Michael DELIQUE
re,
vire les @Return("") ça te sort de ton code

Publié:
08 Mars 2011 à 17:20
par DomNotes
Quand j'ai supprimé les @return, il affiche les deux message l'un après l'autre sans faire le Gotofield

Publié:
08 Mars 2011 à 21:22
par Michael DELIQUE
essais ça
@Return(@Command([EditGotoField] ;"A"))

Publié:
08 Mars 2011 à 22:08
par roubech
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]

Publié:
09 Mars 2011 à 11:02
par DomNotes
Bonjour,
J'ai réadapter le code que vous avez envoyé et ça marche super bien.
Mille merci

Publié:
10 Mars 2011 à 01:18
par roubech
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é

Publié:
11 Mars 2011 à 00:17
par DomNotes
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)