Autor Thema: RenderToRTItem  (Gelesen 2674 mal)

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
RenderToRTItem
« am: 24.10.05 - 13:48:06 »
Mahlzeit allerseits!

Ich habe hier im Forum ein Post gefunden (http://atnotes.de/index.php?topic=9503.0), in dem Versucht wird aus einer Maske heraus ein Dokument über den Befehl "RenderToRTItem" in eine andere Datenbank zu "kopieren".

Was ich möchte:

Ich möchte gerne unser Mailschablone anpassen, indem ich einen neuen Aktions-Button einfüge.

Wenn ich ein Notes-Memo öffne, dann möchte ich die geöffnete Mail per o.g. Befehl in ein Dokument einer anderen DB kopieren.

Den Code aus dem Forum habe ich mal ein wenig angepasst:

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim session2 As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim db As NotesDatabase
	Dim db2 As NotesDatabase
	Dim uidoc As NotesUIDocument
	Dim docA As NotesDocument
	Dim docB As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim success As Variant
	Set db = session.CurrentDatabase
	Set db2 = session2.GetDatabase("domino", "IT")
	Set uidoc = workspace.CurrentDocument
	Set docA = uidoc.Document
	If Not(db2.IsOpen) Then Call db2.Open("", "")
	[b]Set docB = New NotesDocument( db2 )[/b]
	Set rtitem = New NotesRichTextItem( docB, "mail_body" )
	docB.Form = "edv_mail"
	docB.mail_thema = "It's a picture of the document"
	Call docB.Save( True, True )
	success = docA.RenderToRTItem( rtitem )
	Call docB.Save( True, True )
End Sub

Es scheitert an der Fehlermeldung:

"Database has not been opened yet"

an dieser Stelle:
Code
Set docB = New NotesDocument( db2 )

Um dies zu verhinden habe ich auch hier im Forum einen Hinweis gefunden:
Code
If Not(db2.IsOpen) Then Call db2.Open("", "")

Leider kommt die Fehlermeldung noch immer, und im Debugger ist der Status
von DB2 (ISOPEN = False).

Hat jemand evtl. eine Erklärung dafür ???

Vielen Dank.

Gruß René
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: RenderToRTItem
« Antwort #1 am: 24.10.05 - 13:51:35 »
Hi,

ist die DB an der entsprechenden Stelle auf dem angegebenen Server auch vorhanden? Hast du ausreichende Zugriffsrechte?


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
Arghhh
« Antwort #2 am: 24.10.05 - 14:01:32 »
Arghhh!

Ich bin ja so selten dämlich!

Natürlich vergesse ich das die DB nicht direkt im Data Verzeichnis ist, sondern in einem Unterodner.
Klappt jetzt wunderbar.

Ich sollte wohl besser erstmal nen starken Kaffe kochen... ;-)

Vielleicht aber noch eine Frage:

Das Dokument in meiner DB ist ein Antwortdokument.

Ich möchte beim Betätigen des Aktions-Buttons natürlich das zu erstellende Dokument dem übergeordneten Dokument zuweisen. Wie könnte ich das realisieren?

Vielen Dank!

Gruß René
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

Offline ghost

  • Aktives Mitglied
  • ***
  • Beiträge: 174
  • Geschlecht: Männlich
  • Notes ist gut!
Re: RenderToRTItem
« Antwort #3 am: 24.10.05 - 14:07:12 »
Call notesDocument.MakeResponse( document )

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
Re: RenderToRTItem
« Antwort #4 am: 24.10.05 - 14:20:15 »
Zitat
Call notesDocument.MakeResponse( document )
?

Danke für den Hinweis. Hilft mir leider aber nicht so.

Ich sollte das vielleicht noch genauer beschreiben:

Also ich öffnen ein Notes Memo. Dieses Dokument möchte ich dann einem bestimmten
Dokument in meiner anderen DB zuordnen.

Bei der anderen DB geht es um EDV-Aufträge, denen ich zugehörige Mails anheften möchte.
Dazu habe ich zu der Maske "EDV Aufträge" eine Maske (Antwort-Dokument) "Mails" in die ich per RenderToRTItem den Inhalt der NotesMail kopieren möchte.

Ich müsste also eine Möglichkeit schaffen nach dem Klick auf den besagten Button: erstmal den zugehörigen EDV-Auftrag zu wählen. Am besten über eine Ansicht.

Wie wär das machbar?
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: RenderToRTItem
« Antwort #5 am: 24.10.05 - 14:41:28 »
Ich müsste also eine Möglichkeit schaffen nach dem Klick auf den besagten Button: erstmal den zugehörigen EDV-Auftrag zu wählen. Am besten über eine Ansicht.

Wie wär das machbar?

Schau dir in der Designer-Hilfe mal die Methode PickListCollection aus der NotesUIWorkspace-Klasse an. Damit kannst du das realisieren.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
Eine Lösung
« Antwort #6 am: 24.10.05 - 17:33:52 »
Hi!

So ich habe mit jetzt mal eine Lösung gebastelt die funktioniert:

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim db As NotesDatabase
	Dim uidoc As NotesUIDocument
	Dim docA As NotesDocument
	Dim docB As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim success As Variant
	Dim collection As NotesDocumentCollection
	Dim docColl As NotesDocument
	
	Set db = session.GetDatabase("domino", "Entwicklung\IT.nsf")
	Set uidoc = workspace.CurrentDocument
	Set docA = uidoc.Document
	If Not(db.IsOpen) Then Call db.Open("", "")
	
	strView = "lkp_auftraege"
	strServer = "domino"
	strDBName = "Entwicklung\IT.nsf"
	
	Set collection = workspace.PickListCollection( PICKLIST_CUSTOM, True, strServer, strDBName, strView, "Auswahl des EDV Auftrages", "Bitte wählen Sie den zugehörigen Auftrag aus:")
	
	If collection Is Nothing Then
		Msgbox "Abbruch"
	Else
		
		Set docColl = collection.GetFirstDocument
		If docColl Is Nothing Then
			Exit Sub
		Else
			Do While Not docColl Is Nothing
				
				Set docB = New NotesDocument( db )
				Call docB.MakeResponse(docColl)
				Call docB.Save( True, True )
				docB.mail_thema = docA.Subject
				docB.doctype = "mail"
				Set rtitem = New NotesRichTextItem( docB, "mail_body" )
				docB.Form = "edv_mail"
				
				Call docB.Save( True, True )
				success = docA.RenderToRTItem( rtitem )
				Call docB.Save( True, True )
				Set docColl = collection.getNextDocument (docColl)
			Loop
			
			
		End If
	End If
	
End Sub

Ich habe hier mal den Code aus 2 Beiträgen im Forum genutzt.

Vielen Dank Euch allen.

Gruß René
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz