Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Demian am 10.05.06 - 13:07:43
-
Hallo alle zusammen,
wenn ich einer Maske per Script einen Dateianhang hinzufüge, zeigt er mir zwar den Anhang samt Dateinamen ein, jedoch ist das Symbol nur ein gräuliches Blatt, obwohl es eine Word-Datei ist.
Hier der Code:
Dim work As New NotesUIWorkspace
Dim udoc As NotesUIDocument
Dim doc As NotesDocument
Dim item As NotesRichTextItem
Dim obj As NotesEmbeddedObject
Set udoc = work.CurrentDocument
Set doc = udoc.Document
Call udoc.Save
Set item = New NotesRichTextItem(doc,"Anhang")
Set obj = item.EmbedObject(EMBED_attachment,"" ,"C:\Rechnung.DOC","Rechnung")
Wenn man ganz normal über "Datei" -> "Anhängen" eine Datei anhängt zeigt er das jeweilige Programmsymbol an.
Kann man das per Code auch so machen, oder zeigt er immer ein gräuliches Blatt?
Gruß
Demian
-
Das hatten wir schon öfters hier diskutiert. Wenn das Attachment im Backend erzeugt wird, wird das "neutrale" Symbol verwendet.
Andreas
-
Hallo Andreas,
habe auch die Suchfunktion benutzt. Bin dabei aber nur auf einen Beitrag gestoßen in dem es um dasselbe ging (per Formeln). Es gab jedoch keine Antworten. Deswegen habe ich einen neuen Beitrag aufgemacht.
Wie müsste es denn im Frontend aussehen?
Gruß
Demian
-
Muss es Script sein. Wenn es auch Formelsprache sein kann, dann geht es mit
@Command( [EditInsertFileAttachment] ; file ; compress )
Ich habe es auch schon mal so gemacht:
Das
@Command( [EditInsertFileAttachment] ; file ; compress )
im Postopen ausführen, wenn es spezielles Feld gesetzt ist. Dazu muss das vorher mit Script gesetzt worden sein. Vorher das Frontend UIDoc schließen und neu öffnen.
Im Queryclose dann das Flag löschen.
So a la von hinten durch die Brust ins Auge. Aber es geht.
Andreas
-
Es müsste schon Script sein, weil dem Dateianhängen noch einiges voraus geht, was sich über Formeln nicht lösen lässt:
'Allgemein
Dim work As New NotesUIWorkspace
Dim doc As NotesDocument
Dim udoc As NotesUIDocument
'zu übertragende Texte
Dim Firma As String,Straße As String,PLZ As String,Ort As String
Dim LieferscheinNr As String, UAuftrag As String, UZeichen As String
Dim Telefon As String, IAuftrag As String, ADatum As String, LieferantenNr As String
Dim Position(9) As String, Menge(9) As String, BNummer(9) As String, BText(9) As String
'Word
Dim wd
'um Speichernamen zu ermitteln
Dim ZwischenSpeicher As String
Set udoc = work.CurrentDocument
If udoc.EditMode = False Then udoc.EditMode = True ' Für Speicherbefehl, wenn bereits erstelltes Doc erneut erstellt wird
On Error Resume Next
Set wd = getobject(,"Word.Application")
If Err = 208 Then
Err = 0
Set wd = createobject("Word.Application")
End If
On Error Goto 0
With wd
.visible = True
'Empfänger
.documents.open "C:\Lieferschein.doc"
.Activedocument.Bookmarks("Firma1").Select
.Selection.Text = udoc.FieldGetText("FirmaLieferschein")
.Activedocument.Bookmarks("Straße").Select
.Selection.Text = udoc.FieldGetText("StraßeLieferschein")
.Activedocument.Bookmarks("Ort").Select
.Selection.Text = udoc.FieldGetText("PLZLieferschein") & " " & udoc.FieldGetText("OrtLieferschein")
'Lieferscheindaten
.Activedocument.Bookmarks("LieferscheinNr").Select
.Selection.Text = udoc.FieldGetText("LieferscheinNr")
.Activedocument.Bookmarks("IAuftrag").Select
.Selection.Text = udoc.FieldGetText("IAuftragLieferschein")
.Activedocument.Bookmarks("ADatum").Select
.Selection.Text = udoc.FieldGetText("AuftragsDatumLieferschein")
.Activedocument.Bookmarks("LieferantenNr").Select
.Selection.Text = udoc.FieldGetText("LieferantenNrLieferschein")
'Unsere Daten
.Activedocument.Bookmarks("UAuftrag").Select
.Selection.Text = udoc.FieldGetText("UAuftragLieferschein")
.Activedocument.Bookmarks("UZeichen").Select
.Selection.Text = udoc.FieldGetText("UZeichenLieferschein")
.Activedocument.Bookmarks("Telefon").Select
.Selection.Text = udoc.FieldGetText("TelefonLieferschein")
.Activedocument.Bookmarks("Datum").Select
.Selection.Text = Today
'Postionen
For i = 1 To 20
.Activedocument.Bookmarks("Pos"&i).Select
.Selection.Text = udoc.FieldGetText("PosLieferschein" & i)
Next i
'Mengen
For i = 1 To 20
.Activedocument.Bookmarks("Menge"&i).Select
.Selection.Text = udoc.FieldGetText("MengeLieferschein" & i)
Next i
'Beschreibungsnummern
For i = 1 To 20
.Activedocument.Bookmarks("BNummer"&i).Select
.Selection.Text = udoc.FieldGetText("BeschreibungsNrLieferschein" & i)
Next i
'Beschreibungstext
For i = 1 To 20
.Activedocument.Bookmarks("BText"&i).Select
.Selection.Text = udoc.FieldGetText("BeschreibungZeile" & i)
Next i
Zwischenspeicher = udoc.Fieldgettext("LieferscheinNr")
Firma = udoc.FieldGetText("FirmaLieferschein")
wd.Activedocument.saveas ("C:\" & Zwischenspeicher & "-" & Today & "-" & Firma & ".doc" )
wd.activedocument.close
End With
Call udoc.Save
Dim item As NotesRichTextItem
Dim obj As NotesEmbeddedObject
Set doc = udoc.Document
Set item = doc.GetFirstItem("DateiAnhang")
Set obj = item.EmbedObject(EMBED_ATTACHMENT,"" ,"C:\" & Zwischenspeicher & "-" & Today & "-" & Firma & ".doc")
Call udoc.Save
udoc.EditMode = False
Würde es sich denn überhaupt über Script lösen lassen?
Gruß
Demian
-
Also dann Plan B von mir:
anstelle von
Call udoc.Save
Dim item As NotesRichTextItem
Dim obj As NotesEmbeddedObject
Set doc = udoc.Document
Set item = doc.GetFirstItem("DateiAnhang")
Set obj = item.EmbedObject(EMBED_ATTACHMENT,"" ,"C:\" & Zwischenspeicher & "-" & Today & "-" & Firma & ".doc")
Call udoc.Save
udoc.EditMode = False
folgendes:
dim path as string
path = "C:\" & Zwischenspeicher & "-" & Today & "-" & Firma & ".doc"
Set doc = udoc.Document
doc.FlagAttachFile = "1"
doc.AttachFileName = path
call doc.Save(true,true,true)
Call udoc.Save
call udoc.Close
call work.EditDocument( doc, true )
Im Postopen dann
@If(
FlagAttachFile = "1";
@Do(
@Command( [EditInsertFileAttachment];AttachFileName);
@SetField("FlagAttachFile";"")
);
""
)
-
Hallo Andreas,
Kenne mich zwar noch nicht so gut aus, aber das heißt doch das er bei bzw. nach jedem Öffnen den Dateianhang hinzufügt, oder?
Wollte nämlich die Dateien nur temporär auf der Platte speichern und später per Code wieder löschen.
Gruß
Demian
-
Nein, nur falls
FlagAttachFile = "1"
ist. Und das setze ich ja mit Script auf "1" und lösche es im Postopen.
Sonst wäre das in der Tat keine so tolle Lösung ;)
Andreas
-
Hallo Andreas,
habe es jetzt so gemacht, wie du geschrieben hast. Allerdings musste ich das "call work.editdocument(doc,true)" in "call work.editdocument(true)" umändern, weil sonst immer der Fehler "incorrect argument type: object inspected" kam.
Leider funktioniert es nicht. Es kommt aber auch keine Fehlermeldung.
Gruß
Demian
-
Muss mich korriegieren. Er zeigt mir in der Ansicht unter "Namen der Dateianhänge" zwar den Namen an, aber es ist kein Anhang da.
-
Wenn du die Mail per Script erzeugst und immer nur ein WORD-Dokument anhängst, dann gib ihr doch als Feld
_Viewicon
gefüllt mit dem Wert des WORD-Dokument-Symbols gleich mit. Dann wird es auch als Symbol angezeigt.
-
Aber nur in der Ansicht ... Ich glaube nicht, dass das im Sinne des Fragestellers war. Hilfreich kann es aber natürlich sein ;)
Bernhard
PS: _ViewIcon müsste dann den numerischen Wert 142 haben. Das nur der Vollständigkeit halber.