Autor Thema: NotesDocument in RichText einbetten  (Gelesen 4912 mal)

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
NotesDocument in RichText einbetten
« am: 13.07.18 - 08:10:22 »
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:
Code
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
Ich will hier raus!!!

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: NotesDocument in RichText einbetten
« Antwort #1 am: 13.07.18 - 08:43:59 »
Moin

Und was ist jetzt genau das Problem ?

Ich denke das EmbedObject ist in diesem Falle überflüssig.
Ein Teil vom irrelevanten Code wäre jeweils Hilfreich, da sonst die Kristallkugel überstunden machen muss.
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #2 am: 13.07.18 - 09:46:02 »
Das Problem ist, dass das RT-Feld mit dem Dokumenten-Link leer bleibt

Code
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
Ich will hier raus!!!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: NotesDocument in RichText einbetten
« Antwort #3 am: 13.07.18 - 09:59:14 »
Wenn Update nicht reichen sollte (https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_UPDATE_METHOD_RTITEM.html) dann musst du das Dokument einmal schließen und neu öffnen.

Optional könnte man den Doc-Link auch über die Zwischenablage in das RichtextItem und somit über das UiDocument einfügen ... ist aber etwas aufwendiger ;)
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #4 am: 13.07.18 - 10:15:15 »
Optional könnte man den Doc-Link auch über die Zwischenablage in das RichtextItem und somit über das UiDocument einfügen ... ist aber etwas aufwendiger ;)


Hauptsache es geht ans Laufen. Wenn ich den ausgegrauten Teil ganz unten aktiviere heißt die Fehlermeldung, dass nicht beide "" leer sein dürfen. In den Beispielen die ich so gefunden habe wird meist ein "C:..." angehängt. Es soll ja ein Notes-Doc sein.
Ich will hier raus!!!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: NotesDocument in RichText einbetten
« Antwort #5 am: 13.07.18 - 10:32:50 »
Hinweis, diese Zeile:
Code
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.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: NotesDocument in RichText einbetten
« Antwort #6 am: 13.07.18 - 11:11:23 »
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:

Zitat
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:

Code
	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

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #7 am: 13.07.18 - 11:33:32 »
Das Feld wird gar nicht erst gefüllt. Auch wenn ich es manuell nochmal öffne. Daran scheitert es noch.

Ich hab das hier gefunden:
Code
Dim rti As NotesRichTextItem
Set rti = New NotesRichTextItem(newdoc, "RelatedRequest")
Call rti.AppendDocLink(doc,"")
Call rti.Update

Da passiert leider auch nichts
« Letzte Änderung: 13.07.18 - 11:44:33 von mauermauer »
Ich will hier raus!!!

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: NotesDocument in RichText einbetten
« Antwort #8 am: 13.07.18 - 11:56:18 »
Evtl. keine Vorgabe-Ansicht in der Datenbank festgelegt? Laut Hilfe:

Zitat
AppendDocLink method...

For this method to work you must set a default view in the database.

Das "Call rti.Update" ist ok, aber das Dokument muss auf jeden Fall neu geöffnet werden.

Versucht mal, nur mit AppendText etwas in das Rich-Text-Item reinzuschreiben...

MFG
ERR

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #9 am: 16.07.18 - 08:36:52 »
Habe jetzt über das uidoc einen Text platzieren können. So ganz habe ich den Sinn noch nicht überrissen.
Werde versuchen den Link dort statt im doc zu platzieren.
Ich will hier raus!!!

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #10 am: 16.07.18 - 15:15:43 »
Es schaut jetzt so aus:

Code
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?
Ich will hier raus!!!

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: NotesDocument in RichText einbetten
« Antwort #11 am: 16.07.18 - 15:27:14 »
Das Dokument wird jetzt durch dich im UI verändert (FieldSetText). Aber neu geöffnet wird es doch immer noch nicht...

Ich meinte

Code
Call nrtf.AppendText("Text")

...und danach neu das Dokument neu öffnen.

Bau außerdem mal Error-Handling ein
Code
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

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #12 am: 16.07.18 - 15:37:12 »
Mit AppendText passiert nix. Das Error-Handling war da schon drin und hat nicht mehr angeschlagen.

Zumindest schaffe ich es wenn ich das Speichern ablehne, dass mit "Link" als Link ein Link angezeigt wird.
Ich kannte bisher nur das orangene Blatt und hätte das gerne wieder und ohne, dass man das Speichern ablehnen muss.
« Letzte Änderung: 16.07.18 - 17:14:05 von mauermauer »
Ich will hier raus!!!

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: NotesDocument in RichText einbetten
« Antwort #13 am: 16.07.18 - 17:44:22 »
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
Code
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".

« Letzte Änderung: 16.07.18 - 17:46:26 von Andrew Harder »
Andy

Offline mauermauer

  • Frischling
  • *
  • Beiträge: 21
Re: NotesDocument in RichText einbetten
« Antwort #14 am: 20.07.18 - 07:28:46 »
Wollte euch die Lösung nicht vorenthalten. Hilft sicher auch Anderen. Danke euch.

Code
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)
Ich will hier raus!!!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz