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
ENDCode:
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
ENDJ'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
ENDDonc, 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
ENDSi 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


