Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: kathalena am 02.09.03 - 10:52:43
-
hallo.
habe folgendes problem:
im code (siehe unten) versuche ich, docs nach zwei schluesseln in ner ansicht zu finden (mit getdocumentcollection - mit nem keyarray). das sollte doch eigentlich funktionieren.
habe zur kontrolle 2 msgboxes eingebaut... davon springt aber nur die zweite an (also bei getfirstdocument), die bei der erstellung der documentcollection nicht!
was kann das sein, oder mach ich einen fehler wenn ich das mit einem keyarray mache?
mfg, kathalena
Set ansicht1=db.GetView("AlleMA")
If Isnull(ansicht1) Then
Msgbox "Die Ansicht 'AlleMA' konnte nicht geöffnet werden"
Exit Sub
End If
keys (1) = ma
keys (2) = dat
Msgbox keys(1) & " " & " " & keys(2)
Set dc=ansicht1.getAllDocumentsByKey(keys, True)
If dc Is Nothing Then
Msgbox "argl"
End If
Set doc=dc.GetFirstDocument
If doc Is Nothing Then
Msgbox "arglargl"
Else
ab_dauer1=doc.GetItemValue("ABStunden")
Msgbox ab_dauer1
If Isnumeric(ab_dauer1(0)) Then
ab_dauer=ab_dauer+ab_dauer1(0)
End If
Set doc=dc.GetNextDocument(doc)
Msgbox ab_dauer
End If
-
Hi,
welche Messagebox wird bei GetFirstDocument angezeigt ?
Was mir aufgefallen ist, dass hier
keys (1) = ma
keys (2) = dat
jeweils die Anführungszeichen fehlen,
also so
keys (1) = "ma"
keys (2) = "dat"
oder sind das Variablen?
Ist deine Ansicht "AlleMA" in den ersten beiden Spalten kategorisiert bzw. sortiert?
Axel
-
bei getfirstdocument wird ne messagebox "arglargl" angezeigt (hab nur irgendwas reingschrieben, ums zu erkennen)
ma und dat sind variablen (die werden aus dem gerade geoeffneten dokument geholt).
die ersten beiden spalten der ansicht sind sortiert (nicht kategorisiert)
mfg, kathalena
-
Hi,
von welchem Typ sind denn die beiden Variablen. Es sollten Stringvariablen sein.
Versuch auch mal testhalber in das Keyarray feste Werte einzutragen, die wirklich Dokumente zurückliefern müssen, ob's dann funktioniert.
Axel
-
jo, sind string.
Dim keys( 1 To 2 ) As String
also auch wenn ich nen festen wert eintrage, kommt die meldung, dass er kein document findet (ich finds vor allem seltsam, dass keine meldung bezueglich der documentcollection kommt...)
kathalena
-
Stimmen Deine Spaltenwerte mit dem Datentyp des Arrays überein ? Steht doch auch Text anstelle Datum?
Statt auf dc = nothing zu prüfen, mußt Du dc.count = 0 checken.
HTH,
Bernhard
-
mhm. mit dc.count = 0 krieg ich beide meldungen.
die spaltenwerte sind alle text.
aber die werte sind dieselben. er muesste was finden. ich kapier das nicht.
kathalena
-
Hi,
ich hab mal auf die Schnelle eine kleine Test-DB zusammengestrickt.
Hat auf Anhieb funktioniert. Schau mal im Anhang.
Sind die Feldtypen nach denen gesucht werden soll ebenfalls vom Typ Text? Wie weißt du denn die Werte den Key-Variablen zu?
Im Moment fällt mir sonst nix weiter dazu ein.
Axel
-
Set uidoc=ws.CurrentDocument
ma = uidoc.FieldGetText("ZIDMA")
dat = uidoc.FieldGetText("ABDatum")
und dann eben
keys (1) = ma
keys (2) = dat
habs aber auch schon direkt versucht, ging auch nicht.
kathalena
-
so. ich hab keinen schimmer warum (irgendwie peinlich, oder? :-[ ) aber es funktioniert jetzt.
ich hab im prinzip nichts geaendert..
die wege des notes sind unergruendlich ;)
kathalena
-
... nicht fragen - geniessen ;)
ata
-
@ata:
Besser nicht geniessen - nix ist schlimmer, als daß etwas funktioniert, und man weiß nicht, warum ;-)
@kathalena:
"Im Prinzip nichts gemacht" - also doch was gemacht ? Da könnte sich nachforschen lohnen, bevor das noch mal passiert ...
Kleiner Tip: Wenn etwas nicht funktioniert, was nach allem Anschein aber funktionieren sollte, dann den Designer beenden, die (geänderte) DB ebenfalls (in allen Instanzen) und es dann nochmal probieren. Manchmal bekommt der Client Änderungen im Designer nicht mit ...
Und - aus eigener Erfahrung - sicherstellen, daß man nicht im Designer in Replik A Änderungen macht und sie im Client in Replik B überprüft (ohne zu replizieren;-)
Ciao,
Bernhard
-
@ata:
Besser nicht geniessen - nix ist schlimmer, als daß etwas funktioniert, und man weiß nicht, warum ;-)
... na dann viel Spaß - ich forsche das eine oder andere Mal nach, aber einiges bleibt unerklärlich in den Tiefen von Notes begründet und hat nichts mit Logik oder System zu tun - und dann gilt das von mir gesagte...
ata
-
hehe. danke ihr zwei!
ich weiss inzwischen schon was ich gemacht habe, aber es ist unlogisch (zumindest meiner meinung nach, aber ich kenn mich ja net aus):
unten ein ausschnitt aus dem code... ich verwende eigentlich bei beiden abfragen die gleich art und weise (mit getdocumentbykey bzw getalldocumentsbykey). einmal setz ich dir "zaehl"variable auf null und einmal nicht. einmal funktionierts ohne (oben) und unten funktionierts nur mit und das obwohl ich den selben code in hellviolett auch wo anders OHNE das auf null setzen verwendet hab (und dort gehts).
kann mir das mal wer erklaeren?
mfg, kathalena
Set ansicht=db.GetView("AZalle")
If Isnull(ansicht) Then
Msgbox "Die Ansicht 'AZalle' konnte nicht geöffnet werden"
Exit Sub
End If
Set doc2=ansicht.GetDocumentByKey(ma, True)
If doc2 Is Nothing Then
Msgbox "Sie haben für diesen Tag keine Arbeitszeiten eingetragen."
Exit Sub
Else
If wday=2 Then
az_dauer1=doc2.GetItemValue("AZ_Montag_Dauer")
Elseif wday=3 Then
az_dauer1=doc2.GetItemValue("AZ_Dienstag_Dauer")
Elseif wday=4 Then
az_dauer1=doc2.GetItemValue("AZ_Mittwoch_Dauer")
Elseif wday=5 Then
az_dauer1=doc2.GetItemValue("AZ_Donnerstag_Dauer")
Elseif wday=6 Then
az_dauer1=doc2.GetItemValue("AZ_Freitag_Dauer")
Else
az_dauer1(0)="0"
End If
az_dauer=az_dauer + az_dauer1(0)
End If
'bereits abgelieferte Arbeitsberichte von mitarbeiterIn an Datum finden
Set ansicht1=db.GetView("ABalle")
If Isnull(ansicht1) Then
Msgbox "Die Ansicht 'ABalle' konnte nicht geöffnet werden"
Exit Sub
End If
keys(1) = uidoc.FieldGetText("ZIDMA")
keys(2) = uidoc.FieldGetText("ABDatum")
Set dc=ansicht1.getAllDocumentsByKey(keys)
If dc.count = 0 Then
Msgbox "Sie haben für den " & dat & " keine Arbeitszeiten eingetragen. Es fehlen Arbeitsberichte im Umfang von " & az_dauer & " Stunden."
Exit Sub
End If
Set doc=dc.GetFirstDocument
ab_dauer=0
While Not doc Is Nothing
ab_dauer1=doc.GetItemValue("ABStunden_1")
If Isnumeric(ab_dauer1(0)) Then
ab_dauer=ab_dauer+ab_dauer1(0)
End If
Set doc=dc.GetNextDocument(doc)
Wend