Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung - XPages => Thema gestartet von: Sutpen am 06.08.12 - 10:13:15
-
Hallo zusammen,
ich habe mal eine Frage bzgl computed column values. Vielleicht könnt ihr mir einen Tipp geben, ob das überhaupt geht, was ich mir vorstelle:
Ich habe zwei views in der Datenbank. In beiden views habe ich eine Spalte in der jeweils gleiche Werte drinstehen.
View1:
Spalte 1 - Werte A
Spalte 2 - Werte B
View2:
Spalte 1 - Werte A
Spalte 2 - Werte C
Spalte 3 - Computed
Ist es möglich das wenn in einer Zeile die Werte aus Spalte 1 / Werte A übereinstimmen, das in view 2 in Spalte 3 der Wert aus View 1 Spalte 2 / Wert B eingetragen wird?
Ich weiß, wie ich die beiden Spalten gegeneinander abgleichen kann, nur fehlt mir momentan ein Ansatz oder eine Lösung, wie ich dann in der jeweiligen Zeile in View2 das richtige ausgebe. Leider finde ich hier auch nichts passendes im Internet / Forum zu.
Danke für eure Hilfe.
Gruß
René
-
Hallo,
Etwas verwirrend.
Woher kommen denn die in Ansicht 1 - Spalte 1 angezeigten Werte (welche Form, welches Feld in der Form)?
Und woher kommen die in der Ansicht 2 - Spalte 1 angezeigten Werte (welche Form, welches Feld)?
Ansonsten weiss ich noch nicht so genau, was Du ueberhaupt erreichen willst.
Andreas
-
// key from column A, view2
var key = viewRow.getColumnValue("title of a column");
// lookup key in view A ,view 1 and return column B
var lookup = @DbLookup(@DbName(), "viewname", key, 2);
return lookup
in etwa so ...
-
Zu dem Hintergrund für meine Anfrage:
Erstmal ich bin noch recht jungfreulich im Thema und habe wahrscheinlich noch nicht die optimalsten Ideen, um etwas zu lösen. Momentan bin ich an einer Datenbank, wo Events eingetragen werden, zu welchen sich Benutzer eintragen können. Die Events sind jedoch Platztechnisch beschränkt.
Beim Anlegen eines solchen Events (Form1) wird im Hintergrund ein zweites Dokument erzeugt (Form 2). In beiden Dokumenten steht die Kursnummer - Werte A / Spalte 1. In Form 2 wollte in Spalte 2 / Werte B ich die freien Sitzplätze speichern.
Dies hat den Hintergrund: Wenn ich dies in dem eigentlichen Eventdokument speichere und mehrere Personen gleichzeitig auf das Dokument zugreifen, um sich ein oder auszutragen, wird sich das Dokument vermehren, da ich bei jeder Änderung das Dokument ja speichern muss. Wenn jemand teilnehmen klickt, wird ein drittes Dokument (Form 3) erzeugt mit Kursnummer und Teilnehmernamen und in Form 2 die Anzahl der Plätze um 1 reduziert bzw. beim Abmelden das Dokument mit der Kursnummer und dessen Namen wieder gelöscht und in Form 2 die Anzahl der Sitzplätze wieder erhöht.
Wie gesagt, wahrscheinlich nicht der beste Weg, aber mit ein wenig Errorhandling finde ich das für ca 400 User eine akzeptable Lösung. Die Wahrscheinlichkeit das zwei Personen genau gleichzeitig teilnehmen klicken, ist recht gering.
@ Ulrich:
Ähnliches habe ich auch schon gefunden bzw. eine nette Anleitung für computed values in der gleichen view auf der XPage ( http://www-10.lotus.com/ldd/ddwiki.nsf/dx/VideoXPagesViewControlDisplayHTMLComputedCol.htm ).
Bei deiner Lösung habe ich noch ein Problem: Auf der XPage wo die view brechnet wird, habe ich nur View2. Wie kriege ich den key?
Ich hatte folgendes gefunden, um mir eine ganze Spalte zu holen. Mit dem getColumnValue kriege ich dann jedoch eine Fehler.
var v:NotesView = database.getView("vwCourse");
var vcourse:java.util.Vector = v.getColumnValue("Seats");
-
So wie ich es verstanden habe, ist key doch Value A von view2. Und die lookup spalte ist ColA view 1
-
ja das ist richtig. Bei dem key bzw eher bei viewRow habe ich dann momentan noch ein Problem, denn bei
var v:NotesView = database.getView("vwCourse");
var vcourse:java.util.Vector = v.getColumnValue("Seats");
kriege ich einen TypFehler:
TypeError] Error calling method 'getColumnValue(string)' on an object of type 'lotus.domino.local.View [Static Java Interface Wrapper, lotus.domino.local.View: lotus.domino.View]
Hier fehlt mir irgendwie noch ein Baustein.
-
var key = viewRow.getColumnValue("title of a column");
wobei du natürlich viewRow antsprechend deinem eigenen Wert ( var= ) setzen musst
"title of a column" = programmatischer Name von col A in view 2
-
Ich steh momentan echt auf den Schlauch, kannst du mir das vielleicht etwas genauer erklären? Woher ich das viewRow nehme, da hängt es bei mir grade.
Ich kann mir über database.getView("vwCourse") die View holen die ich brauche. Nur wenn ich jetzt darauf getColumnValue("Titel der Spalte") anwende, bekomme ich den o.g. Typfehler.
-
z,B.
<xp:dataTable id="view_IE_WillFuckItUp" rows="15"
styleClass="coisDataTable" var="viewRow" value="#{iefail}"
partialExecute="true" partialRefresh="true" rowClasses="oddrow, evenrow"
-
Dank Dir.
War die ganze Zeit wohl in eine andere Richtugn am denken, aber letztendlich klappts :-)
Danke