Hallo Zusammen,
in einem Dokument wird über einen Button ein weiteres Dokument erstellt. Nach dem Speichern sollen Teile davon in das erste Dokument übernommen werden. Teilweise funktioniert das wunderbar.
Problem ist der Link des zweiten Dokumentes (orangenes Blatt), der in einem RichText-Feld im ersten Dokument abgelegt werden soll.
Ich habe mittlerweile ein paar Stunden mit der Suche nach der Nadel im Heuhaufen verbracht. Hoffe nun auf eure schlauen Ideen.
Hier der letzte Stand des relevanten Codes:
Set rtitem = New NotesRichTextItem(doc.Document,"PRLINK")
Call rtitem.Appenddoclink(uidocPR.Document, "", "")
Set object = rtitem.Embedobject(EMBED_OBJECT, "", "")
Danke schon mal für eure Beiträge
Das Problem ist, dass das RT-Feld mit dem Dokumenten-Link leer bleibt
Function CreatePR(arrPositions As Variant,doc As NotesUIDocument, hazard As Boolean) As NotesDocument
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim i As Integer
Dim iPosCount As Integer
Dim sPrefixNF As String
Dim sPrefixPR As String
Dim rtItem As NotesRichTextItem
Dim dbCurrent As NotesDatabase
Dim dbBF As NotesDatabase
Dim uiDocPR As NotesUIDocument
Set dbCurrent = s.Currentdatabase
Dim object As NotesEmbeddedObject
If Left(dbCurrent.Title,3) = "***" Then
Set dbBF = s.Getdatabase("EuropeNotesDev1/Servers/XXX","Firma\IT\DEV_Purchase.nsf", False)
Set uiDocPR = ws.Composedocument("EuropeNotesDev1/Servers/XXX", "Firma\IT\DEV_Purchase.nsf", "PReq")
Else
Set dbBF = s.Getdatabase(dbCurrent.Server, "XXX\Purchase.nsf", False)
Set uiDocPR = ws.Composedocument(dbCurrent.Server, "XXX\Purchase.nsf", "PReq")
End If
'If hazard = True Then
' Print "Test4"
' Call uiDocPR.Fieldsettext("HazardMaterialNF","True")
' Print "Test5"
' Else
' Print "Test4_1"
' Call uiDocPR.Fieldsettext("HazardMaterialNF","False")
' Print "Test5_1"
' End If
Call uiDocPR.Fieldsettext("UNIDLinkToNachforderung", doc.Document.Universalid)
Call uiDocPR.Fieldsettext("Currency3B","EUR")
'Call uiDocPR.Fieldsettext("UpdateNachforderung","")
For i = 0 To UBound(arrPositions)
sPrefixNF = "P" & arrPositions(i)
sPrefixPR = "_" & CStr(i+1)
Print "TEST"
Call uiDocPR.Fieldsettext("QTY" & sPrefixPR, doc.Fieldgettext(sPrefixNF & "Mge"))
Call uiDocPR.Fieldsettext("DESC" & sPrefixPR, doc.Fieldgettext(sPrefixNF & "ArtBeschr"))
Call uiDocPR.Fieldsettext("PRTNO" & sPrefixPR, doc.Fieldgettext(sPrefixNF & "ANR"))
Call uiDocPR.Fieldsettext("LESTUNITPRICE" & sPrefixPR, doc.Fieldgettext(sPrefixNF & "EP"))
Next
Set CreatePR = uiDocPR.Document
doc.Document.StatusOfPR = uiDocPR.Document.Getitemvalue("Status")
doc.Document.PRID = uiDocPR.Document.Getitemvalue("ReqNo")
' Set rtitem = New NotesRichTextItem(doc.Document,"PRLINK")
' Call rtitem.Appenddoclink(uidocPR.Document, "", "")
' Set object = rtitem.Embedobject(EMBED_OBJECT, "", "")
doc.Document.TriggerPRJ = "1"
End Function
Hinweis, diese Zeile:
Set object = rtitem.Embedobject(EMBED_OBJECT, "", "")
hat nichts mit Dok-Link einfügen zu tun, diese kann gelöscht werden. Auch solltest du ein Errohandling nutzen, um zu sehen wo deine Fehler entstehen.
Hallo,
das Dokument muss auf jeden Fall neu geöffnet werden, da Notes das im UI leider nicht aktualisieren kann...
Zitat aus der Designer-Hilfe:
Updates to rich text items accessed through NotesUIDocument are not immediately incorporated into the NotesUIDocument object. You must close and open the document to see the updates.
Wenn das UI-Dokument nicht gespeichert werden soll, kann man es wie folgt machen:
boolEditMode = uidoc.Editmode
Set docCurrent= uidoc.Document
' SaveOptions auf 0 setzen, damit der Benutzer beim Schliessen nicht zum speichern aufgefordert wird
docCurrent.SaveOptions = "0"
' UIDoc schliessen
Call uidoc.Close(True)
' neues UIDoc erstellen und das Backend-Dokument das noch im Speicher ist, im Frontend wieder öffnen
Set uidocNew = workspace.EditDocument(boolEditMode, docCurrent)
' Referenz zum alten UIDoc löschen
' dies ist nötig, da der weitere Code sonst darauf ausgeführt werden würde bzw. Auswirkungen darauf haben könnte
Delete uidoc
' das Backend-Dokument muss nun wieder der Variable neu zugewiesen werden
' dies muss gemacht werden, da die alte UIDoc-Referenz gelöscht wurde
Set docCurrent = uidocNew.Document
' SaveOptions wieder entfernen, damit das Dokument gespeichert werden kann
Call docCurrent.RemoveItem("SaveOptions")
' UIDoc wieder zuweisen
Set uidoc = uidocNew
Hinweis: Im docCurrent muss das Feld "Form" enthalten sein, damit es funktioniert.
MFG
ERR
Das Feld wird gar nicht erst gefüllt. Auch wenn ich es manuell nochmal öffne. Daran scheitert es noch.
Ich hab das hier gefunden:
Dim rti As NotesRichTextItem
Set rti = New NotesRichTextItem(newdoc, "RelatedRequest")
Call rti.AppendDocLink(doc,"")
Call rti.Update
Da passiert leider auch nichts
Es schaut jetzt so aus:
Set docLinkPR = CreatePurchaseRequestFromNF (arrProjects,uidoc)
Call uidoc.FieldSetText("PRLINK","TEXT")
Dim nrtf As NotesRichTextItem
Set nrtf=doc.GetFirstItem("PRLINK")
If nrtf Is Nothing Then
Else
Call doc.RemoveItem("PRLINK")
End If
Set nrtf= doc.CreateRichTextItem( "PRLINK")
Call nrtf.AppendDocLink (docLinkPR, "TEST")
"TEXT" steht drin, beim Doclink streikt er und ich hab schon mehrere Mailagenten geschrieben und einen Doclink angehängt. Warum klappt das gerade hier nicht?
Das Dokument wird jetzt durch dich im UI verändert (FieldSetText). Aber neu geöffnet wird es doch immer noch nicht...
Ich meinte
Call nrtf.AppendText("Text")
...und danach neu das Dokument neu öffnen.
Bau außerdem mal Error-Handling ein
Sub Test
On Error Goto ErrorHandler
...Code...
Exit Sub
ErrorHandler:
Print Err, Erl, Error
End Sub
Dann würde man sehen, ob das Problem mit der Vorgabe-Ansicht vorhanden ist...
MFG
ERR
Splitte das Ganze doch mal, vielleicht wird es dann klarer
Lege in der Funktion doch nur das PRDoc an, schreibe dort die gewünschten Werte rein, speichere es und gebe es zurück. Hierbei am besten das Hintergrunddokumet Deines UI Docs reingeben (doc.Document)
Das sieht dann in etwa so aus
Private Function CreatePR(_
parrPositions As Variant, _
pdoc As NotesDocument, _
phazard As Boolean) As NotesDocument
On Error GoTo lblErrorHandler
lblDeclarations:
Dim session As NotesSession
Dim dbCurrent As NotesDatabase
Dim dbBF As NotesDatabase
Dim docPR As NotesDocument
Dim first As Long
dim last As Long
Dim index As long
Dim server As String
Dim file As String
Dim sPrefixNF As String
Dim sPrefixPR As String
Set session = New NotesSession
Set dbCurrent = session.CurrentDatabase
If Left(dbCurrent.Title,3) = "***" Then
server = "EuropeNotesDev1/Servers/XXX"
file = "Firma\IT\DEV_Purchase.nsf"
Else
server = dbCurrent.Server
file = "XXX\Purchase.nsf"
End If
Set dbBF = session.GetDatabase(server, file, False)
Set docPR = New NotesDocument(dbBF)
Call docPR.ReplaceItemValue("Form", "PReq")
Call docPR.ReplaceItemValue("UNIDLinkToNachforderung", pdoc.Universalid)
Call docPR.ReplaceItemValue("Currency3B", "EUR")
first = LBound(parrPositions)
last = UBound(parrPositions)
For index = first To last
sPrefixNF = "P" & parrPositions(index)
sPrefixPR = "_" & CStr(index+1)
Call docPR.ReplaceItemValue("QTY" & sPrefixPR, pdoc.GetItemValue(sPrefixNF & "Mge")(0))
Call docPR.ReplaceItemValue("DESC" & sPrefixPR, pdoc.GetItemValue(sPrefixNF & "ArtBeschr")(0))
Call docPR.ReplaceItemValue("PRTNO" & sPrefixPR, pdoc.GetItemValue(sPrefixNF & "ANR")(0))
Call docPR.ReplaceItemValue("LESTUNITPRICE" & sPrefixPR, pdoc.GetItemValue(sPrefixNF & "EP")(0))
Next index
Call docPR.Save(Tue, False)
lblEnd:
Set createPR = docPR
Exit Function
lblErrorHandler:
Print Err, Error &" in " & GetThreadInfo(1) & "/" & Erl
Goto lblEnd
End Function
Anschließend erstellst Du Dir eine neue Sub, die den Rest erledigt (z. B. Sub CreateLink)
Dort dann: UIDoc schliessen (Speichern nicht vergessen), Hintergrund Dokument davon holen, die Felder setzen und anschließend wieder als UIDoc öffnen (EditDocument).
Beispiele hierfür gibt es hier im Forum einige, suche einfach mal nach "reopen".
Wollte euch die Lösung nicht vorenthalten. Hilft sicher auch Anderen. Danke euch.
Set docLinkPR = CreatePR (arrProjects,uidoc, bolHazardFound)
Call uidoc.FieldSetText("StatusOfPR",docLinkPR.Status(0))
Call uidoc.FieldSetText("PRID",docLinkPR.ReqNo(0))
Call uidoc.Save
Set doc = uidoc.Document
uidoc.EditMode = False
Call uidoc.Close(True)
If doc.HasItem("PRLINK") Then
doc.RemoveItem("PRLINK")
End If
Set rtitem = New NotesRichTextItem(doc,"PRLINK")
Call rtitem.AppendDocLink(docLinkPR,"TEST")
Call doc.Save(True,False)
Set uidoc = ws.EditDocument(True,doc)