Domino 9 und frühere Versionen > ND8: Entwicklung

Bestimmte Inhaltsteile eines Anhangs in ein Feld schreiben

(1/2) > >>

thomino:
Ein paar Ansätze habe im Forum und in der Designerhilfe gefunden, aber irgendwie kriege ich den Einstieg nicht hin.  ???

Ich habe eine Datenbank, in der bestimmte Mails landen. Angehängt ist immer eine XML-Datei, deren Inhalt per Agent (nach Maileingang) nach (ggf. mehrfach vorkommenden) Textstellen durchsucht werden soll:

Wenn die Stelle <DbtrAcct><Id><IBAN> in der Datei gefunden wird, sollen die nachfolgenden 22 Stellen in ein separates Feld der Maske geschrieben werden. Weitere Treffer sollen mit in das Feld (kommagetrennt) aufgenommen werden.

Der Angang soll möglichst nicht abgelegt werden und im Body-Feld verbleiben.

Kann mir jemand auf die Sprünge helfen?

Tode:
- Attachments lösen in temporäres Verzeichnis: Hier oder hier...
- Dann XML durchforsten mit NotesStream oder open und ReadLine
- doc.ReplaceItemValue() zum zurückschreiben...

Für mehr und konkretere Hilfe wirst Du schreiben müssen, was Du schon gemacht hast, und Code posten... Denn das Forum ist NICHT dafür da, um Dir fertigen Code zu liefern...

thomino:
Vielen Dank schonmal

Hier meine Code, wie er bislang aussieht

[Hab den Quatsch gelöscht, siehe nächsten Beitrag]

thomino:
N'abend zusammen!

Hab's jetzt grundsätzlich hinbekommen.

Wenn ich als Auslöser 'Wenn Dokumente eingefügt werden' wähle, funktioniert alles prima, als Auslöser 'Nach Eingang neuer Mail' tut sich nichts, obwohl der Agent gem. Protokoll losläuft.

Woran kann das liegen?


--- Code: ---Sub Initialize

Dim session As New NotesSession 
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection 
Dim doc As NotesDocument

Dim rtitem As Variant
Dim Text As String
Dim fileNum As Integer
Dim fundstelle As String
Dim iban As String
Dim feldwert As NotesItem

Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()

If doc.HasEmbedded Then   
Set rtitem = doc.GetFirstItem( "Body" )
ForAll o In rtitem.EmbeddedObjects
Sleep 1
If o.Type = EMBED_ATTACHMENT Then

'Datei temporär ablegen'
file = getTimeStamp(Now) & o.Source
Call o.ExtractFile( "\temp\" & file )

fileNum% = FreeFile()

Open "\temp\" & file For Input As fileNum%
Do Until EOF(1)
'Hier erfolgt die weitere Verarbeitung, bis das Ende der Datei erreicht ist.
Line Input #1, text$

fundstelle$ = InStr(text$, "<DbtrAcct><Id><IBAN>")

While fundstelle$ > 0
iban$ = iban$ & "," & Mid(text$, (fundstelle$ + 20), 22)
text$ = Mid(text$, (fundstelle$ + 42))
fundstelle$ = InStr(text$, "<DbtrAcct><Id><IBAN>")
Wend

Loop
Close fileNum%

'temporäre Datei löschen
Kill ( "\temp\" & file )
End If
End ForAll
'Variable iban das Feld übertragen
Set feldwert = doc.ReplaceItemValue( "vorg_ktonr", iban$ )

'Speichern
Call doc.Save( False, True )
End If

End Sub

Function getTimeStamp(dt As Variant) As Long
Dim dtEpoch As New NotesDateTime("1/1/1970 00:00:00")
Dim dtTemp As New NotesDateTime(Now)
dtTemp.LSLocalTime = dt
getTimeStamp = dtTemp.TimeDifference(dtEpoch)
End Function
--- Ende Code ---

Viele Grüße

Thomas

Werner Götz:
Ich glaub', Du bekommst das Dokument via session.DocumentContext und nicht über db.UnprocessedDocuments.

-Werner

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln