Domino 9 und frühere Versionen > Entwicklung

NotesDocument wird sporadisch nicht gefüllt

(1/3) > >>

two7:
Hallo,

ich habe ein Agenten geschrieben (der Code ist eventuell nicht optimal, versuch mich allerdings auch mit LS erst), der aus einem Mitarbeiterverzeichnis (eigene Entwicklung) aus gestartet wird. Das Dokument des Mitarbeiters wird geöffnet und anschließend der Agent gestartet.

Funktionsweise:
- Öffnen der Maildatenbank (momentan nur testdaten, später wird die datenbank anhand des notesnamen des userers aus dem mitarbeiterverzeichnis geladen)
- laden der ansicht ($All)
- öffnen der einzelnen dokumente (jedoch nur jene, die als memo gekennzeichnet sind und einen anhang besitzen)
- abrufen der anhänge (daten)
- ablegen der informationen in einer seperaten datenbank.

Mein Problem nun ist, dass der agent irgenwann abbricht mit der Meldung, dass die userdoc nicht gefüllt ist. Für mich ist das allerdings nicht verständlich, da ich ja mittels einem is Nothing abfrage ob die userdoc gefüllt ist oder nicht?

Habe auch versucht anhand der Dokumente, die geöffnet werden das Verhalten zu analysieren. Aber da ist nichts ungewöhnlich.


Eine Anmerkung hätte ich noch:
Wie zu sehen ist, sind weiter unten 3 Arrays fest dimensioniert. Die würde ich gerne über dynamische Arrays laufen lassen, hab es aber bis dato nicht hinbekommen. Vielleicht könnt ihr mir da den einen oder anderen Tipp geben.

Thx.


--- Code: ---

' Allgemein
Dim session As New NotesSession
Dim notesUsername As New NotesName(session.UserName)

' Mitarbeiterverzeichnis ++++++++++++++++++++++++++++++++++++++++++++++
Dim mvrzdb As NotesDatabase
Dim mvrzws As New NotesUIWorkspace
Dim mvrzuidoc As NotesUIDocument
Dim mvrzdoc As NotesDocument
Dim mvrzview As notesview

Set mvrzdb = session.CurrentDatabase
Set mvrzview = mvrzdb.GetView("Mitarbeiter nach Name")
Set mvrzuidoc = mvrzws.CurrentDocument
Set mvrzdoc = mvrzuidoc.Document

' Mitarbeiterdatenbank ++++++++++++++++++++++++++++++++++++++++++++++
Dim userws As New NotesUIWorkspace
Dim useruidoc As NotesUIDocument
Dim userview As NotesView
Dim userdoc As NotesDocument
Dim userdb As NotesDatabase
Dim userdbName As String

userdbName = "mail\testmaildb.nsf"
Set userdb = session.GetDatabase( "", userdbName )
Set userview = userdb.GetView("($All)")
Set userdoc = userview.GetFirstDocument

Dim rtitem As Variant
Dim sizeInBytes As Long
Dim sizeInMB As Long
Dim count As Integer
Dim sizeAll As Double
Dim aMailobjectTyp(10) As String
Dim aMailobjectName(10) As String
Dim aMailobjectSize(10) As String

' Neues LogDokument ++++++++++++++++++++++++++++++++++++++++++++++++
Dim newdb As  NotesDatabase
Dim newws As New NotesUIWorkspace
Dim newuidoc As NotesUIDocument
Dim newdoc As NotesDocument

Set newdb = session.GetDatabase( "", "log_maildb.nsf")

While Not (userdoc Is Nothing)
If (userdoc.form(0) = "Memo") Then
count = 0
sizeAll = 0
I = 0
Set rtitem = userdoc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
If Not (Isempty(rtitem.EmbeddedObjects)) Then
Forall mailobject In rtitem.EmbeddedObjects

i = i+1
count = count + 1
sizeInBytes = mailobject.FileSize
sizeInMB = sizeInBytes / ( 1024 )
sizeAll = sizeInBytes + sizeAll

aMailobjectTyp(i) = (Right(mailobject.Source,3))
aMailobjectName(i) = mailobject.Name
aMailobjectSize(i) = sizeInBytes
End Forall
End If
End If
End If

Set userdoc = userview.GetNextDocument(userdoc)

If (count > "0") Then
Set newdoc = newdb.CreateDocument

newdoc.nachname = mvrzdoc.nachname(0)
newdoc.vorname = mvrzdoc.vorname(0)
newdoc.mailbetreff = userdoc.Subject(0)
newdoc.anhaengeAnzahl = count
newdoc.anhaengeGroesseGesamt = sizeAll
newdoc.anhangTyp = aMailobjectTyp
newdoc.anhangName = aMailobjectName
newdoc.anhangGroesse = aMailobjectSize

Call newdoc.Save(True,True)
End If
Wend

End Sub

--- Ende Code ---

koehlerbv:
Hallo 27,

mit hoher Wahrscheinlichkeit hat die Ansicht in der Mail-Db einen "Schuss" und verzeichnet ein Dokument, welches in Wirklichkeit ein deletion stub, also eine gelöschte Note, darstellt. Mir ist sowas bisher nur in Mail-Dbs begegnet und dort immer im Zusammenhang mit Appointment-Dokumenten. Und nur in R5 - aber das würde hier ja gerade passen.

Der Programmierer kann schlechterdings Code schreiben und darauf vertrauen, dass eine Ansicht nicht korrupt ist. Er muss von vornherein auf sowas vorbereitet sein.

In Deinem Fall und wenn meine These Dein Problem trifft, dann solltest Du ein Dokument nicht nur auf "Isnothing" abfragen, sondern den "Härtetest" machen, ob Du es mit einem echten Dokument oder einem "Zombie" zu tun hast:
Ein gelöschtes Dokument enthält keine Items mehr, NotesDocument.Items gibt also EMPTY zurück.
Also: Erst prüfen, ob NotesDocument NOTHING ist, dann das Dokument auf enthaltene Items checken.

HTH,
Bernhard

klaussal:

--- Zitat ---Wie zu sehen ist, sind weiter unten 3 Arrays fest dimensioniert. Die würde ich gerne über dynamische Arrays laufen lassen, hab es aber bis dato nicht hinbekommen. Vielleicht könnt ihr mir da den einen oder anderen Tipp geben.

--- Ende Zitat ---

Du möchtest unter den Stichworten "Redim" , "Preserve", usw in der Designer-Hilfe lesen.

two7:

--- Zitat von: koehlerbv am 05.09.07 - 23:49:11 ---mit hoher Wahrscheinlichkeit hat die Ansicht in der Mail-Db einen "Schuss" und verzeichnet ein Dokument, welches in Wirklichkeit ein deletion stub, also eine gelöschte Note, darstellt.

--- Ende Zitat ---

nun habe ich mal die mails in eine neu erstellte maildatenbank kopiert, aber daran lag es wohl nicht.


--- Zitat ---Also: Erst prüfen, ob NotesDocument NOTHING ist, dann das Dokument auf enthaltene Items checken.

--- Ende Zitat ---

ich hab mal nun noch die abfrage

--- Code: --- If (Not(Isempty(userdoc.items)))  ....
--- Ende Code ---
miteingebaut, aber gebracht hat es leider nicht. Wenn ich den Debugger mitlaufen lasse, so läuft er über die Abfrage und bricht dann wieder ab, da userdoc nicht gefüllt ist. :-(

koehlerbv:
Wenn "userdoc" nicht "gefüllt" ist, dann wäre es EMPTY.

Was ergibt eine Abfrage auf IsValid?

Bernhard

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln