Ankündigung

Einklappen
Keine Ankündigung bisher.

Bedingte Anzeige GUIDS aus Datengruppe

Einklappen
X

Bedingte Anzeige GUIDS aus Datengruppe

Einklappen
  • Filter
  • Zeit
Alles löschen
neue Beiträge

  • Bedingte Anzeige GUIDS aus Datengruppe

    Guten Morgen,

    bisher habe ich für die Bedingte Anzeige von Schaltflächen oder Gruppierungen die GUID's aus einem Textfeld benutzt.

    Aus Performancegründen möchte ich die GUID's jetzt nicht mehr im Textfeld speichern, sondern in einer Datengruppe.

    Der bisherige Code:

    Code:
    #set($TextGuids = $DC.getValueHolder("textareavcontrol60F2BEAF").get Value())
    #set($groupGuids = $TextUtil.split($TextGuids,"||"))
    #set($userMembership = $Portal.getOrgStructure().getMembershipSets($User) )
    ##Returns true, if $User is member of at least one group, which is defined by its guid in $groupGuids
    #if
    (
    ($groupGuids.contains($User.getGuid()))
    ||
    ($userMembership.intersects($groupGuids))
    )
    #set($show_buttoncontrolA0B03F20 = true)
    #else
    #set($show_buttoncontrolA0B03F20 = false)
    #end
    Leider komme ich bei der Umstellung des Codes nicht weiter.

    Die GUID's müssen jetzt aus einer Datengruppe ermittelt werden mit einem zusätzlichen Filter auf eine FKLID.

    Danke und Gruß

  • #2
    Ich bin mir nicht sicher, ob die Performance verbessert wird, wenn man an dieser Stelle auf Kinddatengruppen umbaut.
    Es ist hierfür eine zusätzliche SQL-Abfrage notwendig was prinzipiell mehr Performance frisst als ein Textfeld.
    Allerdings lässt sich auch etwas flexibler nach Kinddaten filtern.

    Im Prinzip muss es etwa so aussehen(ungetestet):
    Code:
    #set($groupGuids = $CollectionFactory.createList())
    #set($statement = $PreparedQuery.prepare($DbConnection, "SELECT STR_GROUPGUID FROM DATAGROUP('<DATAGROUP_GUID>') WHERE FKLID=?"))
    $statement.setInt(1, $DC.getRecId())
    #set($rs = $statement.executeQuery())
    #foreach($element in $rs)
        $groupGuids.add($element.getStringValue(1))
    #end
    $rs.close()
    $statement.close()
    ##Der Rest bleibt gleich
    ########################################################################
    #set($userMembership = $Portal.getOrgStructure().getMembershipSets($User) )
    ##Returns true, if $User is member of at least one group, which is defined by its guid in $groupGuids
    #if
    (
    ($groupGuids.contains($User.getGuid()))
    ||
    ($userMembership.intersects($groupGuids))
    )
    #set($show_buttoncontrolA0B03F20 = true)
    #else
    #set($show_buttoncontrolA0B03F20 = false)
    #end

    Kommentar


    • #3
      Hallo MartinW,

      vielen Dank für die rasche Antwort.

      Werde es gleich mal ausprobieren.

      Der Umbau auf Kinddatengruppen erfolgte für die Filterung von Ansichtstabellen. Hier ist der Performancegewinn deutlich spürbar.

      Gruß

      Kommentar


      • #4
        Hallo MartinW,

        das Ein - bzw. Ausblenden der Schaltfläche funktioniert jetzt wie gewünscht.

        Es wird jetzt aber ein true für jede gefundene Zeile der abgefragten Datengruppe in der Bildschirmaske ausgegeben.

        Wie umgehe ich das ?

        Danke und Gruß

        Kommentar


        • #5
          Ich würde dafür am Anfang noch den Befehl
          Code:
          $Response.setIgnoreWrite(true)
          und am Ende den
          Code:
          $Response.setIgnoreWrite(false)
          ausführen.
          Das führt dazu, dass alles was dazwischen an Ausgaben erzeugt wird nicht im Browser ausgegeben wird.
          Hier hat vermutlich die add()-Methode einen Rückgabewert vom Typ Boolean.

          Kommentar


          • #6
            Danke MartinW.

            Kommentar


            • #7
              Hallo Zusammen,

              ich habe heute diesen Eintrag gefunden und für meine Zwecke nachgebaut.
              Jedoch funktioniert es nicht. Ich möchte außer der Benutzerabfrage noch eine weiter Bedingung hinzufügen.

              Hier mein Code
              #set($l_vhOutputFile = $DC.getPropertiesVH().get('B_INDIVIDUAL_OUTPUT_DOC '))
              #set($groupGuids = ["2AB1E03569E5A7B3A6F500A19433EFAFEEA1DD50"]))
              #set($userMembership = $Portal.getOrgStructure().getMembershipSets($User) )

              ##Returns true, if $User is member of at least one group, which is defined by its guid in $groupGuids
              #if
              (
              (($groupGuids.contains($User.getGuid()))
              ||
              ($userMembership.intersects($groupGuids)))
              ||
              ($l_vhOutputFile.getValue())
              )
              #set($show_simplegroup7A06F824 = true)
              #else
              #set($show_simplegroup7A06F824 = false)
              #end

              Leider wird die simplegroup7A06F824 nicht ausgeblendet und ich bekomme jetzt eine ) in meiner Maske angezeigt.

              Vielen, vielen Dank für Eure Hilfe.
              Herzliche Grüße
              Skorpion

              Kommentar


              • #8
                Die Zeile mit #set($groupGuids = ["2AB1E03569E5A7B3A6F500A19433EFAFEEA1DD50"])) hat eine schließende Klammer zu viel.
                Was möchtest du denn erreichen? Wenn du es einfach in Worten formulierst hilft das oft, den Fehler zu finden.

                Kommentar


                • #9
                  Hallo MartinW,

                  vielen Dank für Deine schnelle Antwort.
                  Sorry für meine knappe Beschreibung. Hoffe so ist es verständlicher

                  Ich wollte den ursprünglichen Code:
                  #set($l_vhOutputFile = $DC.getPropertiesVH().get('B_INDIVIDUAL_OUTPUT_DOC '))

                  #if ($l_vhOutputFile.getValue())
                  #set($show_simplegroup7A06F824 = true)
                  #else
                  #set($show_simplegroup7A06F824 = false)
                  #end

                  ergänzen mit der Bedingung - nur wenn der aktuelle Benutzer Mitglied in der Gruppe Redakteure (2AB1E03569E5A7B3A6F500A19433EFAFEEA1DD50)
                  ist, dann soll in der Eingabeseite die gefüllte Dateiauswahl sichtbar sein.

                  Die Klammer ist jetzt weg. Die Gruppierung mit dem Element Dateiauswahl wird aber angezeigt.

                  Kommentar


                  • #10
                    Dann muss das oben vermutlich nicht mit ODER(||) sondern UND(&&) verknüpft werden.
                    Bzw. der erste Operator bleibt ein ODER und der zweite wird ein UND

                    Kommentar


                    • #11
                      Ich habe den Code geändert und ein && gesetzt
                      (
                      (($groupGuids.contains($User.getGuid()))
                      ||
                      ($userMembership.intersects($groupGuids)))
                      &&
                      ($l_vhOutputFile.getValue())
                      )

                      Jetzt wird die Gruppierung ausgeblendet aber folgende Fehlermeldung ausgegeben.

                      Error in funktion: ToolTipShow (onload Evaluation)
                      Die Eigenschaft "required" eines undefinierten oder Nullverweises kann nicht festgelegt werden.



                      Kommentar


                      • #12
                        Ist in der ausgeblendeten Gruppe ein Pflichtfeld enthalten, was du per Javascript im Onload setzt? Klingt zumindest danach.

                        Kommentar


                        • #13
                          Hallo Snixx,

                          vielen Dank für Ihre Hilfe.

                          Es ist in der Gruppierung nur eine Dateiauswahl die beim Aufruf der Seite die momentane Datei anzeigt.
                          Eingabe erforderlich ist bei der Dateiauswahl nicht aktiviert.
                          Es wird keine neue Datei ausgewählt.
                          Ist die Gruppe nicht ausgeblendet funktioniert es auch, wenn keine neu Datei ausgewählt wird.

                          Im Onload ist lediglich dieser Code
                          {
                          var checkOutputFromSource = getElement("GUID"); /*checkcontrol*/
                          var checkIndividualOutput = getElement("GUID"); /*checkcontrol*/
                          var outputFileGroup = getElement("GUID"); /*simplegroup*/
                          var copyText = getElement("GUID"); /*simplegroup*/
                          var pdfText = getElement("GUID"); /* simplegroup*/
                          var outputFile = getElement("GUID"); /*filecontrol*/

                          if(l_bWordToPdf == "false")
                          {
                          if (l_bOutputFromSource == "false")
                          {
                          setCheckBox(checkIndividualOutput, true);
                          }
                          else
                          {
                          setCheckBox(checkOutputFromSource, true);
                          }
                          }


                          Vielen Dank nochmal für die Bemühungen.

                          Kommentar


                          • #14
                            Hallo Skorpion,

                            in dem Javascript-Code greifst du vermutlich per "var outputFile = getElement("GUID") auf das ausgeblendete Dateifeld und "outputFileGroup = getElement("GUID")" auf die ausgeblendete Gruppe zu.

                            Durch die bedingte Anzeige werden diese Felder aber gar nicht an das Web übermittelt, d.h. das Javascript fällt auf die Nase.
                            Dafür müsstest du dir also was anderes überlegen. Ist das der komplette Javascript-Code? Weil mit dem outputFileGroup und outputFile wird da ja eigentlich nichts mit gemacht.

                            Grüße
                            Snixx

                            Kommentar


                            • #15
                              Hallo Snixx,

                              im Onload ist nur dieser Code.
                              Unter Handler sehe ich noch in Actionhandler eine Datei hängen, aber ich weiß nicht wie ich da hinkomme.
                              Beim Draufklicken wird die Bearbeitungsoption nicht aktiviert. Sorry so toll bin ich da noch nicht.

                              Kann ich die Eingabe in der Maske noch irgendwie anders für eine bestimmte Gruppe verhindern?

                              Vielen Dank für Deine Hilfe.

                              Kommentar


                              • #16
                                Hallo Skorpion,

                                also wenn du beim Laden der Seite schon weißt, dass das Dateifeld ausgeblendet sein soll und auch ausgeblendet bleiben soll, dann ist die bedingte Anzeige genau das richtige, was du machen kannst.

                                Allerdings müsstest du halt mit dem Javascript-Code was machen, der kann nicht auf Elemente zugreifen, die per bedingte Anzeige ausgeblendet werden.
                                Der Javascript-Code den du gepostet hast, sieht irgendwie unvollständig aus, daher wird es schwer dir da einen Tipp zu geben.

                                Grüße
                                Snixx

                                Kommentar


                                • #17
                                  Hallo Snixx,

                                  der Javascript-Code war schon so wie gepostet in der Applikation enthalten. Ich bin noch nicht so toll in der Programmierung, aber mir kommt er auch unvollständig vor.
                                  Meiner Meinung nach gehört sich da etwas herausgenommen. Bin mir nicht sicher, ob das Auswirkungen hätte auf andere Funktionen. Wie ich vorher schon geschrieben habe, sehe ich noch unter Handler in Actionhandler eine Datei hängen, aber ich weiß nicht wie ich da hinkomme. Beim Draufklicken wird die Bearbeitungsoption nicht aktiviert.

                                  Was ist dieser Handler bzw. Actionhandler eigentlich?

                                  Grüße
                                  Skorpion

                                  Kommentar

                                  Lädt...
                                  X