0

N:1 Beziehung mit Einschränkung einer dyn. Mehrfachauswahl

 Hallo zusammen,

ich habe eine Tabelle „Konto“ mit einer N:1 Beziehung zu Tabelle „Kontakte“. In der Tabelle „Kontakte“ existiert ein dynamisches Mehrfachauswahlfeld „Kontakttyp“ was ich gerne als Filter (Einschränkung in der N:1 Beziehung) benutzen möchte. Sprich es sollten nur Bank-Kontakte aufgelistet werden.

Ich habe versucht mit select auf Tabelle „Datensatz“ (hier liegen die Datensätze für das dynamische Feld) die ID von Bank zu ermitteln. Anstatt 1 habe ich 22 bekommen.

First(select Datensatz where Datensatzwert="Bank")

Für die Einschränkung war folgendes meine Idee aber leider bekomme ich nur eine leere Liste:

let bankID := first(select Datensatz where Datensatzwert="Bank");
number(b.Kontakttyp)=bankID

Vielleicht kann mir jemand helfen mein Knoten im Gehirn zu lösen.

 

Beste Grüße,

Björn

7 Antworten

null
    • Fred
    • gestern
    • Gemeldet - anzeigen

    try:

    First(select Datensatz where text(Datensatzwert) ="Bank")
    

    Assuming that the dynamic field shows the word "Bank" in the choice field.

      • bjoern_seidel
      • gestern
      • Gemeldet - anzeigen

       

      hello Fred,

      thank you for your support. but unfortunately I get the same results as my solution approach.
      So the ID I get is 22 again.

      • Fred
      • vor 23 Stunden
      • Gemeldet - anzeigen

       Dynamic fields are based on the record ID (recID). If you go to the Datensatz table, what is the record ID of the record with the word Bank?

      • bjoern_seidel
      • vor 11 Stunden
      • Gemeldet - anzeigen

       

      Oh, you're right. I was looking at the wrong column, sorry. It really is ID 22.

      The following code displays the contacts I expect in the list.

      let bankID := first(select Datensatz where text(Datensatzwert) = "Bank");
      let value := false;
      for id in numbers(b.Kontakttyp) do
          if id = bankID then value := true; end
      end;
      value
      

      I'm just not sure if the code is optimal. I also can't find in the documentation how to terminate the loop prematurely if the `if` statement is true.

      • Fred
      • vor 6 Stunden
      • Gemeldet - anzeigen

       Here is one way of changing the code.

      let bankID := first(select Datensatz where text(Datensatzwert) = "Bank");
      if contains(numbers(b.Kontakttyp), bankID) then true else false end
      • bjoern_seidel
      • vor 3 Stunden
      • Gemeldet - anzeigen

       

      Great, thank you so much! I only had to make a small correction (number(bankID)) for it to work.

      let bankID := first(select Datensatz where text(Datensatzwert) = "Bank"); if contains(numbers(b.Kontakttyp), number(bankID)) then true else false end
      
      • Fred
      • vor 2 Stunden
      • Gemeldet - anzeigen

       That makes sense since a select returns nID not just a number.

Content aside

  • Status Answered
  • vor 2 StundenZuletzt aktiv
  • 7Antworten
  • 23Ansichten
  • 2 Folge bereits