Hallo zusammen,
nach langer Notes-Abstinenz muss ich zur Zeit doch mal wieder etwas programmieren.
Grob gesagt sollen in einer Anwendung Fotos gepflegt werden können. Hierfür sollen diese als Attachments in verschiedene Richtextfelder eingefügt werden.
Dazu konnte ich hier ja auch einiges finden. Nachdem ich dann aber auch auf das Phänomen gestoßen bin, dass das Attachment unter Benutzung von LS nicht im angesprochenen RichText, sondern unter dem Dokument hinzugefügt wird, habe ich mich dann an der Variante mit dem Einfügen im PostOpen versucht. Das sah zu Beginn sehr vielversprechend aus und hatte durch den Einsatz der Formeln auch den positiven Nebeneffekt, dass das entsprechende Dateiicon dargestellt wird.
Allerdings durfte ich nun feststellen, dass offenbar meine Änderungen im Postopen nicht gespeichert werden... In der Ansicht ist weiterhin das Feld mit dem Dateinamen gefüllt und das RichTextfeld leer.
Zur Verdeutlichung vielleicht kurz einige Code-Ausschnitte:
Code im PostOpen, FileName enthält den Dateinamen des Attachments, rtAttachment ist das RichText, in den die Datei soll.
@If(
FileName != "";
@Do(
@Command([EditDocument];"1";"1");
@Command([EditGotoField]; "rtAttachment");
@Command( [EditInsertFileAttachment];FileName);
@SetField("FileName";"");
@Command([FileSave])
);
""
)
In einem Buttonclick wird über einen Dialog die Datei ausgewählt (dann noch einiges anderes damit gemacht) und anschließend der Dateiname in das Feld Filename geschrieben. Dann speichere ich alles, schließe das Dokument und öffne es neu.
Call uidoc.FieldSetText("FileName",strFilePath)
Call uidoc.Save()
doc.Saveoptions = "0"
Call uidoc.Close
Call doc.Save(True,True)
Set uidoc = ws.editDocument(True, doc)
Hier sieht dann auch alles gut aus, das Attachment ist da und der Dateiname nicht mehr. Wenn ich dann allerdings das Dokument schließe, scheint Notes alles vergessen zu haben... Das Attachment ist in der Vorschau nicht zu sehen, dafür aber wieder der Dateiname. Solange die Datei noch im Dateisystem existiert gar kein Problem, sie wird ja dann im Postopen wieder als Attachment dargestellt. Eigentlich sollte die aber in einem spätern Schritt nach dem Einfügen des Attachments automatisch wieder von der Festplatte gelöscht werden...
Ich habe bereits versucht, nach dem Reload des Dokuments sowohl das uidoc als auch das doc noch einmal zu speichern, aber selbst das manuelle Speichern des Dokuments über die Symbolleiste verändert überhaupt nichts...
Könnt ihr mir eventuell sagen, was genau ich hier übersehe? Wahrscheinlich etwas total offensichtliches, aber ich komme einfach nicht drauf.
Danke schonmal und schöne Grüße,
Axel
Hallo,
hui, so viele Antworten schon :) Danke schonmal dafür!
@Command( [EditInsertFileAttachment] ): Attaches a file to a document.
Das wird meines ERachtens nach nicht im Feld eingefügt.
Doch, das klappt wunderbar, solange der Fokus in einem Richtext liegt.
Wie hast du die Attachments denn via LS im RT-Feld eingefügt?
Das unter dem Dokument einfügen sieht aus, als ob das zugehörige Feld gelöscht, oder das Attachment eben nicht in das Feld eingefügt wurde.
Mit
If doc.HasItem(rtAttName) Then
Set rtAtt = doc.GetFirstItem(rtAttName)
Else
Set rtAtt = New NotesRichTextItem(doc,rtAttName)
End If
If ( rtAtt.Type <> RICHTEXT ) Then
Print("Zielfeld ist kein Richtextfeld")
Goto NoResult
End If
Call rtAtt.EmbedObject ( EMBED_ATTACHMENT, "", strFilepath)
Das gleiche Problem, das ich damit hatte, konnte ich hier im Forum auch mehrmals finden. Allerdings haben die wenigen Lösungsvorschläge dazu nichts bewirkt. Und ja, das Richtextfeld existiert und wird auch im Code selbst erkannt. Nur wird dann eben der Anhang trotzdem ans Dokument, anstatt an das Richtext angehängt.
ähhhhh, vielleicht stehe ich auf dem Schlauch, aber speicherst du hier nicht gerade explizit, dass nichts gespeichert werden soll?
Soweit ich das weiß, unterbindet Saveoptions := 0 doch nur den Speicherdialog. Liege ich da falsch? Auf den Codeschnipsel bin ich hier im Forum auf der Suche nach einer Lösung für mein Problem gestoßen. Das habe ich mir also nicht selbst überlegt ;D
Wie müsste ich denn an dieser Stelle sonst vorgehen? Lasse ich diese Zeile weg, kommt nämlich wieder die Nachfrage, ob ich speichern möchte...
Schöne Grüße,
Axel
Wenn ich vielleicht noch einmal eine kurze Anschlussfrage stellen dürfte... ;)
Das mit dem Hinzufügen funktioniert ja jetzt prima, es muss jetzt allerdings auch möglich sein, die Attachments über einen Button wieder zu löschen. Dazu benutze ich jetzt folgenden Code:
Set rtitem = doc.GetFirstItem(rtAttName)
If Isarray (rtitem.EmbeddedObjects) Then
If ( rtitem.Type = RICHTEXT ) Then
Forall object In rtitem.EmbeddedObjects
If ( object.Type = EMBED_ATTACHMENT ) Then
Call object.Remove
End If
End Forall
Call doc.Save(True,True)
End If
End If
Damit wird aber anscheinend nur die Datei selbst gelöscht, das Dateiicon bleibt weiterhin im Dokument sichtbar - auch nach einem erneuten Aufruf des Dokuments. Ähnliche Threads zu dem Thema laufen eigentlich auf genau den Code hinaus, den ich hier benutze, daher bin ich auch hier wieder eher ahnungslos...
Ich habe auch bereits eine Möglichkeit gefunden, das Icon aus dem Richtext zu löschen, allerdings erscheint dabei eine Abfrage, ob wirklich gelöscht werden soll, was ich eher weniger gebrauchen kann.
Daher nochmal meine Frage: Was übersehe ich hier? Es kann doch nicht sein, dass das Icon ohne Datei dahinter stehenbleibt...
Schöne Grüße,
Axel
Hallo zusammen,
nachdem ich mit eurer Hilfe das ganze eigentlich schon wunderbar zum Laufen bekommen habe, stehe ich jetzt doch wieder vor einem mir unbegreiflichen Fehler...
Gestern konnte ich noch nach Herzenslust Bilder über die Buttons hinzufügen und wieder löschen, jetzt streikt Notes plötzlich beim Löschen. Nach dem Entfernen des Bildes im Backend starte ich wie im folgenden Code das uidoc wieder im Editmodus. Ich möchte anschließend den Fokus in ein anderes Feld setzen und genau dort stellt Notes sich quer.
Set uidoc = ws.EditDocument(True,doc)
Call uidoc.GotoField(FieldName )
Die Fehlermeldung, die ich mir mittels Errorhandler anzeigen lasse, lautet wie folgt:
Fehler #4418 - Property or Method is not available during QueryOpen: GotoField
Für mich eher unverständlich, da meines Erachtens nach ja das QueryOpen zu diesem Zeitpunkt schon durchlaufen sein sollte, oder lieg ich da falsch?
Der einzige Unterschied zu gestern liegt darin, dass ich vorhin mal kurz mit dem Sperren des Editmodes herumgespielt habe, wie er hier in den BP (http://atnotes.de/index.php?topic=20455.0) erklärt wird. Das habe ich dann allerdings doch schnell verworfen und alle Änderungen wieder rückgängig gemacht.
Hat eventuell irgendwer einen Ansatz für mich, oder eine Idee, woran dieser Fehler liegen könnte und was ich dagegen tun kann?
Vielen Dank und schöne Grüße,
Axel