Autor Thema: Anhänge aus Richtextitem starten lassen  (Gelesen 8137 mal)

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Anhänge aus Richtextitem starten lassen
« am: 01.07.08 - 13:05:07 »
Moin,moin,

ich habe eine Datenbank in der eine Maske nur für "Dateiverknüpfungen" dient. Also in der Maske ist ein Richtext-Feld in dem die Dateien im Frontend abgelegt sind.

Nun soll beim Öffnen des Dokuments direkt der Anhang gestartet werden. Mein erster Versuch war, das direkt über Autostart (erster Anhang) in den Maskeneigenschaften zu lösen. Das Problem ist, dass dann jedesmal das Fenster "mit welchem Programm wollen Sie die Datei öffnen?" erscheint. Auch wenn das Häkchen bei "Dateityp immer mit dem gewählten Programm öffnen" gesetzt wird, erscheint die Abfrage jedesmal.

Mein nächster Ansatz war, es über @Command( [AttachmentLaunch] ) zu probieren, aber dafür muss ja der Anhang ausgewählt sein.

Hat jemand eine Idee, wie ich das lösen kann, ohne die Anhänge auf Festplatte speichern zu müssen?

Gruß
Demian
Gruß
Demian

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #1 am: 16.07.08 - 13:01:50 »
Ok, da es scheinbar nicht anders zu lösen ist, würde ich mich dazu durchringen, das mit folgendem Code in der Maske zu lösen:

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
   Dim doc As NotesDocument    
   Dim item As NotesRichTextItem
   Dim obj As NotesEmbeddedObject
   Dim WScript As Variant
   
   Set doc = source.Document
   Set item = doc.GetFirstItem("Dateianhang")
   
   Set obj = doc.GetAttachment(item.EmbeddedObjects(0).name)
   obj.Activate(True)
   
   Call obj.ExtractFile("C:\" & item.EmbeddedObjects(0).name)
   
   Set WScript = CreateObject("Wscript.Shell")
   
   WScript.Run("""C:\" & item.EmbeddedObjects(0).name & """")
   
   'Kill """C:\" & item.EmbeddedObjects(0).name & """"
   
   Set Wscript = Nothing   
End Sub


Allerdings habe ich dann ein Problem mit dem Löschen. Gelöscht werden kann ja nur, wenn die Datei nicht mehr geöffnet ist.

Wscript.run  beinhaltet zwar einen Parameter, der bewirken soll, das das Skript so lange gestoppt wird, bis die Anwendung wieder geschlossen wird, aber es irgendwie läuft der Code bei mir trotzdem weiter. Ich habe mich hier orientiert: http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx

Oder ich interpretiere den Satz: If set to true, script execution halts until the program finishes falsch.

Aber irgendwie muss das doch gehen, da E-Mailanhänge doch eigentlich genauso gehandhabt werden, oder?

Jemand eine Idee?

Gruß
Demian
« Letzte Änderung: 16.07.08 - 13:03:31 von Demian »
Gruß
Demian

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #2 am: 16.07.08 - 13:16:44 »
Hast Du im Explorer mal die Verknüpfung mit der Dateiendung überprüt?

Explorer - Extras - Ordneroptionen - Reiter Dateitypen
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #3 am: 16.07.08 - 13:47:40 »
Moin,moin,

das habe ich. Normalerweise ist bei uns der Citrix-Client hinterlegt. Ich habe es aber auch manuell auf Adobe umgestellt, mit Häkchen, dass er immer mit Adobe starten soll.

Aber weder das eine noch das andere wird direkt gestartet. Es erscheint immer die Dialogbox, in der das Programm ausgewählt werden soll.

Und wie gesagt, öffne ich das Dokument mit Strg+B und starte dann den Anhang, wird er auch direkt mit dem richtigen Programm geöffnet (nach der Abfrage"Öffnen","Bearbeiten","Ansicht" usw.)

Gruß
Demian
« Letzte Änderung: 16.07.08 - 13:49:53 von Demian »
Gruß
Demian

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #4 am: 16.07.08 - 14:03:17 »
Ah, Ok, war nur so eine Idee von mir.
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #5 am: 17.07.08 - 11:27:18 »
Ok, ich bin jetzt soweit, dass ich die API MoveFileEx verwenden würde.

Zitat
Public Declare Function MoveFileEx Lib "kernel32.dll" Alias "MoveFileExA" _
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Boolean

Sub Tester()
Dim Success As Boolean
Dim test As String

Success = MoveFileEx("C:\Fortbildung.pdf", test, 4)
If Success = False Then MsgBox "Geht nicht"
End Sub

Hier die Beschreibung von Microsoft: http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx

Unter Office funktioniert die APi mit dem Code von oben. Unter Notes hat er aber ein Problem mit dem "Nullstring" test. Auch wenn ich beim Aufruf direkt "" einsetze funktioniert das nicht. Ist ein Nullstring nicht in allen Programmen gleich? Was kann ich machen um diesen Nullstring zu übergeben?

Gruß
Demian
Gruß
Demian

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #6 am: 17.07.08 - 12:22:10 »
Hoi Demian

Unter Office funktioniert das bei mir mit "" auch nicht. Bist Du sicher, dass dieser Code so bei Dir funktioniert?

Gruss
Remo

Nachtrag:
Dieser Code funktioniert unter Office auch nicht.

Sub Tester()
    Dim Success As Long
    Dim test As String
    test = ""
    Success = MoveFileEx("C:\temp\1.gif", test, 4)
    If Success = 0 Then MsgBox "Geht nicht"
End Sub

Also scheint ein Unterschied zwischen uninitialisiertem String und "" zu bestehen.

Gruss
Remo
« Letzte Änderung: 17.07.08 - 12:35:46 von Fedaykin »
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #7 am: 17.07.08 - 12:46:33 »
Hoi Demian

Ein nicht initialisierter String in VBA, VB ist wohl ein vbNullString, was offenbar was anderes als "" ist. Sowas in LotusScript glaube ich müsstest so hin bekommen.

Sub Tester()
   Dim Success As Long
   
   Success = MoveFileEx("C:\temp\1.gif", 0&, 4)
   If Success = False Then Msgbox "Geht nicht"
End Sub

Gruss
Remo
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #8 am: 17.07.08 - 12:59:03 »
Das ist richtig, Remo - vbNullString ist in LS mit 0& nachzubilden.

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #9 am: 17.07.08 - 13:02:09 »
Moin Remo,

in deiner ersten Variante hast du Test ja mit Test = "" initialisiert. Das funktioniert auch bei mir nicht. Nur wenn Test nicht initialisert wird. Und mit der Office-Konstante vbnullstring geht es, also wird deine Vermutung stimmen, dass nicht initialisierte String automatisch vbnullstring sind.

Das mit 0& habe ich eben ausprobiert, hat aber leider auch nicht den gewünschten Effekt. Er interpretiert das 0& als neuen Dateinamen (siehe Screenshot). Normalerweise darf da nur ein Eintrag sein. Dann wird die Datei beim nächsten Reboot gelöscht. Ein zweiter Eintrag wird als Kopierauffordeurng interpretiert.

Gibt es irgendwo eine Auflistung mit diesen ganze 0&, &H0 usw.??? Hatte da auch schon ein paar probiert. Wie nennt man die Dinger eigentlich???


Trotzdem vielen Dank für deinen Tip.

Gruß
Demian
Gruß
Demian

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #10 am: 17.07.08 - 13:52:16 »
Sorry, habe gerade gemerkt, dass ich zu Testzwecken das ByVal in der API beim 2.Parameter mal weggemacht hatte. Deswegen die Sonderzeichen. Wenn ich das ByVal wieder setze, funktioniert es aber auch nicht (siehe Screenshot). Er interpretiert dann 0 als neuen Dateinamen.

Gruß
Demian

 
Gruß
Demian

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #11 am: 17.07.08 - 14:15:35 »
Hallo Demian

Versuch mal die nicht mal MS bekannte API Funktion RemoveFileEx.  ;D

Declare Function RemoveFileEx Lib "kernel32.dll" Alias "MoveFileExA"(Byval lpExistingFileName As String, Byval lpNewFileName As Long, Byval dwFlags As Long) As Boolean

Sub Tester()
   Dim Success As Long
   
   Success = RemoveFileEx("C:\temp\1.gif", 0, 4)
   If Success = False Then Msgbox "Geht nicht"
End Sub

Gruss
Remo
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #12 am: 17.07.08 - 14:51:17 »
Moin Remo,

das klappt wunderbar  ;D. Über RemoveFileEx bin ich im Netz auch schon gestoßen, da ich aber in der MSDN nichts dazu gefunden habe, hab ich lieber die Finger von gelassen.

Mein Code sieht jetzt folgendermaßen aus:

Code
(Declarations)
Declare Function RemoveFileEx Lib "kernel32.dll" Alias "MoveFileExA"(Byval lpExistingFileName As String, Byval lpNewFileName As Long, Byval dwFlags As Long) As Boolean

Code
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
	'**********************************************************************************************************************
	'Hier wird der Start des Dateianhangs ausgeführt, indem der Anhang auf der Platte gespeichert und mittels
	'WScript aufgerufen wird. Gleichzeitig wird durch die API RemoveFileEx (Abwandlung MoveFileEx) ein Eintrag
	'in der Registry erzeugt, der dafür sorgt, dass die auf Platte kopierte Datei, bei Reboot gelöscht wird.
	'**********************************************************************************************************************
	'Allgemein	
	Dim s As New NotesSession
	Dim doc As NotesDocument 	
	Dim item As NotesRichTextItem
	Dim obj As NotesEmbeddedObject
	'Öffnen und Löschen der Datei
	Dim WScript As Variant
                Dim Datei As String
	Dim Success As Boolean
	'**********************************************************************************************************************
	Set doc = source.Document
	Set item = doc.GetFirstItem("Dateianhang")	
	Set obj = doc.GetAttachment(item.EmbeddedObjects(0).name)
	Set WScript = CreateObject("Wscript.Shell")
	
	'kopieren des Anhangs auf Platte
	Call obj.ExtractFile("C:\" & item.EmbeddedObjects(0).name)	
	
	'Öffnen des Anhangs
	WScript.Run("""C:\" & item.EmbeddedObjects(0).name & """")
	
	'Registry-Eintrag für das Löschen der Datei bei Neustart des PC's	
	Datei = "C:\" & item.EmbeddedObjects(0).name
                Success = RemoveFileEx(Datei, 0, 4)
	If Success = False Then  Msgbox "Die Datei muss manuell gelöscht werden", 64, "Fehler"
End Sub 


Ich musste nur mit der Pfadangabe ein bisschen rumspielen, weil die API mit  """C:\" & item.EmbeddedObjects(0).name & """" nicht klar kam, aber sonst funktioniert alles.

Aber im Endeffekt ist es doch dieselbe API-Funktion, oder? Wegen dem Alias.

Vielen Dank für deine Hilfe. Ich weiß gar nicht wieviele Stunden ich jetzt in diese blöde Funktion schon gesteckt hab.

Unbefriedigend ist aber trotzdem, dass ich nicht weiß wo das Problem mit MoveFileEx liegt.  ???

Aber es funktioniert und das ist das Wichtigste.

Also vielen Dank nochmal.

Gruß
Demian
« Letzte Änderung: 17.07.08 - 14:53:03 von Demian »
Gruß
Demian

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #13 am: 17.07.08 - 15:00:30 »
Hi Demian

Ist eigentlich auch fast die gleiche Declaration wie Deine. Nur habe Name abgeändert falls mal beide wo brauchen würdest und um zu zeigen Ups da hat aber wer etwas abgeändert.  ;)

Ich habe da bei lpNewFileName ein Long daraus gemacht. Und so klappt, dass ich einfach eine 0 mitgebe. Und das ist genau das richtige. Glaube ist so, dass er da eigentlich einen Zeiger auf Speicherbereich will. Gibst Ihm einen NULL-Zeiger, dann reagiert das API anders und löscht (In Deinem Fall leere Zeile in Registry). Problem ist LotusScript initialisiert immer, VB und VBA kennt da noch den Unterschied zwischen "" und vbNullString.

Vielleicht interessiert das noch.
http://www.enzinger.net/NullStrg.html

Gruss
Remo
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #14 am: 18.07.08 - 08:16:19 »
...hüstel  ::) Musste leider feststellen, dass das Ganze lokal wunderbar geht, aber bei Citrix-Notes versucht er auf die Registry des Servers zuzugreifen. Das ist zum einen nicht möglich, da der Zugriff gesperrt ist, zum andern würde das aber auch nichts bringen, weil die Dateien ja lokal bei den Usern liegen.

Was nun hab ich mir gedacht. Es muss doch möglich sein, vom Server aus auf die Registry des Users zuzugreifen.

Also habe ich mir eine Funktion gebastelt, die eine .reg Datei erstellt. Mein Code sieht jetzt wie folgt aus:

Code
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
	'**********************************************************************************************************************
	'Hier wird der Start des Dateianhangs ausgeführt, indem der Anhang auf der Platte gespeichert und mittels
	'WScript aufgerufen wird. Gleichzeitig wird durch die API RemoveFileEx (Abwandlung MoveFileEx) ein Eintrag
	'in der Registry erzeugt, der dafür sorgt, dass die auf Platte kopierte Datei, bei Reboot gelöscht wird.
	'**********************************************************************************************************************
	'Allgemein	
	Dim s As New NotesSession
	Dim doc As NotesDocument 	
	Dim item As NotesRichTextItem
	Dim obj As NotesEmbeddedObject
	'Öffnen und Löschen der Datei
	Dim WScript As Variant
	Dim Datei As String
	Dim Success As Boolean
	'**********************************************************************************************************************
	Set doc = source.Document
	Set item = doc.GetFirstItem("Dateianhang")	
	Set obj = doc.GetAttachment(item.EmbeddedObjects(0).name)
	Set WScript = CreateObject("Wscript.Shell")
	
	Datei = "C:\" & item.EmbeddedObjects(0).name
	
     'kopieren des Anhangs auf Platte
	Call obj.ExtractFile(Datei)	
	
	'Öffnen des Anhangse
	WScript.Run("""C:\" & item.EmbeddedObjects(0).name & """")
	
	'Registry-Eintrag für das Löschen der Datei bei Neustart des PC's	
	Call RegDateiErstellen(Datei)
	'WScript.Run("C:\WINDOWS\system32\regedt32.exe -s C:\Regtest.reg")
End Sub

Code
Sub RegDateiErstellen(Pfad As String)
     'Dateibezogene Variablen
	Dim Dateistream As Integer
	
     'Freie Ddateinnummer suchen
	DateiStream = Freefile()
	
     'Datei erstellen
	Open "C:\Regtest.reg"  For Output Access Write As DateiStream
	'Registry-Schlüssel in Datei schreiben
	Print #DateiStream,"Windows Registry Editor Version 5.00"
	Print #DateiStream,Chr(13)
	Print #DateiStream, "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]"
	Print #DateiStream,|"PendingFileRenameOperations"=hex(7):| & PfadInHex(Pfad)
    'Erstellte Datei schließen
	Close DateiStream        
End Sub

Code
Function PfadInHex (Pfad As String) As String
	Dim Anzahl As Long
	
	'Der Pfadangabe steht immer \??\ bevor. Jedes Zeichen wird im Schlüssel mit einem Punkt (00) getrennt.
	'In der .reg Datei wird jede Hexzahl mit einem Komma getrennt
	PfadInHex = HexZahl("\") & ","
	PfadInHex = PfadInHex & "00" & ","
	PfadInHex = PfadInHex & HexZahl("?") & ","
	PfadInHex = PfadInHex & "00" & ","
	PfadInHex = PfadInHex & HexZahl("?") & ","
	PfadInHex = PfadInHex & "00" & ","
	PfadInHex = PfadInHex & HexZahl("\") & ","
	PfadInHex = PfadInHex & "00" & ","
	
	'jedes einzelnes Zeichen des Pfades umwandeln
	Anzahl = Len(Pfad)
	For i = 0 To Anzahl - 1
		PfadInHex = PfadInHex & HexZahl(Mid(Pfad,i + 1,1)) & "," & "00" & ","
	Next	
	
	'Dem letzten . der Pfadangabe stehen immer 6 weitere . nach (durch Komma getrennt)
	PfadInHex = PfadInHex  & "00" & "," & "00" & "," & "00" & "," & "00" & "," & "00" & "," & "00"
End Function

Code
Function HexZahl (Zeichen As String) As String
	Hexzahl = Hex(Asc(Zeichen))
End Function

Die .reg wird auch wunderbar erstellt und funktioniert, wenn man sie lokal direkt ausführt. Also habe ich mir gedacht, ich erstelle eine .bat Datei mit folgender Zeile:

C:\Windows\System32\regedt32.exe -s C:\Regtest.reg.

Wenn man diese Datei von Citrix-Notes ausführt, versucht er aber trotzdem auf die Regiytry des Servers zuzugreifen. Obwohl ja explizit das lokale regedit des Users gestartet wird.

Warum wird trotzdem die Registry vom Server angesprochen?  Gibt es überhaupt ne Möglichkeit auf die des Users zuzugreifen?

Gruß
Demian

PS: Auf http://www.enzinger.net/NullStrg.html bin ich auch irgendwann mal gestoßen, konnte das aber leider auch nicht so umsetzen.
« Letzte Änderung: 18.07.08 - 08:20:38 von Demian »
Gruß
Demian

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #15 am: 18.07.08 - 08:25:29 »
Hi Demian

Schon mal darüber nachgedacht die Datei in einen Temp Ordner zu extrahieren und diesen einfach mit Loginscript oder so manchmal leeren? So ein Temp Ordner kann ja sonst auch immer mal nützlich sein. Erfahrung mit Lotus Notes in Citrix Umgebung habe ich leider keine (obwohl mich das schon interessieren würde, da beides eigentlich im Haus).

Gruss
Remo
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #16 am: 18.07.08 - 08:29:11 »
Moin Remo,

mit Loginscripts habe ich mich noch nicht befasst. Ich denke aber, das ich auch nicht über den entsprechenden Zugriff verfüge, diese zu erstellen, ich bin kein Admin. Oder liegen die lokal? Würde dann nächste Woche mal unseren Admin fragen.

Gruß
Demian
Gruß
Demian

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Anhänge aus Richtextitem starten lassen
« Antwort #17 am: 22.07.08 - 19:10:05 »
Also,

nachdem ich das Ganze über 2 Batchdateien gelöst hatte (siehe Script), habe ich mich mal ein bisschen mit unserem Loginscript (KixStart) befasst. Das ist doch sauberer als mit den Batchdateien.

Vielen Dank für den Tipp mit dem Loginscript.

Gruß
Demian


Zitat
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
'**********************************************************************************************************************
   'Hier wird der Start des Dateianhangs ausgeführt, indem der Anhang auf der Platte gespeichert und mittels
   'WScript aufgerufen wird. Gleichzeitig werden 2 Batchdateien erstellt, die dafür sorgen, dass die geöffnete
   'Datei beim nächsten Neustart gelöscht werden.
   'Hierfür wird eine der Batchdateien im Autostart-Ordner des Users gespeichert. Diese löscht die zwischen-
   'gespeicherte Datei, und ruft die 2 Batchdatei im LNData-Verzeichnis des Users auf, und übergibt ihr den
   'Pfad zu sich selbst. Die 2. Batchdatei löscht dann die übergebene Datei im Autostart-Ordner
   '**********************************************************************************************************************
   'Allgemein   
   Dim s As  New NotesSession
   Dim doc As NotesDocument    
   Dim item As NotesRichTextItem
   Dim obj As NotesEmbeddedObject
   Dim Dateipfad As String
   Dim Dateiname As String
   '**********************************************************************************************************************      
   If Not IsNewDoc Then         
      Set doc = source.Document
      Set item = doc.GetFirstItem("Dateianhang")   
      Set obj = doc.GetAttachment(item.EmbeddedObjects(0).name)   
      
      'Prüfen ob C:\Temp vorhanden, sonst erstellen
      If Not fso.FolderExists("C:\Temp") Then Mkdir "C:\Temp"
      
      'Pfad für Zwischenspeichern setzen
      Dateipfad = "C:\Temp\" & item.EmbeddedObjects(0).name            
      
      'evtl. befindet sich die Datei noch auf der Festplatte
      If fso.FileExists(Dateipfad) Then
         WScript.run(|"| & "C:\Temp\" & item.EmbeddedObjects(0).name & |"|)
      Else
         'Zwischenspeichern und Öffnen des Anhangs      
         Call obj.ExtractFile(Dateipfad)      
         WScript.run(|"| & "C:\Temp\" & item.EmbeddedObjects(0).name & |"|)
      End If      
      
      'Batchdateien für die Löschung des Anhangs  erstellen
      'Dateiendung rausfiltern
      Dateiname = Mid(item.EmbeddedObjects(0).name,1,Len(item.EmbeddedObjects(0).name) - 4)
      
      'WScript.SpecialFolders("Startup") gibt bei Citrix-Anwendungen das Laufwerk des Servers (hier V:\) mit dem jeweiligen
      'Benutzerprofil zurück. Bei den Usern ist der Autostart-Ordner immer auf C:\
      Call BatchErstellen( "C" & Mid(WScript.SpecialFolders ("Startup"),2,Len(WScript.SpecialFolders ("Startup")) -1) _
      ,Dateipfad,Dateiname)
      
      'das Notesdokument soll nicht angezeigt werden
      Continue = False      
   End If   
End Sub

Zitat
Sub BatchErstellen(Autostart As String,Dateipfad As String,Dateiname As String)
   '**********************************************************************************************************************
   'Batch1 = Batchdatei im LNData-Verzeichnis, die die übergebene Batch im Autostart-Ordner löscht
   'Batch2 = Batchdatei im Autostart-Ordner, die die zwischengespeicherte Datei löscht und Batch1
   'mit dem Pfad zu sich selbst aufruft
   '**********************************************************************************************************************
   Dim Batch1 As Integer, Batch2 As Integer
   Dim Befehl As String
   
   
   Batch1 = Freefile()
   Batch2 = Freefile()
   
   'Batch1 im LNData erstellen   
   Open "G:\LNData\AutostartLöschen.bat"  For Output Access Write As Batch1
   Print #Batch1, "@echo off"
   Print #Batch1,"REM der Schalter chcp 1252 sorgt dafür, dass Umlaute (hier ü und ö) richtig interpretiert werden"
   Print #Batch1, "chcp 1252"
   Print #Batch1, "REM %1 ist der Pfad zu der aufrufenden Batch im Autostartordner."
   Print #Batch1, "del %1"
       'Erstellte Datei schließen
   Close Batch1   
   
   'Batch2 im 'Autostart erstellen
   
   
   Open Autostart & "\" & Dateiname & ".bat"   For Output Access Write As Batch2
   Print #Batch2, "@echo off"   
   Print #Batch2,"REM der Schalter chcp 1252 sorgt dafür, dass Umlaute (hier ü) richtig interpretiert werden"
   Print #Batch2, "chcp 1252"
   Print #Batch2,"REM die zwischengespeicherte Datei löschen"
   Print #Batch2, "del " & |"| & Dateipfad &|"|
   Print #Batch2, "REM Die Datei im LNData Verzeichnis aufrufen und den Pfad zu sich selbst übergeben"
   Befehl = "G:\LNData\AutostartLöschen.bat " & |"| & Autostart & "\" & Dateiname & ".bat" & |"|
   Print #Batch2, Befehl
       'Erstellte Datei schließen
   Close Batch2   
End Sub
Gruß
Demian

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Anhänge aus Richtextitem starten lassen
« Antwort #18 am: 22.07.08 - 21:18:08 »
Hi Demian

Freut mich wenn ich helfen konnte. Manchmal ist gut ein Problem nicht zu kompliziert lösen zu wollen.  ;)

Gruss
Remo
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz