# CONSTRAINTS über 2 Klassen

**URL:** <https://interlis.discourse.group/t/constraints-ueber-2-klassen/213>\
**Category:** Sprache INTERLIS\
**Created:** [5. Dezember 2023 um 09:10 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213 "2023-12-05T09:10:07Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ThomasMarti](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/thomasmarti/32/73_2.png) [@ThomasMarti](https://interlis.discourse.group/u/ThomasMarti)\
**Post date:** [5. Dezember 2023 um 09:10 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/1 "2023-12-05T09:10:07Z")

</div>

Hallo zusammen  
Im Workshop des Anwendertreffens haben wir ja über CONSTRAINTS gesprochen und auch ein Beispiel durchgespielt, aber leider nur in Interlis 2.4

In meinem 2.3-Modell möchte ich folgenden CONSTRAINT umsetzen:  
 ![Modellausschnitt](https://global.discourse-cdn.com/free1/uploads/interlis/original/1X/8a3c26ee29394aff3498513d4eb669aa789a503a.png)  
Wenn im Attribut „Rechtsstatus“ steht, muss das „Genehmigung\_Datum“ ausgefüllt sein.

Dieser Code funktioniert leider nicht, muss ich da noch die Beziehung zur anderen Klasse angeben?

> MANDATORY CONSTRAINT  
> ((Rechtsstatus == #laufendeAenderungen ) AND NOT (DEFINED (Genehmigung\_Datum)))  
> OR ((Rechtsstatus == #inKraft) AND (DEFINED (Genehmigung\_Datum)));

---

<div class="post-metadata">

**Author:** ![beistehen](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/beistehen/32/7_2.png) [@beistehen](https://interlis.discourse.group/u/beistehen)\
**Post date:** [5. Dezember 2023 um 09:25 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/2 "2023-12-05T09:25:30Z")

</div>

> [@ThomasMarti](#):
>
> Dieser Code funktioniert leider nicht, muss ich da noch die Beziehung zur anderen Klasse angeben?

Ja, du musst dir in der Association zwischen den beiden Klassen diejenige Rolle heraussuchen, welche auf die Zielklasse zeigt. Diese verwendest du dann als „Pfad“. Also z. B.

`... AND NOT (DEFINED (Rollenname->Genehmigung_Datum)))`

---

<div class="post-metadata">

**Author:** ![olivergrimm](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/olivergrimm/32/147_2.png) [@olivergrimm](https://interlis.discourse.group/u/olivergrimm)\
**Post date:** [5. Dezember 2023 um 09:47 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/3 "2023-12-05T09:47:50Z")

</div>

Als Ergänzung zu @beistehen: Dein Anwendungsfall entspricht dem [Workshop Beispiel #6](https://github.com/moflexch/awt3_validierung/tree/main/ws2#bedingung6-abgeschlossene-projekte-sollen-eindeutige-projektnummer-haben-validierungsmodell--)

---

<div class="post-metadata">

**Author:** ![ThomasMarti](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/thomasmarti/32/73_2.png) [@ThomasMarti](https://interlis.discourse.group/u/ThomasMarti)\
**Post date:** [5. Dezember 2023 um 10:47 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/4 "2023-12-05T10:47:23Z")

</div>

Der UML Editor will nicht:

> Name PlanungRef is not applicable to CLASS Strassennetzplan\_BL\_V2\_LV95.Strassennetzplan.Beschluss

In der CLASS Beschluss habe ich definiert:

> MANDATORY CONSTRAINT  
> ((PlanungRef-\>Rechtsstatus == #laufendeAenderungen) AND NOT (DEFINED(Genehmigung\_Datum)))  
> OR ((PlanungRef-\>Rechtsstatus == #inKraft) AND (DEFINED(Genehmigung\_Datum)));

Das heisst, die Rolle „PlanungRef“ zeigt auf die CLASS Planung, in der das Attribut „Rechtsstatus“ definiert ist.

> ```
> ASSOCIATION BeschlussPlanung =
> PlanungRef -<> {1} Planung;
> BeschlussRef -- {1..*} Beschluss;
> END BeschlussPlanung;
> 
> ```

Es funktioniert aber auch nicht, wenn ich die andere Rolle „BeschlussRef“ nehme. Wo liegt mein Denkfehler?

---

<div class="post-metadata">

**Author:** ![olivergrimm](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/olivergrimm/32/147_2.png) [@olivergrimm](https://interlis.discourse.group/u/olivergrimm)\
**Post date:** [5. Dezember 2023 um 11:46 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/6 "2023-12-05T11:46:24Z")

</div>

Evtl. hast Du den Constraint vor der Association definiert? Falls ja, nutze die Option den Constraint mittels CONSTRAINTS OF zu implementieren.  
Siehe dazu auch das [Beispiel #5 aus dem Workshop](https://github.com/moflexch/awt3_validierung/tree/main/ws2#bedingung5-area-test-auf-die-nicht-geplanten-zonen--)

---

<div class="post-metadata">

**Author:** ![ThomasMarti](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/thomasmarti/32/73_2.png) [@ThomasMarti](https://interlis.discourse.group/u/ThomasMarti)\
**Post date:** [5. Dezember 2023 um 12:28 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/7 "2023-12-05T12:28:24Z")

</div>

Danke, daran lag es.

Wenn ich den CONSTRAINTS OF… manuell im ili-File einfüge klappt es. Im UML-Editor kann ich es aber nicht definieren, oder ich wüsste nicht wo.

---

<div class="post-metadata">

**Author:** ![peterstaub](https://yyz2.discourse-cdn.com/free1/user_avatar/interlis.discourse.group/peterstaub/32/8_2.png) [@peterstaub](https://interlis.discourse.group/u/peterstaub)\
**Post date:** [11. August 2025 um 08:58 UTC](https://interlis.discourse.group/t/constraints-ueber-2-klassen/213/8 "2025-08-11T08:58:46Z")

</div>

unter “Einschränkungen” im Objekt-Änderungs-Dialog muss die Konsistenzbedingung manuell hineingeschrieben werden.
