Autor Thema: Word-Dokumente an Notes Dokumente per Programm anhängen oder darin einfügen  (Gelesen 9584 mal)

Offline Wetterhexe

  • Frischling
  • *
  • Beiträge: 3
Ich möchte Word-Dokumente an Lotus Notes Dokumente per Programm anhängen oder darin einfügen. Ich habe mehrere unterschiedliche Ansätze gemacht, um das Problem zu lösen. Jeder Versuch hat zu anderen Problemen geführt. Daher habe ich jetzt eine ganze Reihe Fragen
 
Mein 1. Versuch: Einbau einer Schaltfläche  „ Datei einfügen“ins Notes-Dokument.
Diese Schaltfläche habe ich mit dem Befehl EditInsert der Formelsprache hinterlegt. Nach meinem Verständnis macht dieser Befehl das gleiche wie Erstellen Objekt im Dialog. Leider funktioniert das überhaupt nicht, ich bekomme die Fehlermeldung „Angegebener Befehl kann nicht ausgeführt werden.“ Wer weiß, warum das nicht funktioniert oder wie es funktioniert?

Mein 2. Versuch: Per Lotus-Skript-Programm ein neues Notes-Dokument anlegen, in das das Word-Dokument eingebettet wird. Ich verwende die Klasse RichtextItem mit der Methode EmbedObject. Laut Beschreibung kann man zwischen 3 Typen auswählen 1) ATTACHMENT, 2)EMBEDDED_OBJECT 3) OBJECT_LINK. Bei mir klappt aber nur das Attachment, bei EmbeddedObject oder ObjectLink passiert gar nichts. Weiß jemand warum die anderen beiden Typen nichts tun?
Aber auch mit dem funktionierenden Attachment hat das ganze einen ziemlichen Haken. Dem neu erstellten Dokument weise ich mit
Doc.form = „Maskenname“
eine Maske zu.
Trotzdem werden mir die so per Programm angelegten notes-Dokumente in Ansichten, die diese Maske verwenden nicht angezeigt.
Wie schaffe ich es, dass ich die neuen notes-Dokumente auch in Ansichten sehen kann?

Mein 3. Versuch: Per Lotus-Skript-Programm in einem vorhandenen Notes-Dokument, das auch aktuell geöffnet ist (also übers Front End angesprochen wird), das Word-Dokument einfügen. Ich verwende folgenden Code:

   Set doc = uidoc.document
   
   For I = 1 To 100
      RTF = "KAngebot" & I
      Set rtffeld = doc.GetFirstItem( RTF)
      
      If  rtffeld Is Nothing Then
         Set rtffeld = doc.CreateRichTextItem (RTF)
         Exit For
      End If
   Next
   Set ebo = rtffeld.EmbedObject (EMBED_ATTACHMENT, "",  "C:\Dokumente …)

Auch das klappt nur für den Typ Attachment. Aber jetzt gibt’s gleich mehrere Merkwürdigkeiten:

·   Die Datei-Anhänge lassen sich nicht mehr aus dem Notes-Dokument löschen. In allen Menues ist das Löschen deaktiviert. Wie kriege ich das Attachment wieder aus dem Notes-Dokument raus?
·   Vollkommen unabhängig davon, welchen Feldnamen ich für das verwendete RichTextFeld angebe, wird der Anhang immer am Ende des Dokuments erstellt. Wie krieg ich das Attachment genau in das dafür vorgesehene Maskenfeld rein?

Wer hat Erfahrungen mit meinen Problemen?

Gruß
Wetterhexe
















Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
a) Herzlich willkommen.

b) Ein wenig mehr Code wäre in jedem Fall nicht schlecht, da auch immer das Umfeld wichtig ist.

c) Zu Deinen Fragen:

ad (1):
Hast Du den Button in ein Dokument oder in ein Form eingebaut? "@Command( [EditInsertFileAttachment] )" schon mal angesehen?

ad (2):
Auf welcher Plattform bewegst Du Dich? Die Designer-Hilfe meint:
Zitat
Embedded objects and object links are not supported for OS/2, UNIX, and the Macintosh. File attachments are.
...
Files can be attached on any Notes platform, but objects and links can only be created on platforms supporting OLE.

Weiters: Ich habe mir angewöhnt, unter Perl nicht die Kurznotation, sondern die Methoden zu verwenden. Das macht das Ganze einfacher:
Code
$doc = $db->CreateDocument();
$doc->replaceItemValue("Form", "stat");
..
if( $doc->Save(1,0) ) { ...


ad (3) Der Code schaut so aus, als würdest Du weiterhin mit einem Backend-Dokument arbeiten. Das ist - im Zusammenspiel mit einem Frontend-Dokument und RTFs keine so gute Idee (siehe Forumssuche).

Und zum Thema Attachments vs. Inline Attachments kannst Du Dich mal mit Ben unterhalten. Der weiß dazu VIELE Geschichten.

"Working with attachments and embedded objects in LotusScript classes" in der Designer-Hilfe hast Du schon durch?

P.S.: Sei so nett und beachte die Forumsregeln:
Zitat
2.2 Nickname
     Am liebsten ist es uns, wenn Du Deinen richtigen Namen, oder wenigstens Deinen richtigen Vornamen verwendest.
Wenn Du einen Phantasienamen gewählt hast, wäre es schön, wenn Du in Deiner Signatur Deinen (Vor-)Namen angibst.
« Letzte Änderung: 09.03.09 - 19:44:40 von m3 »
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Wetterhexe

  • Frischling
  • *
  • Beiträge: 3
Hallo m3,

herzlichen Dank für Deine schnelle Antwort. Zu Deinen Anmerkungen: Ich arbeite unter Windows XP. Da ich im Dialog die gewünschten Dateien an die geplante Maske (RTF-Feld) anhängen und darin einbetten kann, war meine Folgerung, dass das auch per Programm gehen sollte. Deshalb ist mir auch unverständlich, warum das gerade in der Formelsprache mit den Befehlen EditInsert und EditINsert([FileAttachment]) nicht funktioniert. Und dann diese nichtssagende Fehlermeldung ("Angegebener Befehl kann nicht ausgeführt werden), das ist alles nicht plausibel für mich. Ich würde mich freuen, wenn mir jemand Näheres erklären könnte.

Immerhin habe ich ja das Anhängen im 3. Anlauf geschafft. Und zwar aus dem Front-End mit

                                    Set doc = uidoc.document

ins Back-End.  Dann mit folgender Schleife ein geeignetes RTF-Feld anlegen. Das ist nötig, weil möglicherweise mehrere Dateien angehängt werden.

                                    For I = 1 To 100
                                        RTF = "KAngebot" & I
                                        Set rtffeld = doc.GetFirstItem( RTF)
     
                                        If  rtffeld Is Nothing Then
                                            Set rtffeld = doc.CreateRichTextItem (RTF)
                                            Exit For
                                        End If
                                  Next

Dann Datei-Attachment in ausgewähltes RTF-Feld einbetten

                                     Set ebo = rtffeld.EmbedObject (EMBED_ATTACHMENT, "",  "C:\Dokumente …)

Anschliessend mache ich nur noch einen

                                     Call Save (True, True)

und einen
                                     Call Reload ().

Fertig!!!
Ich wäre auch hochzufrieden mit allem, aber jetzt sind die Attachments nicht mehr aus dem Dokument rauszukriegen und das darf nicht so bleiben. Kennt jemand dieses Phänomen? und wie kann man es umgehen? Ich freue mich über jeden Hinweis.

Gruß
Wetterhexe Gitti

Offline Kadlec

  • Senior Mitglied
  • ****
  • Beiträge: 489
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo kann es sein das Dein Cursor nicht in dem entsprechenden Feld steht??
Für Edit Insert etc. muss das so sein (Dokument im Edit Mode und Cursor im entsprechenden Feld.

Boris

Offline Wetterhexe

  • Frischling
  • *
  • Beiträge: 3
Danke, Bodo für den Tipp.

Hatte tatsächlich vergessen, beim Ausführen des EditInsert den Cursor ins RTF-Feld zu setzen. Allerdings habe ich jetzt noch das Problem, das notes alle "\" im Dateipfad entfernt und dann meine Datei nicht findet. Was muss ich angegeben, damit das nicht passiert?

Gruß
Wetterhexe Gitti

klaussal

  • Gast
mit \\ versuchen.

Beispiel:  C:\\123W\\PROGRAMME\\123W.EXE

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
hi,
ich hätte da mal ne frage. Ich möchte eine csv Datei in meine Maske einfügen durch einen Agenten. wenn ich den Agenten laufen lasse sehe ich die Datei nicht kann mir da jmd weiter hlefen vllt ? Danke =)

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim object As NotesEmbeddedObject
   Set db = session.CurrentDatabase
   Set doc = New NotesDocument( db )
   
   
   doc.form = "maÜbersicht"
   Set rtitem = New NotesRichTextItem( doc, "Body" )
   Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", "E:\Test\ExportDocuments.csv")
   Call doc.Save( True, True )
End Sub

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Das Script sieht gut aus. Falls in der Maske kein Feld Body existiert, sollte der Dateianhang unten im Dokument sichtbar sein. Um ihn wirklich zu verbergen, müsste sich "Body" in einem geschlossenen Abschnitt befinden (falls nicht, also immer irgendwo zu sehen sein).

Ich würde in der Felderliste des Dokuments nachschauen, ob ein Item $FILE angelegt wurde, falls nicht, ist die Datei nicht angehängt worden.

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
mein Feld "Body" existiert in der MAske laut debugger funktionierts auch keine Fehlermeldung vorhanden. Aber ich kann die Datei nciht sehen .... :S

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Was ist mit $FILE?

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Hallo,

Und das Dokument wird anschliessend auch geschlossen?


Andreas

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Wenn das angegebene Script vollständig angegeben ist, ist das Dokument nicht geöffnet, denn es wird neu erstellt, die Datei angehängt und dann gespeichert.

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
also jetzt sieht es so aus meinst du das vllt so mit dem  file$

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim object As NotesEmbeddedObject
   Dim pathName As String, fileName As String
   
   
   Set db = session.CurrentDatabase
   Set doc = New NotesDocument( db )
   
   pathName$ = "E:\Test\ExportDocuments.csv"
   fileName$ = Dir$(pathName$, 0)
   
   doc.form = "maÜbersicht"
   Set rtitem = New NotesRichTextItem( doc, "Body" )
   Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", "E:\Test\ExportDocuments.csv")
   Call doc.Save( True, True )
   
End Sub

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Nein, ich meinte, Du solltest das neu erstellte Dokument markieren, dann Eigenschaften Dokument und dann in der Felderliste (2. Lasche) nachschauen, ob das Item $FILE in dem Dokument existiert.

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
nein existiert nicht. Was soll das Feld bedeuten? wie könnte ich das problem beheben

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Wo startest Du die Aktion, per Schaltfläche in einem geöffneten Dokument?

Deine Aktion erstellt in der aktuellen Datenbank ein neues Dokument, gibt dem den Maskennamen "maÜbersicht", hängt die Datei an das Feld "Body" und speichert das Dokument.

Wenn Du Dir dieses neu erstellte Dokument anschaust, wird dort ein Dateianhang enthalten sein.

Das Item $FILE weist auf eine angehängte Datei hin. Wenn ein Dokument kein Item $FILE hat (es könnte auch mehrere haben), hat es auch keinen Dateianhang.

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
ich öffne in der Ansicht ein bereits vorhandenes Dokument. Dann in der Maske hab ich schon mein Feld Body....in der Maske starte ich dann den Agenten.

schon dann möchte ich die csv Datei in dem Feld als anhang sehen können...

laut script sollte es doch stimmen oder?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Das Script tut genau das, was Du ihm sagst, aber nicht das, was Du von ihm willst.

Wie gesagt, Du erstellst ein neues Dokument mit der Aktion. Falls Du mit dem geöffneten Dokument arbeiten möchtest, solltest Du Dir NotesUIWorkspace ansehen, und mit .CurrentDocument auf das aktuelle Dokument zugreifen.

Wenn Du dann im Backend die Datei anhängst und danach das geöffnete Dokument über das Frontend speicherst, wird Datei vermutlich wieder weg sein.

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
hab ein fehler von mir gefunden unzwar möchte ich kein neues dokument erstellen sondern ein bestehendes ändern, sprich die csv datei anhängen

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim object As NotesEmbeddedObject
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   
   Set uidoc = workspace.CurrentDocument
   Set db = session.CurrentDatabase
   Set doc = New NotesDocument( db )
   
   doc.form = "maÜbersicht"
   Set ritem = doc.GetFirstItem("Body")
   Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", "E:\TestKUR\ExportDocuments.csv")
   Call doc.Save( True, True )
   
End Sub


aber es funktioniert immer noch nicht so wie ich es mir vorstelle. denn meine csv datei ist immer noch nicht in dem Feld "Body"

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
achso dann kommt ne meldung

Object variable not set .............

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz