Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mariab am 14.08.07 - 11:03:20

Titel: Mehrere Werte in ein Feld schreiben
Beitrag von: mariab am 14.08.07 - 11:03:20
Hallo,

habe folgenden Code der die Dateigrösse ermittelt. Nun möchte ich die Grösse nicht mittels Messagebox ausgeben sondern in ein Feld (D_Info) schreiben.

Code
Sub Click(Source As Button)
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim rt As NotesRichTextItem
	Dim item As NotesItem
	
	Set uidoc = ws.CurrentDocument
	Set doc = uidoc.Document
	Set rt = doc.GetFirstItem( "D_Doku" )
	
	If rt Is Nothing Then
		Msgbox "Kein Dateianhang vorhanden"
		Exit Sub
	End If
	
	Forall o In rt.EmbeddedObjects
		werte = o.Filesize
		doc.D_Info = werte
	End Forall
	
End Sub

Wenn ich nun zwei Dateianhänge habe so erscheint die Größe des ersten Anhangs, dann wird dieser vom zweiten überschrieben. Wie kann ich beide Werte anzeigen?
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: Axel am 14.08.07 - 11:11:49
Du musst die Werte in ein Array oder eine Liste schreiben.


Axel
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: mariab am 14.08.07 - 11:42:55
Ok, aber wie. Hast du hier ein paar Lösungshilfen. Bin gerade dabei mich etwas mehr mit LS auseinanderzusetzen
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: Axel am 14.08.07 - 11:55:00
Mal so ins Balue gedacht und ungetestet.

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim rt As NotesRichTextItem
   Dim item As NotesItem
                Dim sizes() As long
                Dim idx As Integer
   
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   Set rt = doc.GetFirstItem( "D_Doku" )
   
   If rt Is Nothing Then
      Msgbox "Kein Dateianhang vorhanden"
      Exit Sub
   End If
   
                idx = 0
   Forall o In rt.EmbeddedObjects
                                Redim Preserve sizes(idx) = o.Filesize
                                idx = idx + 1
   End Forall
   
            doc.D_Info = sizes

End Sub

Das Redim Preserve ist zwar ein Performance-Killer, aber in Anbetracht das wahrscheinlich nie hunderte von Anhängen vorhanden sind, ist das hier nicht so kritisch.

Axel
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: mariab am 14.08.07 - 12:14:39
Danke, erhalte aber im Designer einen Fehler bei der Zeile:
Code
Redim Preserve sizes(idx) = o.Filesize
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: Axel am 14.08.07 - 12:20:30
Sorry.   :-\  So kann das auch nicht gehen

...
Forall o In rt.EmbeddedObjects
                                Redim Preserve sizes(idx)
                                sizes(idx) = o.Filesize
                                idx = idx + 1
End Forall
...

So muss es aussehen.


Axel

Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: mariab am 14.08.07 - 12:28:49
OK, danke jetzt klappts.

Eine Frage noch zum Array bzw. zu ForAll.
Könnte man anstelle der Forall Anweisung auch eine For Schleife einbauen um auf das Filesize zu gelangen? Habe es versucht aber irgendwie Blick ich noch nicht ganz durch
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: klaussal am 14.08.07 - 12:30:54
Definiere bitte "irgendwie"...
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: Axel am 14.08.07 - 12:31:17
Nein. Man hat keine Möglichkeit die Anzahl der Objekte auszulesen. Somit hast du keinen Maximalwert für die For - Schleife.

Die ForAll-Schleife ist hier schon das Mittel der Wahl.

Axel
Titel: Re: Mehrere Werte in ein Feld schreiben
Beitrag von: Glombi am 14.08.07 - 12:47:31
Wenn die Anhänge nur in einem Rich Text Feld sind, ginge es auch so:

Dim s As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
dim ret_eval as variant

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

ret_eval = Evaluate( |FIELD D_Info := @AttachmentLengths;@True|, doc )


Andtreas