Pages: 1
- Sujet précédent - QGIS 3.22: Contrainte si champ non null sur une autre couche - Sujet suivant
#1 Sat 27 November 2021 12:16
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
QGIS 3.22: Contrainte si champ non null sur une autre couche
Bonjour,
J'aimerais contraindre un champ selon le contenu d'un autre champ, situé sur une autre couche.
Tout d'abord, il s'agit de ces deux champs ; situés dans deux couches en relation:
- "Pla-cort" ; sur la couche "TERRAIN_SAISIE_LISTE_PT"
- "Recouvr" sur la couche "Formulaire_Bota_v1.1"
Ce que je cherche à faire :
Lorsque le champ "Pla-cort" est complété ; alors ne pas pouvoir valider si le champ "Recouvr" n'est pas complété également.
Si le champ "Pla-cort" est vide, alors "Recouvr" peut être complété ou non.
J'ai testé comme ceci, sans succès :
Code:
CASE WHEN aggregate(layer:='TERRAIN_SAISIE_LISTE_PT',aggregate:='min_length',expression:="Pla-cort") > 0 THEN "Recouvr" is not null END
Code:
CASE WHEN aggregate(layer:='TERRAIN_SAISIE_LISTE_PT',aggregate:='min_length',expression:="Pla-cort") > 0 THEN "Recouvr" is not null ELSE "Recouvr" is null or "Recouvr" is not null END
J'ai l'impression que :
Code:
aggregate(layer:='TERRAIN_SAISIE_LISTE_PT',aggregate:='min_length',expression:="Pla-cort")
est systématiquement = à 0.
Je vous remercie de votre attention,
Bonne journée !
Dernière modification par Giene (Sat 27 November 2021 12:19)
Hors ligne
#2 Sun 28 November 2021 11:59
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
Re: QGIS 3.22: Contrainte si champ non null sur une autre couche
Bonjour,
J'ai encore essayé avec la fonction aggregate, mais ça n'est pas ça, je me retrouve avec l'ensemble des données contenues dans le champ désigné regroupées, alors que j'aimerais travailler uniquement avec le champ en cours de remplissage dans la couche parent et connaître sa valeur (NULL / pas NULL).
Les deux couches parents / enfant sont liées via un ID et je pense qu'il faut que je m'appuie sur cet ID.
La couche enfant n'a pas de géométrie, ce qui fait que je ne peux pas utiliser les fonctions spaciales.
Test
Code:
CASE WHEN aggregate(layer:='TERRAIN_SAISIE_LISTE_PT',aggregate:='concatenate',expression:="Pla-cort" || "Ident") is not NULL THEN CASE WHEN length(aggregate(layer:='TERRAIN_SAISIE_LISTE_PT',aggregate:='concatenate',expression:="Pla-cort" || "ID")) - length("ID_esp")> 0 THEN "Recouvr" is not null ELSE "Recouvr" is null or "Recouvr" is not null END ELSE "Recouvr" is null or "Recouvr" is not null END
Donc, finalement pour contourner le problème en attendant de trouver mieux ; comme les deux couches sont liées par un ID, lorsque le champ "Pla-cort" est non NULL, j'ajoute '@P' à la fin de l'identifiant.
Ensuite, dans les contraintes, puisque l'ID apparaît aussi dans la couche fille, il me suffit de m'y prendre comme ça pour vérifier si "Pla-cort" est nul ou pas :
Code:
CASE WHEN length("ID_esp") - length(replace("ID_esp",'@','')) > 0 THEN "Recouvr" is not NULL ELSE "Recouvr" is NULL or "Recouvr" is not NULL END
Si Pla-cort est NULL, pas d' '@P' dans l'ID, la contrainte retourne 0 ; sinon la contrainte retourne 1.
A plus tard !
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.22: Contrainte si champ non null sur une autre couche - Sujet suivant