Domino 9 und frühere Versionen > ND8: Entwicklung

Mit Agent auf andere DB zugreifen

<< < (4/9) > >>

Peter Klett:
Du musst sauber zwischen Form und Dokument trennen. Das eine hat mit dem anderen nichts zu tun.

Set doc = db.Createdocument()
doc.Form = "file.path.dialog"

Nach diesemScript hast Du ein neues Dokument in der Datenbank db, das ein Item mit dem Namen "Form" hat und dessen Inhalt "file.path.dialog" lautet. Nicht mehr und nicht weniger.

Deshalb kracht Dir Set Excel = doc.Getattachment("ExcelSheet.xls"), denn doc hat kein Attachment. Woher auch?

Hast Du die Exceldatei in die Form gehängt, um später darauf zuzugreifen? Dann baue eine Maske (Form) mit einem Richtextfeld, erzeuge mit dieser Maske ein Dokument und häng dort die Exceldatei rein. In Deinem späteren Ablauf greifst Du dann auf das Dokument zu, das Du mit der Maske erstellt hast und in dem Du die Exceldatei abgelegt hast.

Sicherlich kann man auch über eine Maske eine Exceldatei hinterlegen, aber dann musst Du auf das Gestaltungsdokument der Maske zugreifen (also auf die Form als Dokument), und nicht auf ein im Backend frisch erstelltes Dokument, dessen Form-Item zufällig den gleichen Namen hat, wie die Maske, die Du eigentlich haben möchtest. Dieser Weg ist aber eher ungewöhnlich. Was passiert, wenn sich die Exceldatei ändert? Dann muss die in der Form geändert werden, dazu benötigt man Designerrechte, ausgelagert in ein Dokument kommst Du mit Autorenrechten (bei entsprechender Autorensteuerung), auf jeden Fall aber mit Editorrechten zurecht. Es ist dann eine Datenänderung und keine Gestaltungsänderung.

Das ist sinngemäß das gleiche, wie ghostmw auch geschrieben hat, ich speichere es trotzdem, weil es mich schon ein paar Minuten gekostet hat ...

yannick:
Erstmal danke für die Antworten. Auch wenn es "sinngemäß" das gleiche war, hat mir dein Post nochmal weitergeholfen, Peter.
Also ich habe jetzt eine einfache Form mit einem RT-Item erstellt. Die Form habe ich dann geöffnet und in Notes über Import meine Excel-Datei eingefügt und das Dokument abgespeichert. Habe mir dann grad eine View gemacht, in der nur dieses Dokument  zu sehen ist um die NoteID über die Properties herauszufinden. Diese ist doch die letzte Reihe unter Documents-ID (nur ohne NT), oder bin ich da falsch? Dann habe ich versucht über db.getDocumentByID auf dieses Dokument zuzugreifen. Nur jetzt weiß ich nicht genau wie ich die Datei aus dem RT-Feld in mein Variant im Agent bekomme. Hier ist was ich soweit habe und wo es hängt:

--- Code: --- Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim Excel As Variant

Set db = session.currentDatabase()
Set doc = db.Createdocument()
Set Excel = CreateObject("Excel.Application")
Set doc = db.Getdocumentbyid("000036AE")
--- Ende Code ---
Ist das bisher soweit richtig? Jetzt hätte ich mit doc.getEmbeddedObjects weitergemacht, aber dann bekomme ich immer einen Fehler...

An dieser Stelle danke ich noch einmal rechtherzlich für die tolle Hilfe in diesem Forum!

Peter Klett:
Ich würde nicht über die NoteID auf das Dokument zugreifen. Wird das Dokument gelöscht und neu erstellt, hat es eine andere NoteID, m.W. hat es das sogar schon in einer anderen Replik.

Erstell Dir eine Ansicht, in der das Dokument angezeigt wird. In der ersten sortierten Spalte gibst Du einen festen Wet aus, z.B. "Einstellungen". Mit Set doc = view.GetDocumentByKey ("Einstellungen", True) kannst Du dann das Dokument direkt ansprechen, ohne eine ID fest verdrahten zu müssen.

Du schreibst, dass Du die Datei importiert hast. Ich hätte sie angehängt, meintest Du das?

Die Datei hängt am RichtextItem, schau Dir in der Hilfe die Klasse NotesRichtextItem an, aus dem Item holst Du aus den EmbeddedObjects die Datei und legst sie temporär auf der Festplatte ab (ExtractFile, vermutlich in NotesEmbeddedObject, müsste ich auch nachsehen). In der Hilfe gibt es bestimmt ein Beispielscript.

Falls Du am Ende des Prozesses (ok, da bist Du noch lange nicht) die Datei wieder löschen willst, lautet der Befehl dazu Kill.

yannick:

--- Zitat von: Peter Klett am 07.08.12 - 10:10:51 ---Erstell Dir eine Ansicht, in der das Dokument angezeigt wird. In der ersten sortierten Spalte gibst Du einen festen Wet aus, z.B. "Einstellungen". Mit Set doc = view.GetDocumentByKey ("Einstellungen", True) kannst Du dann das Dokument direkt ansprechen, ohne eine ID fest verdrahten zu müssen.

Die Datei hängt am RichtextItem, schau Dir in der Hilfe die Klasse NotesRichtextItem an, aus dem Item holst Du aus den EmbeddedObjects die Datei und legst sie temporär auf der Festplatte ab (ExtractFile, vermutlich in NotesEmbeddedObject, müsste ich auch nachsehen). In der Hilfe gibt es bestimmt ein Beispielscript.
--- Ende Zitat ---
Okay, ich habe jetzt aus meiner View (in der immer nur dieses eine Dokument angezeigt wird) das "erste" Dokument rausgeholt, aus dem Dokument dann das RT-Item, und daraus wiederum das Object. Anschließend in C:\temp gespeichert.
Dazu jetzt meine nächste Frage. Es war eigentlich geplant, dass der Vorgang automatisch auf dem Server läuft, sprich der Agent täglich oder wöchentlich automatisch ausgeführt wird. Kann ich dann trotzdem auf dem Server die Excel-Datei temporär speichern? Bisher habe ich das jetzt nur auf meiner lokal kopierten Test-DB getestet...

Peter Klett:
ja, machen wir automatisch mit mindestens 1000 Mails pro Nacht (Dateien temporär zu speichern, allerdings kein Excel).

Hast Du Excel auf dem Server installiert?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln