Domino 9 und frühere Versionen > Entwicklung
Link in einem RichText anfügen
Rob Green:
um das doppelte Speichern zu verhindern, setz kurzfirstig SaveOptions="0" im Frontend.
Und zwar vor das uiclose.
Das wär so meine Idee, wobei mich immer noch wundert, warum der jetzt einen Link setzt und vorher nicht....wenn ich mal Zeit für dieses Prob habe, werde ich das mal testen, anhand Deines ersten Codes.
jofa:
Hi Rob,
ich habe meinen Code nochmals am Ende geändert:
---
Sub Click(Source As Button)
Dim session As New notessession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim docUNID As String
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument 'get the frontend doc
Dim backendDoc As NotesDocument
Set backendDoc = uidoc.Document 'get the backend doc
Call uidoc.save()
Call uidoc.close
Dim rtDocLink As NotesRichTextItem
Dim docPick As New NotesDocument( db )
Dim vStringArray As Variant
Dim tname As String
Dim comma As Integer
Dim ttel, tdw, tfax, tmail As notesitem
vStringArray = ws.PickListStrings(PICKLIST_NAME, False, db.Server, "names.nsf", "($VIMPeople)", "InternetAddress", "Bitte wählen Sie aus", 1, "")
If Isempty(vStringArray) Then Exit Sub
comma = Instr(vStringArray(0),",")
If comma > 0 Then
tname = Fulltrim(Strrightback(vStringArray(0),",")) + " " + Fulltrim(Strleftback(vStringArray(0),","))
Else
tname = Fulltrim(vStringArray(0))
End If
Set nab = New NotesDatabase(db.server , "names.nsf")
If nab.IsOpen Then
Set view = nab.GetView("($Users)")
Set tdoc = view.getdocumentbykey(tname)
Set tmail = tdoc.Getfirstitem("InternetAddress")
Set ttel = tdoc.Getfirstitem("OfficeNumber")
Set tdw = tdoc.Getfirstitem("OfficePhoneNumber")
Set tfax = tdoc.Getfirstitem("OfficeFAXPhoneNumber")
Call backendDoc.ReplaceItemValue("DVB_Name", tname)
Call backendDoc.ReplaceItemValue("tmp_DVB_Name", Evaluate("@Name([CN]; DVB_Name)", note))
Call backendDoc.ReplaceItemValue("DVB_Mail", tmail.Text)
Call backendDoc.ReplaceItemValue("DVB_Tel", tdw.Text)
Call backendDoc.ReplaceItemValue("DVB_Fax", tfax.Text)
Call backendDoc.ReplaceItemValue("DVB_Kunde_Tel", ttel.Text)
backendDoc.RemoveItem( "Link" )
backendDoc.CreateRichTextItem( "Link" )
Set rtDocLink = backendDoc.GetFirstItem( "Link" )
Call rtDocLink.AppendDocLink( tdoc, "DocLink" , "Details")
docUNID = backendDoc.UniversalID
Call backendDoc.Save( True, False, True )
backendDoc.saveoptions = "0"
Call uidoc.Close
Set backendDoc = db.GetDocumentByUNID( docUNID )
Set uidoc = ws.Editdocument( True, backendDoc )
'Call uidoc.Refresh( True )
'Call uidoc.GotoField( "Kunde_Tel" )
Set backendDoc = uidoc.Document
backendDoc.saveoptions = "1"
End If
End Sub
---
Es funktioniert nun auch soweit, allerdings bei der 3. letzten Zeile: backendDoc.saveoptions = "1"
bekomme ich ne Fehlermeldung:
"Object Variable not set!"
Im Debugger ist die Variable backendDoc leer, nachdem die Zuweisung: Set backendDoc = uidoc.Document erfolgt ist. ???
Woran kann dieses liegen ?
Gruss JoFa
Rob Green:
oh weh... so langsam sieht es nach Spaghetti Code aus...uidoc spiechern, edit, auf und zu und auf..Link Item removen dann wieder setzen....mal ganz langsam jetzt....
Du hast ein Doc...und da soll ein Link rein plus einige Infos. Dieser Link und die Infos kommen aus einer picklist doc auswahl. Ok soweit.
Du benötigst hierbei nicht eine einzige UI Methode/Klasse mE außer picklist.
Daher probier mal alles zu vermeiden was mit UI zu tun hat, damit Du nicht mehr in die Probs kommst.
1. wenn Du ein Doc im Frontend "ausgewählt" hast, das sich nicht im EDit Mode befindet (!!!) bekommst Du es über eine Notesdocumentcollection
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Damit hast Du schon mal jetzt das Backend Doc ohne UIDoc.document Saven und sonstiges Gedönse.
2. Ganz zum Schluß kannst Du natürlich dann wenn alles erledigt ist (Infos übernommen und Link gesetzt) das Frontend Doc nach vorne holen..haste ja schon mit Set uidoc = ws.Editdocument( True, backendDoc )
Heißt:
zuerst arbeitest Du nur mit dem Backend Doc,
dann picklist
dann Daten aus dem Adressbackend Doc auslesen
dann in Backenddoc übernehmen
und zum Schluß Frontenddoc anzeigen
(ahso, und zum obigen Fehler: wahrscheinlich war wohl kein SaveOptions Feld vorhanden, als Du es mit einem Wert per backend belegen wolltest...so auf die Schnelle, kann mich auch irren)
eknori (retired):
hab den thread nicht komplett gelesen.
Möglicherweise habe ich aber hier was passendes für dich
http://eknori.dyndns.org/knowledge/devidea.nsf/703257f00a483fb180256879002c0178/d9a9164c5d9471d38025686c00298407?OpenDocument&Highlight=0,doclink
eknori
jofa:
Hallo Eknori,
ja und nein, eine kleine Anleihe hatte ich mir aus diesem Link von Deinen Alpha Seiten schon geholt.
Soweit funktioniert es ja auch alles, nur soll das Dokument wieder im Editmodus geöffnet werden mit den Optionen:
bachendDoc.SaveOptions = "1"
und er soll in ein bestimmtes Feld wieder springen, und dieses klappt leider noch nicht und ich stehe da voll auf dem Schlauch, zumal ich nicht weiss, was Rob mit seinem letzten Statement meint :-(
Mir raucht echt der Kopf ...
Ziel ist es über einen Button einen Ansprechpartner auszuwählen. Aus dem Dokument sollen einige Felder übernommen werden und dann soll noch ein link eingefügt werden. Dabei soll das Dokument nicht beendet werden sondern für den Benutzer (bearbeitbar) bleiben, da er manuell weitere Felder pflegen muss.
Ich hoffe ich drücke ich nicht zu schwammig aus :-(
Gruss aus Langenberg von JoFa :-)
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln