0

Registerkarte Ausblenden

ich versuche eine Registerkarte über "Feld nur Anzeigen, wenn" einzublenden bzw. auszublenden.

Es soll sich dabei auf ein Ja/Nein Feld beziehen in einer anderen Tabelle das ich wie folgt Abfrage in der Registerkarte über "Feld nur Anzeigen, wenn"

let TAID := 'Aufträge'.Terminart;
(select Montagegrund where Nr = TAID).'Ausbauzähler'

wenn ich die Formel in ein Funktionsfeld in der aktuellen Ansicht schreibe in der die Registerkarte ausgeblendet werden soll funktioniert es. Es erscheint je nach Auswahl Ja oder Nein aber Die Registerkarte wird nicht aus/eingeblendet

'Aufträge'.Terminart ist ein dyn.Auswahlfeld das die Tabelle Montagegrund als Referenzdatenbank hat dort gibt es das Ja/Nein Feld 'Ausbauzähler'

7 Antworten

null
    • Leonid_Semik.2
    • gestern
    • Gemeldet - anzeigen

    Hallo Andreas,
    select Anweisung liefert einen Array aus records. Auch wenn es nur ein Datensatz ist, ist die Antwort nicht true oder false sondern [true] oder [false]. Das Formulafeld blendet die Eckklammer aus.
    in deinem Fall ist es  schneller einen record() befehl zu nehmen weil TAID eine Nummern liefern kann:

    let TAID := number('Aufträge'.Terminart);
    record(Montagegrund,TAID).'Ausbauzähler'
    

     Vorausgesetzt -'Aufträge' ist ein Verknüpfungsfeld und nicht die Untertabelle

    Leo

      • Andreas_Kappes
      • gestern
      • Gemeldet - anzeigen

       

      So funktioniert das

      SUPER vielen Dank Leo

      Gruß Andreas

    • Jorg_Dietrich
    • gestern
    • Gemeldet - anzeigen

    In meinem Fall habe ich folgendermaßen gelöst.

    first(select Mitarbeiter where 'Ninox-Nutzer' = user() and Berechtigung = 1) != null
    
      • Leonid_Semik.2
      • gestern
      • Gemeldet - anzeigen

       

      ja, funktioniert auch. Nur um mich hier ein wenig wichtig zu machen:

      Die aktuelle Funktion durchsucht alle Mitarbeiter und prüft dabei zwei Bedingungen. Technisch gesehen hört sie auf zu suchen, sobald die erste Bedingung nicht erfüllt ist. Danach wird geprüft, ob ein entsprechender Datensatz existiert – also insgesamt 3 Schritte.

      Ich würde es folgendermaßen vereinfachen:

       

      first(select Mitarbeiter where 'Ninox-Nutzer' = user()).Berechtigung = 1
      

      In diesem Fall werden maximal 2 Bedingungen geprüft.

      Um die Performance weiter zu steigern, könnte man im Bereich Globale Funktionen eine Funktion anlegen:

      function currentEmployee () do
      cached(
      first(select Mitarbeiter where 'Ninox-Nutzer' = user()
      )
      end;

      cached sorgt dafür, dass das Ergebnis im Browser-Speicher für die aktuelle Session abgelegt wird und nicht bei jedem Aufruf erneut select ausgeführt wird.

      Die Formel für die Sichtbarkeit wäre dann:

      currentEmployee().Berechtigung = 1
      

      Leo

      • Jorg_Dietrich
      • vor 21 Stunden
      • Gemeldet - anzeigen

       Perfekt. Das ist natürlich viel einfacher. Danke!

      • Jorg_Dietrich
      • vor 21 Stunden
      • Gemeldet - anzeigen

      Hallo Leo,

      darf ich Dich vielleicht mit noch einen Tipp zum Code bitten? Was würdest Du mit folgendem machen um diesen ggf. zu vereinfachen. Der Code steht in einem Formel-Feld einer Tabelle.

      let k := this;
      cnt(select Aufgaben
              where (Status = 1 or Status = 2 or Status = 3) and Kategorie = k and
              (Inhaber.'Ninox-Nutzer' = user() or 'Zugewiesen an'.'Ninox-Nutzer' = user()))
      

      Beste Grüße
      Jörg

      • Leonid_Semik.2
      • vor 18 Stunden
      • Gemeldet - anzeigen

       

      Hallo Jörg,

      du bist ja offensichtlich in der Tabelle Kategorie, d. h. die dazugehörige Untertabelle Aufgaben steht dir direkt per Punktnotation zur Verfügung.

      Deine Status-Bedingung (Status = 1 or Status = 2 or Status = 3) kannst du kürzer mit number(Status) < 4 schreiben. Außerdem lohnt es sich, user() einmal in eine Variable zu packen, damit es nicht mehrfach berechnet wird.

      Ich würde es so formulieren:

      let u := user();
      cnt(
          Aufgaben[
              Status and number(Status) < 4 and
              (Inhaber.'Ninox-Nutzer' = u or 'Zugewiesen an'.'Ninox-Nutzer' = u)
          ]
      )
      

      Das macht genau das Gleiche, ist aber kompakter und vermeidet doppelte Funktionsaufrufe.

      Grüße
      Leo

Content aside

  • vor 18 StundenZuletzt aktiv
  • 7Antworten
  • 43Ansichten
  • 3 Folge bereits