Hallo zusammen,
wir haben einen Agent im Einsatz, welcher die Daten einer Email inklusive der Anhänge
in ein bestimmtes Verzeichnis auf die Festplatte schreibt und noch paar Sachen macht.
Kurze Beschreibung SOll:
Nun wollen wir den Usern die Möglichkeit geben, in einem Zwischenschritt selbst zu bestimmen
welche der Anhänge der Email exportiert werden sollen.
Ich hatte da an ein Form "SaveAttachments" gedacht, welches in einer Listbox alle
in der Email vorkommenden Anhänge auflistet und der Benutzer markiert die zu exportierenden
Anhänge. Im Agent müsste ich dann auslesen können, welche Anhänge markiert worden sind und
diese Info entsprechend weiter verarbeiten.
Kurze Beschreibung Ist:
Allgemein haben wir schon die Zwischenlösung, das pro Anhang eine MsgBox aufgeht, über welche
der Benutzer mit Ja oder Nein bestimmen kann, ob dieser Anhang exportiert werden soll. Das ist
natürlich nicht so schön wie die oben gewünschte Vorgehensweise.
Fragen:
Ist das generell möglich?
Wie greif ich vom Agent auf die Listbox im Form zu, um dieses auszulesen, bzw. wie übergebe
ich die Listbox oder zumindest die selektierten Anhänge zurück an den Agent?
Beispielcode:
Ein Form "SaveAttachments" mit einem Field als Listbox (multiple values) und einem Button Absenden existiert.
Function AttsDetach2 (doc As NotesDocument, path As String)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim newDoc2 As NotesDocument
Dim errMsg$
'** create a new document
Dim dbName$, dbServer$
If CONVERT_DB_NAME2="THIS" Then
dbName = doc.ParentDatabase.FilePath
dbServer = doc.ParentDatabase.server
Else
dbName = CONVERT_DB_NAME2
dbServer = CONVERT_DB_SERVER2
End If
Set db = session.GetDatabase(dbServer, dbName)
If Not db.IsOpen Then
errMsg = dbServer + "!!" + dbName + ": Datenbank kann nicht geöffnet werden"
Goto NormalExit
End If
Set newDoc2 = New NotesDocument(db)
newDoc2.Form = "SaveAttachments" <- Die Zeile wird noch ausgeführt.
newDoc2.open
If IsTest Then Print "Neue Func AttsDetach2 ends" <- Die Zeile wird nicht mehr ausgeführt.
NormalExit:
If errMsg <> "" Then Msgbox errMsg, 16, db.Title+" Fehler"
Exit Function
End Function
Bereits jetzt vielen Dank für eure Zeit und Antworten
Pascal
Hallo und vielen Dank für die freundliche Begrüßung :)
Hab jetzt mal folgende Function Test eingebunden:
Function test
Dim workspace As New NotesUIWorkspace
Dim notesUIView
Dim UB, C1
Call workspace.DialogBox _
( "SaveAttachments", True, True, True, True, _
False, False, "Anhänge speichern" )
Set notesUIView = workspace.CurrentView
Dim aUpdList As Variant
If NotesUIView.Body.listbox1.Count > 0 Then
Msgbox "Count > 0"
UB = NotesUIView.Body.listbox1.Count - 1
Redim aUpdList(UB)
For C1 = 0 To UB
NotesUIView.Body.listbox1.CurrentSelection = C1
aUpdList(C1) = NotesUIView.Body.listbox1.Text
Next
End If
End Function
Vielen Dank für deinen Beitrag und deinen Wegweiser.
Damit sollte ich weiter kommen.
Pascal
Hallo zusammen,
habe jetzt etwas rumprobiert und meine auf der richtigen
Fährte zu sein.
Ich erstelle im Backend ein neues NotesDocument.
Diesem weise ich per New NotesItem Werte zu.
Anschließend öffne ich im Frontend mein Form.
Aber das Item im Frontend ist trotzdem leer :(
Hier mal der Code dazu:
<snip aus Initialize>
CONVERT_DB_SERVER = ""
CONVERT_DB_NAME = "THIS"
CONVERT_FORM2 = "SaveAttachments"
CONVERT_FIELD2 = "listbox1"
</snip>
Dim db As NotesDatabase
Dim newDoc As NotesDocument
Dim workspace As New NotesUIWorkspace
Dim textListItem As NotesItem
Dim newValues( 0 To 2 ) As String
'...set value of newDoc...
newValues( 0 ) = "Bicycle"
newValues( 1 ) = "Train"
newValues( 2 ) = "Foot"
Dim dbName$, dbServer$
If CONVERT_DB_NAME="THIS" Then
dbName = doc.ParentDatabase.FilePath
dbServer = doc.ParentDatabase.server
Else
dbName = CONVERT_DB_NAME
dbServer = CONVERT_DB_SERVER
End If
Set db = session.GetDatabase(dbServer, dbName)
If Not db.IsOpen Then
errMsg = dbServer + "!!" + dbName + ": Datenbank kann nicht geöffnet werden"
Goto NormalExit
End If
Set newDoc = New NotesDocument(db)
newDoc.Form = CONVERT_FORM2
FieldName = CONVERT_FIELD2
Set textListItem = New NotesItem (newDoc, FieldName, newValues )
Set textListItem = newDoc.ReplaceItemValue("Authors", Evaluate({@UserName}, newDoc))
textListItem.IsAuthors = True
Set textListItem = newDoc.ReplaceItemValue("$PublicAccess", "1")
Call newDoc.Save( True, True )
Call workspace.DialogBox _
("SaveAttachments", True, True, True, True, _
False, False, "Anhänge speichern" ,newDoc)
Das Form "SaveAttachments" geht zwar auf, aber die Listbox ist leer.
Irgendwie find ich den Fehler nicht. Mit dem Debugger komm ich auch nicht dahinter...
Wobei es mich wundert, dass im Debugger->Variables->NEWDOC vier Items auftauchen:
FORM, listbox1, Authors und $PublicAccess.
Müsste nicht unter FORM die listbox1 gelistet sein??
Über Tipps und Hinweise freue ich mich.
Pascal
Folgendes sollte auch funktionieren:
Call newDoc.ReplaceItemValue( "Form" , CONVERT_FORM2 )
Call newDoc.ReplaceItemValue( CONVERT_FIELD2 , newValues ) 'Feld in dem die Auswahlmöglichkeiten hinterlegt werden
Call newDoc.ReplaceItemValue( CONVERT_FIELD3 , newValues(0) ) 'Feld in dem der Benutzer die Auswahl trifft
...
Call newDoc.Save( True, True )
In der Maske "SaveAttachments" sollten mindestens zwei Felder sein:
Eins in dem die Auswahlmöglichkeiten hinterlegt werden (CONVERT_FIELD2 ,verborgen) und eins über das der Benutzer seine Auswahl trift (CONVERT_FIELD3, bearbeitbar , ..). In dem zweiten Feld muss als Auswahlformel der Feldname des Feldes rein, in dem die Auswahlmöglichkeiten hinterlegt sind.
Hallo zusammen,
nachdem ihr mich so toll unterstützt habt und ich ohne eure Hilfe
wahrscheinlich immer noch im Dunkeln tappen würde, möchte ich
euch als erstes über den Erfolg informieren!
Es läuft nun! :) ;) :D ;D
Hier nochmal für alle fleißigen, die evtl. mal ein ähnliches Problem
haben, der Ablauf:
per arrAtt = Evaluate({@Attachmentnames}, doc)
werden alle Anhänge einer Email in einem Array gespeichert.
nur wenn das Array ungleich leer ist geht es weiter
mit Set newDoc = New NotesDocument(db)
wird ein neues (Backend-) Document erstellt.
Mit Call newDoc.ReplaceItemValue( "Form" , CONVERT_FORM2 )
Call newDoc.ReplaceItemValue( CONVERT_FIELD2 , arrAtt ) 'Feld in dem die Auswahlmöglichkeiten
'hinterlegt werden, unsichtbar!
Call newDoc.ReplaceItemValue( CONVERT_FIELD3 , arrAtt(0) ) 'Feld in dem der Benutzer die Auswahl
'trifft
werden auf dem Backend Document ein Formular mit zwei Feldern erstellt. Insgesamt 3 Items.
Wobei CONVERT_XXXXX globale Variablen sind und einmal mit dem originalen Namen
der Form und der beiden in der Form enthaltenen Felder belegt sind.
mit Call newDoc.Save( True, True )
wird das Document gespeichert.
Anschließend wird die Function MyDialogBox aufgerufen:
Call MyDialogBox(newDoc, path, doc)
newDoc (=BackendDoc), path (=interner Zielpfad), doc (=orig. Email)
Hier noch die Function MyDialogBox:
Function MyDialogBox(newDoc As NotesDocument, path As String, doc As NotesDocument)
'** Das übergebene newDoc wird per DialogBox mit dem Form SaveAttachments (=CONVERT_FORM2)
'** verbunden. Das Form SaveAttachments wird geöffnet und der Benutzer wählt die zu speichernden
'** aus.
'** Die gewählten Anhänge werden in das in der SYSPM konfigurierte TEMP Verzeichnis gespeichert
'** und die Steuerdatei "sXML" entsprechend befüllt.
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim object As NotesEmbeddedObject
Dim myPath$, newfileName$
Dim valueArray
'Variante 2: Ein Fenster mit allen Anhängen bringen. Nur die angehakten werden exportiert
Call workspace.DialogBox _
(CONVERT_FORM2, True, True, True, True, _
False, False, "Anhänge speichern" ,newDoc)
If istest Then valueArray = newDoc.GetItemValue( CONVERT_FIELD2 )
If istest Then Msgbox "1. Wert vom Array listbox1: " & valueArray(0)
valueArray = newDoc.GetItemValue( CONVERT_FIELD3 )
If istest Then Msgbox "1. Wert vom Array listbox2: " & valueArray(0)
Forall values In valueArray
myPath = path+"\" ' + Str(cnt+1) + "\"
Set object = doc.GetAttachment(values)
If Not object Is Nothing Then
newfileName = fineFileName(values)
Call object.ExtractFile( myPath+newfileName)
sXML = sXML & newfileName & "|" & Chr$(13) & Chr$(10)
cnt =cnt + 1
Else
Print values + " is not a valid Attachment"
End If
End Forall
'\Variante 2
End Function
Das einzigste was mir nicht gefällt, ist, dass es auf dem Form SaveAttachments
ein nicht sichbares Feld listbox1 gibt. Was ich auch nur dadurch unsichtbar bekommen habe,
dass ich den Rahmen auf <none> gesetzt habe.
Zudem ist das Form viel zu groß für die kleinen items listbox1 und listbox2...
Aber es scheint zu laufen und morgen wird ausführlich getestet!!!
Danke und Gruß
Pascal