Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: jofa am 04.10.02 - 09:23:36
-
Guten Morgen an alle ...
Ich möchte mit einer Picklist mir ein Dokument aus einer anderen DB auswählen und einige Felder aus diesem in mein neues Dokument übernehmen, dieses klappt auch ganz gut, nur einen Link in einem RTF im neuen Dokument kann ich nicht anlegen. Ich bin fast am verzweifeln. ??? ??? ???
Weiss jemand Rat ::) ?
Mein Script (hinterlegt in einem Button):
---
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim nab As NotesDatabase
Dim note, tdoc As NotesDocument
Dim vStringArray As Variant
Dim tname As String
Dim comma As Integer
Dim ttel, tdw, tfax, tmail As notesitem
Dim rtitem As NotesRichTextItem
Set db = session.CurrentDatabase
vStringArray = ws.PickListStrings(PICKLIST_NAME, False, db.Server, "names.nsf", "($VIMPeople)", "InternetAddress", "Bitte wählen Sie aus", 1, "")
If Isempty(vStringArray) Then Exit Sub
ws.CurrentDocument.Editmode = True
Set note = ws.CurrentDocument.Document
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")
End If
Call note.ReplaceItemValue("DVB_Name", tname)
Call note.ReplaceItemValue("tmp_DVB_Name", tname)
Call note.ReplaceItemValue("DVB_Mail", tmail.Text)
Call note.ReplaceItemValue("DVB_Tel", tdw.Text)
Call note.ReplaceItemValue("DVB_Fax", tfax.Text)
Call note.ReplaceItemValue("DVB_Kunde_Tel", ttel.Text)
Set rtitem = New NotesRichTextItem( note, "Link" )
Call rtitem.AppendDocLink( tdoc, "Verfügbare Details aus den Adressbüchern")
Call rtitem.AddNewLine( 1 )
Call rtitem.AppendText( "Test" )
'Set note.Link = rtitem
End Sub
---
Gruss Jofa
-
nur mal eine Frage: soweit sieht der Code auf den ersten Blick zum anlegen des Link ganz gut aus.
Aber, Du arbeitest doch bestimmt am Frontend mit dem neuen Doc, wo ja auch der Link hinein soll. Nur siehst Du den solange nicht, bis Du das Doc schließt und wieder öffnest. Hast Du das schon gechecked?
-
Hi Rob,
habe ich leider schon getan,
das Dokument enthält dann auch das RFT Feld "Link", aber es ist leer. Auch nach erneutem öffnen ???
Gruss Jofa
-
ich sehe irgendwie auch nix:
- check doch mal bitte nochmals tdoc
- wie speicherst Du das Ganze
- probier mal einen View zu einer DefaultView zu machen und dann nochmals doclink Test
- lass mal die Zeilen nach dem appendoclink weg (neue zeile und text)
mehr fällt mir auch nicht ein momentan.
-
Hi Rob,
habe mein Script umgebaut:
---
Sub Click(Source As Button)
Dim session As New notessession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
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
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")
Call backendDoc.Save(True ,True) 'Temp. Speichern des Backend-Doc. damit RTF-Feld angezeigt wird.
uidoc.Close
Set uidoc = ws.EditDocument(True, backendDoc) 'Dokument im Frontend öffnen
' Call backendDoc.Remove(True) 'Das Dokument, das im Backend erstellt wurde, löschen
'Call backendDoc.Save( True, False )
uidoc.Close
' Call backendDoc.Remove(True) 'Das Dokument, das im Backend erstellt wurde, löschen
End If
End Sub
---
geht auchsoweit, ausser, dass er zwei Dokumente speichern will, eines davon ein Konflikt Dokument.
Leider weiss ich ad nicht weiter, da ich mit UI blutiger Anfänger bin ...
Will das Dokument erst speichern, nachdem der User alle weiteren felder gepflegt aht und nicht sofort, anchdem der Link eingefügt wurde :-(
Gruss JoFa
-
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.
-
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
-
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)
-
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
-
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 :-)
-
kannst du mir mal deine DB schicken, bitte. Sitze zuhause und habe Langeweile. Das muss ich mir mal live ansehen.
Ulrich
-
Hallo Ulli,
die DB ist unterwegs,
vielen Dank schonmal im voraus ...
Vielleicht können wir in Velbert hja mal nen Bier trinken gehen :-)
Gruss JoFa
-
prima, dann kann ich mich ausklinken.
Viel Erfolg noch Jofa :D
-
Hi Rob,
erstmal danke ...
wenn ich die Lösung habe, dann poste ich sie auch hier :-)
Gruss JoFa
PS: Have a nice Weekend :-)
-
die DB ist unterwegs
bisher is nix angekommen; hast du an privat oder meine firmenadresse geschickt ??
Ulrich