Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: kawie am 10.11.04 - 14:31:24

Titel: append doc link Methode
Beitrag von: kawie am 10.11.04 - 14:31:24
Hallo zusammen,

ich versuche aus einem geöffneten Dokument ein neues Dokument zu bilden und in einem Richtext feld einen Doclink einzufügen.

Leider passiert da gar nicht :-( Weiss jemand rat?


Code

Sub Click(Source As Button)
	
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim workspace As New NotesUIWorkspace
	Dim doc As NotesDocument
	Dim item As NotesItem
	Dim doc2 As NotesDocument
	Dim rtitem As  NotesRichTextItem
	Dim uidoc As NotesUIDocument
	Dim uidoc2 As NotesUIDocument
	Dim subject As String
	
	Set db = session.CurrentDatabase 
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
	
	
	subject = doc.Knowhow_thema(0)
	subject = "Neues Knowledge Dokument: " & subject
	
	Set uidoc2 = workspace.ComposeDocument _
	( "", "", "Memo" )
	
	noteid$ = doc.NoteID
	Set doc = db.GetDocumentByID( noteid$ )
	
	Set doc2 = uidoc2.Document
	Call doc.Save( False, True )
	doc2.Subject = subject
	doc2.Form = "Memo"
	doc2.SaveOptions = 0
	Set rtitem = New NotesRichTextItem( doc2, "Body" )
	Call rtitem.AppendDocLink( doc, db.Title ) 
	Call doc.Save( False, True )
	
	
End Sub

Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 10.11.04 - 14:52:46
Wenn das der komplette Code ist, dann wirst Du den DocLink auch niemals sehen, denn kurz nach dem Einfogen des DocLinks wirfst Du mit End Sub Dein ganzes Konstrukt ungespeichert in den Orkus.

Was bezweckst Du eigentlich hiermit:
Code
Set doc = uidoc.Document

......

noteid$ = doc.NoteID
Set doc = db.GetDocumentByID( noteid$ )

doc war doch schon instantiiert, und dann machst Du es (auf eine andere Art und Weise) nochmal. Wozu ?

Bernhard
Titel: Re: append doc link Methode
Beitrag von: Axel am 10.11.04 - 15:05:09
Hi,

warum legt du denn das neue Dokument nicht komplett im Backend an?

Code
...
Set uidoc2 = workspace.ComposeDocument _
( "", "", "Memo" )
Set doc2 = uidoc2.Document
...

Ob das sauber funktioniert, da bin ich mir ganz und garnicht sicher.


Axel
 
Titel: Re: append doc link Methode
Beitrag von: kawie am 10.11.04 - 16:21:17
Hallo,

danke für die Antworten hier kommen meine :-)

1) Backend kann ja jeder ;-). Nein im Ernst der User soll nach dem Erstellen noch die möglichkeit haben individuellen Text hinzuzufügen.

2) @koehlerbv war nur ein Test von mir ist im Prinzip doppelt gemoppelt. Hatte vergessen es rauszunehmen.

3) @Axel genau das wollte ich aber wissen...

appenddoclink ist eine Methode der Richtextklasse welche wiederum eine Klasse des NotesDocumentes ist. Klappt das so mit meinem gefummel und ich habe nur etwas falsch gesetzt... Oder wird das gar nicht gehen. Gibt es so etwas eventuell auch als FrontEnd Methode??

Gruss

Kai
Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 10.11.04 - 16:23:11
Das Dealen mit rich text items funktioniert nur im Backend.

Du müsstest also Dein Dokument zunächst im Backend erzeugen, abspeichern und erst dann ins Frontend holen.

Bernhard
Titel: Re: append doc link Methode
Beitrag von: Semeaphoros am 10.11.04 - 16:26:20
Genau wie Bernhard das eben gesagt hat, ist es. Das Doc im Backend erstellen, bereitstellen, speichern und dann über NotesUIWorkspace.EditDocument anzeigen und bearbeiten lassen.
Titel: Re: append doc link Methode
Beitrag von: TMC am 10.11.04 - 20:34:03
Noch als Nachtrag:
Du kannst dann das Backend-Document danach löschen. Kann sinnvoll sein, wenn z.B. der User dann doch nicht das Dok speichern will.

Also zum Schluss des Codes sowas wie:

Call doc2.Save(True,False)
Set uidoc2 = uiws.EditDocument(True, doc2)
Call doc2.Remove(True)

Will heißen Du machst alles im Backend, und zum Schluß öffnest Du das Backend-Doc im Frontend und verwirfst danach das Backend. Dazu muss der User allerdings Löschrechte haben.
Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 10.11.04 - 20:46:41
So einfach und prinzipiell würde ich aber nicht löschen, Matthias. Das hinterlässt unnötigen Ballast in der Datenbank, wenn dies häufig benutzt wird. Eher im QuerySave ein Flag hinterlassen und dieses im QueryClose auslesen und dann entscheiden.

Das mit den Löschrechten könnte natürlich ein Kasus Knacktus sein ...

Bernhard
Titel: Re: append doc link Methode
Beitrag von: Semeaphoros am 10.11.04 - 20:56:51
Das mit dem Flag ist eine sehr gute Strategie, würde ich auch bevorzugen.
Titel: Re: append doc link Methode
Beitrag von: TMC am 10.11.04 - 20:59:09
Stimmt, da habt Ihr auch wieder Recht (wenn nicht die Mail-DB die Zieldatenbank ist)  :)
Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 10.11.04 - 21:02:39
Nö, die Mail-DB ist nicht die Ziel-DB, AFAIK.
Was würde das aber für einen Unterschied machen ? Abgesehen davon, dass man dort nicht so ohne weiteres ... wegen Update-Fähigkeit ... und so weiter ... ?

Bernhard
Titel: Re: append doc link Methode
Beitrag von: TMC am 10.11.04 - 21:07:06
Was würde das aber für einen Unterschied machen ? Abgesehen davon, dass man dort nicht so ohne weiteres ... wegen Update-Fähigkeit ... und so weiter ... ?

Genau den Unterschied den Du erwähnst. Unter Abwägung der Vor- und Nachteile würde ich mich da ganz klar für Löschen entscheiden. Zumal wohl jeder Inhaber eines Mailfiles auch Löschrechte hat.
Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 10.11.04 - 21:10:47
Jo, da hast Du wahr  ;)

Bernhard
Titel: Re: append doc link Methode
Beitrag von: kawie am 12.11.04 - 14:46:34
Hallo zusammen,

ich danke Euch nochmal für Eure Hilfe wobei ich immer noch nicht verstehe warum ich meine Erste varinte nicht nutzen konnte :-(

Wenn ich eine NotesDocument mit

doc = uidoc.document Deklariere ist doc Doch ein Backend Dokument und hat damit auch alle möglichkeiten oder??

Naja ich habe es jetzt so gemacht:

Code
Sub Click(Source As Button)
	
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim item As NotesItem
	Dim doc2 As NotesDocument
	Dim rtitem As  NotesRichTextItem
	Dim uidoc As NotesUIDocument
	Dim uidoc2 As NotesUIDocument
	Dim subject As String
	Dim user As String
	Set db = session.CurrentDatabase 
	Set uidoc = workspace.CurrentDocument
	
	Set doc2 = uidoc.Document
	
	Set doc = New NotesDocument(db) 
	
	user = session.CommonUserName
	subject = doc2.Knowhow_thema(0)
	subject = "Neues Knowledge Dokument: " & subject
	Set rtitem = New NotesRichTextItem( doc, "Body" )
	Call rtitem.AppendDocLink( doc2, db.Title ) 
	doc.Form = "Memo"
	doc.Subject = subject
	doc.from = user
	doc.type = "reply"
	doc.copyto = user
	Call doc.Save( False, True )	
	Set uidoc2 = workspace.EditDocument( True, doc) 
	
End Sub


Das löschen lass ich im moment vom einem tägichen Agent machen.
Schicker wäre es natürlich nach dem versenden. Frage an Euch wäre wieso das unnötigen Ballast erzeugt?

Gruss

Kai
Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 12.11.04 - 15:18:13
Das mit dem Erzeugen und Speichern eines Dokuments, dass danach sowieso wieder gelöscht werden soll, ist natürlich für eine Datenbank nicht so schön.

Man kann das Ganze in Ermangelung einer entsprechenden NotesUIDocument-Methode auch anders machen:

In der Maske des Dokuments, zu dem ein DocLink verschickt werden soll, gibt es einen Button (ist ja bestimmt jetzt schon der Fall). Dort stehen folgende @functions:

Code
@Command ([FileSave]);
@Command([EditMakeDocLink]) ;
@Command ([ToolsRunMacro]; "(CreateMemo)")

Der Agent "(CreateMemo)" enthält prinzipiell folgenden Code:
Code
Sub Initialize
	
	Dim ws As New NotesUIWorkspace
	Dim session As New NotesSession
	Dim dbCurrent As NotesDatabase
	Dim docMemo As NotesDocument
	Dim uidocMemo As NotesUIDocument
	
	Set dbCurrent = session.CurrentDatabase
	Set docMemo = dbCurrent.CreateDocument
	
	docMemo.Form = "Memo"
	
	Set uidocMemo = ws.EditDocument (True, docMemo)
	
	Call uidocMemo.GotoField ("Body")
	Call uidocMemo.Paste
	
End Sub

Voila - der DocLink steht in einem ungespeicherten Dokument. Im QuerySave der Memo-Maske verhinderst Du noch, dass das Dokument gespeichert werden kann und machst das NotesDocument.Send.

HTH,
Bernhard
Titel: Re: append doc link Methode
Beitrag von: kawie am 14.11.04 - 19:19:25
Vielen lieben Dank nochmal !!

Ich verstehe zwar immer noch nicht warum das modell 1 von notes abgelehnt wurde aber das Ziel ist erreicht :-)
Titel: Re: append doc link Methode
Beitrag von: koehlerbv am 14.11.04 - 20:13:02
Gern geschehen.

Warum Deine erste Variante nichts taugte, habe ich aber bereits gleich in der ersten Replik geschrieben.

Bernhard