Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: DrNotes am 08.11.05 - 15:37:43
-
Hallo Leute,
ich kämpfe mit folgendem Spezialproblem:
Ich verwende in meiner Datenbank Dokumente mit eingebetten Objekten, wie etwa eine Projekt-Kalkulation (Excel-Sheet), eine Bestellung (Word-Dokument), etc.
Nun mein Problem:
Einige Mitarbeiter unserer Firma vertreten die Meinung, dass dieses Funktionalität nur Sinn macht, wenn man diese Dokumente auch mailen kann.
Wenn ich jetzt die Funktion "In neues Memo kopieren" verwende, hábe ich das Problem, dass der Empfänger das eingebette Objekt nicht lösen kann (wie beim Attachment).
Daher meine Überlegung:
Ich bräuchte eine Routine, die mir das eingebettet Objekt löst (z.B: nach C:\Temp) und dann dieses Attchment in mein Memo als Attachment anhängt.
Geht das irgendwie bzw. hat jemand eine Lösung für dieses Problem parad?
Wäre für eventuelle Antworten sehr dankbar.
-
Hi,
du must ein Scriplt schreiben, das beim Forward das OLE Object startet, und dann mittels der entsprechende OLE-Befehle des Objectes dieses speichert, das OLE schliesst und den Anhang in eine Mail einbindet.
BTW: Warum machst du dass ganze denn überhaupt mit OLE, spätestens wenn ihr ein Update der aktuelle Software macht, oder aber vieleicht irgendwann einmal den Hersteller wechselt, dann sind alle OLE Objekte unnutzbar. Frei nach dem Motto: "Mit Anhängen wär das jetzt nicht passiert". Mal drüber nachdenken.
-
Hallo Leute,
ich kämpfe mit folgendem Spezialproblem:
...........
So, mein obiges Problem hab ich gelöst......
strPathFile = strV & o.Source & strExtension
Set handle = o.Activate( False)
handle.SaveAs(strPathFile)
Call o.remove()
Dim object As NotesEmbeddedObject
Set object = rtitemNew.EmbedObject(EMBED_ATTACHMENT, strClass, strPathFile)
Kill strPathFile
...allerdings gibt's einen Wermutstropfen:
Wenn ich das mit z.B. einem Word-Dokument teste, bleibt anschliessend der Word-Task im Hintergrund bestehen.
Ich habe schon etliche "Kill-Varianten" getestet, leider ohne Erfolg, wie etwa:
handle.Quit(False)
Set handle = Nothing
........................
Hat vielleicht jemand eine Idee, wie ich diesen Hintergrund-Task wieder los werde?
-
Hallo Leute,
ich kämpfe mit folgendem Spezialproblem:
...........
So, mein obiges Problem hab ich gelöst......
strPathFile = strV & o.Source & strExtension
Set handle = o.Activate( False)
handle.SaveAs(strPathFile)
Call o.remove()
Dim object As NotesEmbeddedObject
Set object = rtitemNew.EmbedObject(EMBED_ATTACHMENT, strClass, strPathFile)
Kill strPathFile
...allerdings gibt's einen Wermutstropfen:
Wenn ich das mit z.B. einem Word-Dokument teste, bleibt anschliessend der Word-Task im Hintergrund bestehen.
Ich habe schon etliche "Kill-Varianten" getestet, leider ohne Erfolg, wie etwa:
handle.Quit(False)
Set handle = Nothing
........................
Hat vielleicht jemand eine Idee, wie ich diesen Hintergrund-Task wieder los werde?
Hallo Leute,
ich verzweifle langsam mit meinem Problem:
*) Word: das hier der Hintergrund-Task weiterläuft stört mich derzeit ja nicht einmal so sehr, aber
*) beim Excel konvertiert er zwar brav das eingebettet Objekt in ein Attachment, allerdings muss
ich beim Öffnen desselben dann im Excel-Menü "Fenster" -> "Einblenden" klicken, damit ich die Excel-Tabelle sehe.
Eigenartigerweise scheint das Excel den Activate(False)-Befehl als "Fenster" -> "Ausblenden" zu interpretieren.
*) im WordPro, Powerpoint, Ms-Project funktioiniert alles wunderbar.
So, jetzt versuche ich meine Lösung über eine zweite Idee:
1) Ich ermittle zuerst den Applikation-Typ des eingebetten Objekts (Word, Excel)
2) starte die Applikation im Hintergrund und
3) lege dann das eingebette Objekt zum Abspeichern in die jeweilige Applikation (ich verzichte also auf die Activate-Fkt.)
Woran ich scheitere, wie ich der Methode "GetEmbeddedObject (Name)" den "Namen" zuweisen kann. ???
Konkretes Beispiel:
Ich habe in meinem Dokument ein eingebettes Excel, das den Notes-Internen-Namen "EXT23694"
hat, wenn ich jetzt aber die Zuweisung mache,
Set neo =rtitem.getembeddedObject("EXT23694")
ist neo nach wie vor leer - ich kapiers einfach nicht.
Also meine Idee schaut ca. so aus:
Dim neo As NotesEmbeddedObject
Forall o In rtitemSource.EmbeddedObjects (o.Source zeigt "EXT23694" an!!!)
Select Case o.Type
Case EMBED_OBJECT:
strClass = o.Class
Case "Excel.Sheet.8"
Set neo =rtitem.getembeddedObject("EXT23694")
Set excelappobject = neo.object
excelappobject.visible = False
Set excelworksheetobject = excelAppObject.activesheet
excelAppObject.Activeworkbook.SaveAs "c:\temp\"EXT23694.xls"
excelAppObject.Activeworkbook.close
Mit dieser Version hoffe ich, dass
1) Word im Hintergrund wieder geschlossen wird
2) das Excel-Sheet beim Öffnen des konvertierten Attachments sichtbar ist.
Danke an alle, die mir einen Tipp geben können.
-
Ich hatte damit nur am Rande zu tun, aber wenn ich mich recht erinnere mußte bei uns jemand mal eine C-Routine schreiben, um aus einem OLE-Objekt die entsprechende Datei zu extrahieren. Ein OLE-Objekt ist nämlich gar nicht "die Datei" sondern eine Dateienstruktur. Sie besteht aus mehreren Files, die zusammengepackt sind ähnlich wie eine jar-Datei in Java.
Gruß Axel
-
"Doktor" Notes, Du beschreibst hier auf jeden Fall ein interessantes und entsprechend Deiner gegenwärtigen Umgebung bereits teilweise gelöstes Problem.
Ich sehe das aber genauso wie Ulrich-Thomas Lossa: Dein Problem ist interessant, aber rein akademisch. Was passiert mit der nächsten Version, die eventuell neue Methoden und Eigenschaften aufweist ? Was ist, wenn ein weiteres Programm berücksichtigt werden muss ?
Eingebettete Objekte sind Momentaufnahmen des Systems. in dem sie gerade herumlungern. Diese per Mail verschicken zu wollen, ist ein zum Scheitern verurteiltes Projekt - zumindest, was Dauerhaftigkeit angeht.
Wenn man später auf längst nicht mehr verwendete Apps zurückgreifen müsste, um die eigentliche Datei zu lösen, gilt genau das, was Axel gerade gepostet hat.
Bernhard
-
Ich hab ziemlich lange in Google gesucht und nichts gefunden. Allerdings bin ich bei diesem ganzen OLE/Com, Microsoft-Zeug leider auch nicht so ein Experte.
Auf einer Ebene kann ich Bernhard nur zustimmen. Wobei diese eingebetteten Objekte natürlich vom Business Standpunkt D.A.T.E.N. sind, also etwas, dass einen gewissen Wert darstellt und was man eventuell wieder aus der Anwendung raus haben und anderweitig weiterverarbeiten will.
Schön. Da gibt es diese netten Applikationen mit den lustig wechselnden Versionsnummern und kübelweise Apis, Apis, Apis. Schöne einfache Apis.
Daten sollten von Anwendungen getrennt sein. Gut das geht vielleicht mit Word-Dokumenten vor Word 2003 (mit xml-Beschreibung der Dokumente) nur mit Problemen. Aber man sollte doch wenigstens die ursprüngliche Datei da wieder rausziehen können.
Wie gesagt: OLE-Objekte sind eine Struktur (sieht ähnlich wie ein Zip-File aus) und da ist die Essenz, die dich interessiert (die Datei) drin. Leider weiss ich momentan nicht wie das geht, aber das sollte der Weg sein.
Hier scheint so ein Teil zu sein, mit dem man sich die OLE-Struktur schon mal anschauen kann.
http://www.codeproject.com/com/Another_OLE_Doc_Viewer.asp
-
Ich hatte damit nur am Rande zu tun, aber wenn ich mich recht erinnere mußte bei uns jemand mal eine C-Routine schreiben, um aus einem OLE-Objekt die entsprechende Datei zu extrahieren. Ein OLE-Objekt ist nämlich gar nicht "die Datei" sondern eine Dateienstruktur. Sie besteht aus mehreren Files, die zusammengepackt sind ähnlich wie eine jar-Datei in Java.
Gruß Axel
Ich glaub nicht, dass ich hier eine C-Routine brauche?
Warum, 1 (ein) eingebettetes Objekt entspricht genau einer Datei und keiner Dateistruktur?
Mein erster Lösungsansatz funktioniert ja wunderbar mit 1, 2,3.... eingebetteten Objekten.
Nur nochmals kurz zu meiner Ausgangssituation (damit wir alle vom gleichen reden):
*) Ich habe ein Dokument mit einem RT-Feld
*) ich erstelle mir z.B. eine Kalkulation.xls
*) in dieses RT-Feld lege ich mittels "Erstellen" -> "Objekt" -> "Objekt aus Datei" ->"Durchsuchen" -
> "Kalkulation.xls" das eingebettete Dokument (es könnten im schlimmsten Fall auch meherere sein, oder
gemischt mit Attachments, macht aber eigentlich keinen Sinn - meine erste Lösung würde allerdings trotzdem
funktionieren) und speichere das Dokument
*) wenn ich jetzt das Dokument samt eingebetteter Objekte mailen möchte, habe ich die Möglichkeit
*a) die Kalkulation.xls mittels "Kopie speichern als unter" auf der Festplatte abzuspeichern und in mein neues
Memo als Attachment anhängen oder
*b) ich klicke auf meinen Menüpunkt "Kopieren in neues Memo" und meine erste Lösungsmöglichkeit erledigt das
vollautomatisch.
*) mittels der "Forall o In rtitemSource.EmbeddedObjects" durchlaufe ich alle Objekte (dabei vergibt Notes einen
internen Namen für jedes eingebettete Objekt, der anscheinend immer so ausschaut"EXTxxxxx" - wie eben bei
mir konkret "EXT23694"), speichere sie und hänge sie als Attachment an.
Im Prinzip hätt ich's ja schon fast, aber ich kapier die "GetEmbeddedObject"-Methode nicht.
Warum übernimmt die mir die den Wert von o.Source ("EXT23694") nicht? - Oder gilt die Methode nur für Attachments?
Aber lt. Hilfe sollte sie ja mit einem eingebetten Objekt funktionieren?
Könntet ihr mir da vielleicht noch einmal kurz Nachhilfe geben? (In der Designer-Hilfe zeigen sie das nur mit einem Attachment namens "Jim").
Bzgl. kommender Versionen mach ich mir d e r z e i t keine Gedanken, ich brauchs eigentlich nur für Word, Excel, WordPro und MS-Projekt - und das halt jetzt (mit XP und W2k funnktioniert es ja).
Sofern ich irgenwann mal umstelle, muss ich mir halt wieder was anderes überlegen.
-
Möglicherweise gehe ich dir auf die Nerven...
Aber die Tatsache, dass keiner hier für diese Standardfragestellung aus einem eingebetteten OLE-Office-Objekt das File zu extrahieren, kann als Hinweis dafür gewertet werden, dass diese Aufgabenstellung einige Tücken hat.
Ich würds erstmal auf Microsoft Foren versuchen. Vielleicht können die ein paar Hinweise dafür liefern.
Weitere klassische Anlaufstellen sind:
- das Forum auf notes.net
- und für solche weitesgehend rich-Text verbundenen Fragestellungen auch die Webseite von Ben Langhinrich (http://www.geniisoft.com/). Irgendwo ist da auch ein Forum.
- wenn du wirklich nicht mehr weiterweisst, kannst du versuchen mit diesem Mann über den Preis unserer dll-Lösung verhandeln (obuerger AT img DOT de -> das war jetzt wirklich kein Rambo-Style Vertrieb, right? )
Gruß Axel
-
Hallo Leute,
ich kämpfe mit folgendem Spezialproblem:
...........
So, mein obiges Problem hab ich gelöst......
strPathFile = strV & o.Source & strExtension
Set handle = o.Activate( False)
handle.SaveAs(strPathFile)
Call o.remove()
Dim object As NotesEmbeddedObject
Set object = rtitemNew.EmbedObject(EMBED_ATTACHMENT, strClass, strPathFile)
Kill strPathFile
...allerdings gibt's einen Wermutstropfen:
Wenn ich das mit z.B. einem Word-Dokument teste, bleibt anschliessend der Word-Task im Hintergrund bestehen.
Ich habe schon etliche "Kill-Varianten" getestet, leider ohne Erfolg, wie etwa:
handle.Quit(False)
Set handle = Nothing
........................
Hat vielleicht jemand eine Idee, wie ich diesen Hintergrund-Task wieder los werde?
Hallo Notes-Gemeinde,
für alle die es interessiert oder ein ähnliches Problem haben:
Ich habe obige Routine verwendet mit dem einzigen Unterschied, dass ich bei Activate das True verwende, also
Set handle = o.Activate( true)
Das ganze funktioniert jetzt wunderbar, und es gibt keine Probleme mit dem
* Word-Hintergrund-Task bzw.
* mit dem versteckten Excel-Sheet.
Meine Mitarbeiter sind mit dieser Lösung sehr zufrieden, insofern bin ich es auch.
LG