Autor Thema: Lotus Script und Listbox in Form  (Gelesen 7446 mal)

Offline PascalB

  • Frischling
  • *
  • Beiträge: 5
Lotus Script und Listbox in Form
« am: 11.09.09 - 09:58:34 »
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.
Code
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

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Lotus Script und Listbox in Form
« Antwort #1 am: 11.09.09 - 10:32:21 »
Zitat
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?

Hallo

Willkommen im Forum.

generell ist es möglich ;-) Du musst über workspace.Dialogbox dein "Listbox" in der Maske ansprechen.
Vorher musst du ein tempräres backend-Document erstellen, dass du der Dialogbox übergibst und in das
du die Werte (Attachmentnames) reinschreibst. Wenn der Benutzer was gewählt hat (in der Dialogbox) musst du das tem. Backend-DOc auswerten.

Beispiele dafür gibt es hier im Forum und in der DesignerHelp.
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline PascalB

  • Frischling
  • *
  • Beiträge: 5
Re: Lotus Script und Listbox in Form
« Antwort #2 am: 11.09.09 - 10:38:48 »
Hallo und vielen Dank für die freundliche Begrüßung :)

Hab jetzt mal folgende Function Test eingebunden:

Code
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

Offline PascalB

  • Frischling
  • *
  • Beiträge: 5
Re: Lotus Script und Listbox in Form
« Antwort #3 am: 11.09.09 - 17:26:47 »
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:

Code
        <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

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Lotus Script und Listbox in Form
« Antwort #4 am: 11.09.09 - 20:09:41 »
Ich bin gerade verwirrt.
Du setzt dreimal dein TextlistItem, aber als verschiedene Items?
Was ist denn da listbox1? das CONVERT_FIELD2?

ich sehe da gerade 4 Items: Form, CONVERT_FIELD2, Authors und $PublicAccess

und es ist korrekt, dass alle 4 unter deinem newDoc erscheinen, Form steht hier für ein Item, in dem der Maskenname abgespeichert ist.

Grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Lotus Script und Listbox in Form
« Antwort #5 am: 14.09.09 - 07:15:23 »
Folgendes sollte auch funktionieren:

Code
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.
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline PascalB

  • Frischling
  • *
  • Beiträge: 5
Re: Lotus Script und Listbox in Form
« Antwort #6 am: 14.09.09 - 17:34:14 »
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
Code
 	arrAtt = Evaluate({@Attachmentnames}, doc) 
werden alle Anhänge einer Email in einem Array gespeichert.

nur wenn das Array ungleich leer ist geht es weiter
Code
 	If arrAtt(0) <> "" Then 

mit
Code
 Set newDoc = New NotesDocument(db) 
wird ein neues (Backend-) Document erstellt.

Mit
Code
 	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
Code
 		Call newDoc.Save( True, True ) 
wird das Document gespeichert.

Anschließend wird die Function MyDialogBox aufgerufen:
Code
 		Call MyDialogBox(newDoc, path, doc) 
newDoc (=BackendDoc), path (=interner Zielpfad), doc (=orig. Email)


Hier noch die Function MyDialogBox:
Code
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

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Lotus Script und Listbox in Form
« Antwort #7 am: 14.09.09 - 18:21:22 »
mit
Code
 		Call newDoc.Save( True, True ) 
wird das Document gespeichert.


muss aus meiner Sicht nicht unbedingt gespeichert werden

   
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

Wenn Du die Felder in der Dialogbox-Maske in eine Tabelle packst, dann kannst Du mit
   Call workspace.DialogBox _
   (CONVERT_FORM2, True, True, True, True, _
   False, False, "Anhänge speichern" ,newDoc, True)

die Größe der DiaBox anpassen.

hth

Thomas

Offline PascalB

  • Frischling
  • *
  • Beiträge: 5
Re: Lotus Script und Listbox in Form
« Antwort #8 am: 15.09.09 - 15:35:34 »
Hallo und danke für den Tipp,

nur an Tabellen wage ich mich derzeit noch überhaupt nicht.

Vor allem, da jetzt, wo es so schön läuft, noch drei Buttons hinzu kommen sollen.
   "Alle", "Keine" und "Invert".
Diese Buttons sollen eben alle Einträge oder keine Einträge selektieren oder die aktuelle Selektion invertieren.

Den Button "Keine" hab ich schon. Aber dann ist meine listbox2 leer und ich komm nicht mehr an die Werte. Hab auch schon versucht, diese in der unsichtbaren listbox1 zwischen zu speichern, bzw. in ner public variable, alles gescheitert.
Wie würdet ihr das machen?

Danke und Gruß
Pascal

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz