Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Alexis am 14.06.06 - 14:27:06

Titel: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 14.06.06 - 14:27:06
Hallo Forum,

folgende Idee möchte ich gern in Script realisieren, habe aber noch nicht den rechten Einstieg, wie das zu bewerkstelligen ist:

Heute: In der Datenbank A ist ein Dokument a mit einem Link auf ein Dokument b der Datenbank B. Per Doppelklick auf das Dokument A öffnet sich die Maske mit den Feldern des Dokumentes b. Darunter ein RTField mit einem Attachment, welches per Doppelklick geöffnet werden kann.

Wunsch für morgen: Der Doppelklick auf Dokument a führt sofort zum Öffnen des Attachments im Dokument b. Der Doclink sollte wie schon heute per CopyAsDocumentLink erzeugt werden können.

Kann mir jemand dafür einen Ansatz geben?

Alexis

 
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Lossa am 14.06.06 - 14:30:02
Hi,

du kannst in den Eigenschaften der Maske (Starten Reiter) angeben, das automatisch der erste Dateianhang gestartet werden soll. Funktioniert zuverlässung und gut.
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Lossa am 14.06.06 - 14:31:05
Ergänzung:

Hi,

ich meine damit natürlich die Maske in Datenbank B, dort wo der Anhang drin ist.
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 14.06.06 - 14:45:43
Hallo Jossa,

meine Nachlässigkeit! Ich habe nicht erwähnt, dass in jener Datenbank B dieser Eintrag NICHT gesetzt wird (frag mich nicht warum).

Gibt es trotzdem einen workaround?

Alexis

Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Lossa am 14.06.06 - 14:51:52
Was meinst du damit?
Zitat
ch habe nicht erwähnt, dass in jener Datenbank B dieser Eintrag NICHT gesetzt wird (frag mich nicht warum).

Ist der Dateianhang nun in der DB B drin oder nicht?
Kannst du das Design der DB B nicht anpassen?
Wenn ja, dann brauchst du kein Workaround.
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 14.06.06 - 16:07:44
Hallo Jossa,

leider ist das Design der Datenban B für mich verschlossen. Die Datenbank wird in der Konzernspitze betreut mit externer Entwicklung. Da ist nichts zu machen >:D.

Insofern hoffe ich auf ein workaround.

Alexis
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Lossa am 15.06.06 - 11:54:08
Das ist natürlich sehr ungünstig!

Da fällt mir nur ein das du in der Maske in DB A einen Knopf machst, der das bezugsdokument in DB B holt und den Anhang löst und dann per shell ausführt.
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 15.06.06 - 12:53:17
Hallo Jossa , hallo Forum,

ok, der Weg ist nun klar:

- Linkdaten im QueryOpen des Dokuments a holen
- Dokument b adressieren, Feld mit Attachment suchen
- Attachment öffnen.
 
Leider fehlt mir das knowhow, das Attachment zu öffnen. Hier der Code so weit.

Code
Dim session As New NotesSession
	Dim rti As NotesRichTextItem
	Dim rtnav As NotesRichTextNavigator
	Dim rtlink As NotesRichTextDocLink
	Dim db As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	
	Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	Set doc = collection.GetFirstDocument()
	Set rti = doc.GetFirstItem("Link")
	Set rtnav = rti.CreateNavigator
	
	If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
		Messagebox "No doclinks in Link item",, "No doclinks"
	Else
		Set rtlink = rtnav.GetElement 'DocLink Objekt
	End If
	
	Dim doc2 As NotesDocument
	Dim db2 As NotesDatabase
	Set db2 = session.GetDatabase("","DB267.NSF")
	Set doc2 = db2.getDocumentByUNID(rtlink.DocUNID) 'Elemente des DocLinks
	Set rtitem = doc2.GetFirstItem( "Body" )
	If rtitem Is Nothing Then 
		Messagebox "Kein Attachment vorhanden"
	Else 
		Messagebox "Attachmant vorhanden"
	End If

Gibt es vielleicht eine Möglichkeit das Attachment direkt zu öffnen, ohne es zu detachen?

Dank für jede Hilfe

Alexis
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Lossa am 15.06.06 - 13:07:53
Hi,

so spontan ist mir nicht bekannt, das mittels LS das anders geht als den Anhang zu lösen und dann zu starten.

Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 15.06.06 - 16:59:56
Hi,

mühsam ernährt sich das Eichhörnchen ....

Bin jetzt so weit, dass das Attachment auf dem Filesystem gelandet ist.

Wie öffne ich das File nun per Script (PDF only)?

Alexis
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: it898ur am 16.06.06 - 08:43:03
Für das Öffnen einer Datei mit der zugehörigen Standardanwendung reicht

taskid = Shell("cmd.exe /c start " + Dateiname , 0)   

wobei Dateiname den lokalen Speicherort der Datei umfasst.

André
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 17.06.06 - 20:35:32
Hallo Forum,

Problem gelöst :-*. Danke für alle Beiträge und dem Forum, DIE Fundgrube schlechthin :D!

Wen's interessiert hier der Code:

Code
Sub Postopen(Source As Notesuidocument)
	Dim session As New NotesSession
	Dim rti As NotesRichTextItem
	Dim rtnav As NotesRichTextNavigator
	Dim rtlink As NotesRichTextDocLink
	Dim db As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	
	Set doc = source.Document
	If doc.IsNewNote Or source.EditMode Then Exit Sub
	
	Set rti = doc.GetFirstItem("Link")
	Set rtnav = rti.CreateNavigator
	
	If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
		Messagebox "No doclinks in Link item",, "No doclinks"
	Else
		Set rtlink = rtnav.GetElement
	End If
	
	Call doc.Save(False,False)
	Dim doc2 As NotesDocument
	Dim db2 As New NotesDatabase( "", "" )
	If Not db2.OpenByReplicaID( "", rtlink.DbReplicaID ) Then Messagebox "Unable to open database" 
	
	Set doc2 = db2.getDocumentByUNID(rtlink.DocUNID)
	Set rtitem = doc2.GetFirstItem( "pdf" )
	If rtitem Is Nothing Then 
		Messagebox "No attachment available"
	Else 
		Dim file As String
		Forall all In rtitem.EmbeddedObjects
			If ( all.Type = EMBED_ATTACHMENT ) Then
				file = Join(Split("c:\" & all.Name, " "), "")
				Call all.ExtractFile (File)				
				taskid = Shell("cmd.exe /c start " + file , 0)
			End If	
		End Forall
		
	End If
	Call Source.Close(True)
End Sub
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: koehlerbv am 17.06.06 - 22:07:33
Nur eine Frage am Rande;
Was machst Du eigentlich hier
Code
file = Join(Split("c:\" & all.Name, " "), "")
mit der Join / Split-Kombination? Wozu soll die gut sein?

Abgesehen davon: Über Deinen Code wird sich der eine odere andere, der da noch einen Denkanstoss im "Handwerk Coding" benötigt, sicherlich sehr freuen!

Bernhard
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: Alexis am 18.06.06 - 10:21:23
Hallo Bernhard,

die Zeile

Code
file = Join(Split("c:\" & all.Name, " "), "")

habe ich eingefügt, weil beim Öffnen der exportierten Datei der Dateinamen mit Blanks nicht richtig erkannt wird: "MeinFile XYZ" versucht der Shellaufruf als "Meinfile" zu öffnen, was natürlich nicht gelingt.

Alexis
Titel: Re: Attachment einer anderen DB öffnen
Beitrag von: koehlerbv am 18.06.06 - 12:14:20
Ah ja - ich hätte mir die Anzahl bzw. nicht vorhandene Zahl von Leerzeichen in den Parametern genauer anschauen sollen ...

Du hättest aber natürlich auch statt der Join / Split-Kombination auch Replace verwenden können.

Bernhard