Ankündigung

Einklappen
Keine Ankündigung bisher.

VTL Include - Werte eines records können nicht ausgelesen werden

Einklappen
X

VTL Include - Werte eines records können nicht ausgelesen werden

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

  • VTL Include - Werte eines records können nicht ausgelesen werden

    Hallo,

    ich möchte in einem VTL Include per Velocity Werte aus dem drRecord auslesen.

    $drRecord.getValueHolder("GUID") bzw.
    $drRecord.getValueHolder("GUID")
    .getValue() geben null zurück, wenn ich
    die GUID des Datenfeldes meiner Datengruppe angebe.

    Mache ich etwas falsch? Warum bekomme ich die Werte des Records nicht? Wie muss ich die Werte korrekt auslesen?

  • #2
    Noch einen Hinweis: VTL include ist ein Record einer Shapedtable.

    Kommentar


    • #3
      getValueHolder erwartet als Parameter leider keine Guid, sondern den Namen der Kontrolle auf der Seite.
      Es gibt noch zwei Alternativen die ich gerne einsetze.
      getValueHolderByFieldGuid erwartet die Datenfeld-Guid und getValueHolderBySysident erwartet den Sysident einer Kontrolle.

      Kommentar


      • #4
        Das macht keinen Sinn oder ich verstehe es noch falsch! Ich schaue mir die UP Applikation "Intrexx Address Management" an. Dort hat es auch eine Shaped Table für die Adressen, genau wie ich sie aufgebaut habe. Ein Auszug aus dem Code:

        ***** Code aus der UP Applikation ******
        #set($VHStreet = $drRecord.getValueHolder("63E62CAFF3BA9BD0769CA596 62E042148BAB2E4E"))
        #set($Line1 = "")
        #if($VHStreet.hasValue() && $!VHStreet.getValue() != "")
        #set($Line1 = "${Line1}$!VHStreet.getValue(), ")
        #end
        ***** Code aus der UP Applikation ******

        Das funktioniert und die Werte werden angezeigt. Wenn ich das bei meiner Applikation mache, ist der Wert immer Null, auch wenn ich versuche getValueHolderByFieldGuid zu verwenden. Also wo liegt da der Unterschied?

        ***** Code aus meiner Applikation *****
        #set($VHcreatorId = $drRecord.getValueHolder("A287884ADD472377FA51A949 DC9620C7BBD03D94"))
        #set($VHcreatedOn = $drRecord.getValueHolder("23ADA21E1CAC6C213E1E9C0E 2792A1BF9B73159E"))
        #set($VHtext = $drRecord.getValueHolder("3A7E84D02E4A8F82D42538C5 7A2DA29A402B6A94"))
        #set($creatorId = "ID: $!VHcreatorId.getValue()")
        #set($createdOn = "ON: $!VHcreatedOn.getValue()")
        #set($text = "Text: $!VHtext.getValue()")

        $creatorID, $createdOn, $text
        ***** Code aus meiner Applikation *****

        In der Hilfe wird zwar auch auf getValueHolderByFieldGuid verwiesen:
        p_strName
        - The control name or control GUID. For a data field GUID please use the
        IRecord.getValueHolderByFieldGuid(String)
        method.

        Aber was soll das genau heissen "please use the IRecord …"?

        Und wie gesagt, in der UP Applikation funktioniert das direkte Abfragen mit getValueHolder ja auch.

        Bin etwas frustriert, sollte doch nicht so schwierig sein.
        Ich danke für Input.
        ***** Code aus meiner Applikation *****

        Kommentar


        • #5
          Achja, da in dem Hilfetext steht es ja eigentlich.
          Name oder GUID der Kontrolle. Möchte man die Guid des Datenfeldes verwenden muss getValueHolderByFieldGuid verwendet werden.
          IRecord ist die Klasse die hinter $drRecord steckt.
          Das sieht man, wenn man in der Doku die Java-Docs zu $drRecord anschaut.
          http://docs.intrexx.com/intrexx/vers...toverview.html -> $drRecord -> JavaDoc Link -> http://docs.intrexx.com/intrexx/vers...util/IRow.html
          Das ist die Klasse IRow, die wiederum de.uplanet.lucy.server.businesslogic.util.IRecord als Superinterface hat.

          Damit die Datenfeld-Guid in Velocity funktioniert, muss auf der Seite auf der das aufgerufen wird auch das Dateneld bekannt sein, bspw. indem auf der Seite im versteckten Bereich ein Ansichtsfeld dafür platziert wird.

          Kommentar


          • #6
            Sorry, ist mir noch nicht klar. Wenn ich eine Shaped Table mache, gebe ich dort die Detailseite an. Auf der Detailseite ist das VTL Include. Ansonsten gibt es auf der Seite keine Kontrollen oder Ansichtsfelder. Mir ist klar, dass ich Ansichtsfelder im versteckten Bereich platzieren kann. Jedoch ist das auf der entsprechenden Detailseite in der App "Intrexx Address Management" auch nicht der Fall. Es hat dort keine versteckten Ansichtsfelder. Also, warum funktioniert es dort?

            Zudem habe ich versucht meine Code wie folgt anzupassen:
            #set($VHcreatorId = $drRecord.getValueHolderByFieldGuid("A287884ADD472 377FA51A949 DC9620C7BBD03D94"))

            Aber auch das hat nichts gebracht. Die Werte sind immer noch NULL.

            Aber eben, für mich ist nicht klar, warum das in der UP eigenen Applikation so funktioniert und bei mir nicht.

            Kommentar


            • #7
              Zur Präzisierung. Der Code wie folgt, zeigt auch keinen Erfolg.

              #set($VHcreatorId = $drRecord.getValueHolderByFieldGuid("A287884ADD472 377FA51A949DC9620C7BBD03D94"))
              #set($VHcreatedOn = $drRecord.getValueHolderByFieldGuid("23ADA21E1CAC6 C213E1E9C0E2792A1BF9B73159E"))
              #set($VHtext = $drRecord.getValueHolderByFieldGuid("3A7E84D02E4A8 F82D42538C57A2DA29A402B6A94"))
              #set($creatorId = "ID: $!VHcreatorId.getValue()")
              #set($createdOn = "ON: $!VHcreatedOn.getValue()")
              #set($text = "Text: $!textVH.getValue()")

              $creatorId, $createdOn, $text

              Kommentar


              • #8
                Vermutlich sind dort noch irgendwelche Expert-Settings in den Eigenschaften der Seite definiert die dazu führen, dass alle Datenfelder im Kontext vorhanden sind, ohne Kontrollen platzieren zu müssen. Genau weis ich es aber nicht, da ich dia App gerade nicht parat habe.
                Ich versuche solche versteckten Settings zu vermeiden, da sie doch teilweise recht schwer auffindbar sind.

                Kommentar


                • #9
                  Ich habe in der
                  UP Applikation "Intrexx Address Management" bei der Seite mit dem VTL-Include unter "Settings" im Expert Modus die Einstellung *page.requiredDataFields.mode" gefunden, die auf "all" gesetzt ist. Dies habe ich in meiner Applikation nun auch so gemacht und damit können die Werte mittels getValueHolder("GUID") oder auch getValueHolderByFieldGuid("GUID") ausgelesen werden.


                  Vielen Dank für diesen Tipp (verstecke Settings)!

                  Kommentar

                  Lädt...
                  X