Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: MarkusL am 07.09.11 - 16:31:56

Titel: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: MarkusL am 07.09.11 - 16:31:56
Hallo zusammen,

kann ich eine Dateiressource aus einer DB per Script im Dateisystem ablegen?
Die Datei ist eine cmd und soll anschließend ausgeführt werden. (Das Script für die Ausführung klappt schon.)

Leider finde ich hierzu nirgendwo eine Aussage oder einen Ansatz.
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: ascabg am 07.09.11 - 17:49:49
Hallo,

Muss es denn unbedingt eine Resource sein?

Pack die CMD-Datei in ein "normales" Dokument (Profil-Dokument), extrahiere sie aus dem Dokument und fuehre sie anschliessend aus.


Andreas
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: Tode am 07.09.11 - 17:54:18
Eigentlich hätte ich gesagt über die NotesNoteCollection- Klasse ans Dokument kommen, und dann ganz normal das Attachment detachen... Aber leider hat die Klasse kein "SelectFileRessources", ist also wohl zu neu... Und auch ich würde das ganze nicht im Design hinterlegen, sondern in nem Konfig- Dokument. Im Design ist das doch viel zu unflexibel...
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: MarkusL am 08.09.11 - 11:11:17
Danke für die Infos.
Ich dachte, man könnte die Ressourcen dann auch als normaler User in der nsf entpacken und nutzen.

Eine (Profil-)Dokument wäre eine Lösung. Allerdings müsste die cmd dann in ein RichTextFeld einfügen und die gelten leider nicht fürs web. (Oder liege ich da falsch?)

Dann bleibe ich bei meiner bisherigen Lösung und hinterlege die Datei an einem festen Punkt im Dateisystem.
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: marschul am 08.09.11 - 12:24:20
...und die gelten leider nicht fürs web....

Interessantes Detail, das mit dem Web. Im ersten Posting schreibst Du etwas über Script-Ausführung klappt schonmal. Da siehe ich jetzt mögliche Widersprüche (falls LotusScript, oder war JavaScript gemeint???). Kannst Du bitte genauer erläutern, was da (in welchem Client) passieren soll?
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: Tode am 08.09.11 - 12:42:56
Du schreibst ziemlich wirr... Also erst mal: Was hat das ganze mit "Web" zu tun?
Dann: Natürlich "gelten" RichTextFelder auch im Web (was auch immer Du unter gelten verstehst).

Ich denke, Du skizzierst kurz, was Du eigentlich genau erreichen willst, dann kann man Dir auch passende Lösungsvorschläge machen...
So wird das nix...
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: MarkusL am 08.09.11 - 14:01:10
OK, dann mal der Reihe nach.

Im Moment entwickel ich eine DB, die bestimmte Daten der Mitarbeiter enthalten soll. Unter anderem auch die LAN-Rechte aus unserem Filesystem. Zum Auslesen dieser Rechte habe ich eine cmd geschrieben, die bestimmte Daten auf einem Fileserver zur Verfügung stellt.
Über einen Button in einer Maske starte ich die cmd und lese ich die Daten per LS aus und füge sie in ein Maskenfeld ein. Das klappt auch alles.

Meine Idee war jetzt, die cmd in der Notes-DB zu speichern, damit mein LS-Script die Datei temporär im Filesystem auf dem Rechner ablegt, startet, die Daten ausliest und wieder löscht. Somit wäre ich flexibler.

Hier kommen die Ideen von ascabg und Tode ins Spiel, dies über ein Rich-Text-Feld in einem weiteren (Profil-) Dokument zu lösen. Hier hatte ich einen Denkfehler, weil ich dachte, dass Rich-Text-Felder im web nicht funktionieren. Aber das waren die Rich-Text-Lite-Felder.
Warum web? Weil diese DB irgendwann auch über unser Intranet aufrufbar sein soll. Aber das kommt später.

Somit werde ich erstmal die Lösung für den Notes Client umsetzen und mir später über die web-Lösung Gedanken machen.

Ich kann erstmal weitermachen. Wenn von euch niemand mehr Fragen oder Anmerkungen zu diesem Thema hat, schließe ich diesen Thread morgen.

Danke.
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: Tode am 08.09.11 - 14:10:36
Also ein File- Attachment brauchst Du in Deinem Konstrukt eigentlich gar nicht... Du kannst den Text in einem Textfeld speichern (leicht editierbar) und dann einfach Deine CMD on the fly erstellen und dann ausführen bzw. per Shell() den Befehl ausführen ohne ihn vorher in ne Datei zu schreiben...

ABER: Das Ding wird im Browser niemals automatisch ablaufen, weil Du mit keiner Programmiersprache aus dem Browser raus ins filesystem des Clients greifen kannst: Du kannst also weder die cmd erstellen, noch die Ergebnisse der CMD auslesen... Das lässt das Security- Konzept der Browser gar nicht zu...
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: MarkusL am 26.09.11 - 15:24:41
Hi,

ich habe mein Problem gelöst.
Problemstellung war:
Im Profildokument wird in einem RichText-Feld eine cmd-Datei gespeichert, welche im Dateisystem bestimmte Operationen ausführen soll.
Erst wird die Datei per LS ins Dateisystem gespeichert, dann ausgeführt und anschließend gelöscht.
Meine ursprüngliche Aussage, dass die Datenbank webfähig sein soll, haben wir erstmal zurück gestellt.

Danke für die Hilfe. Diese Forum ist wirklich hilfreich.

Hier mein Code für alle, die wie ich suchen müssen:

Sub Click(Source As Button)
   Dim db As NotesDatabase
   Dim session As New NotesSession   
   Dim workspace As New NotesUIWorkspace
   Dim doc As NotesUIDocument      
   Dim profiledoc As NotesDocument      
   Dim fileNum As Integer   
   Dim textalt As String
   Dim text As String
   Dim nam As NotesName      
   Dim mynam As String   
   Dim rtitem As Variant   
   Const PATHCMD = "d:\test.cmd"   ' Hier den Pfad zur CMD eingeben
   Const PATH = "d:\test.txt"   ' Hier den Pfad zur Log-Datei eingeben
   Const FIELD1 = "Feld1"   'Hier das Feld in der Maske eingeben, in welchem der User steht
   Const FIELD2 = "Feld2"   'Hier das Feld in der Maske eingeben, welches mit den Daten aus der cmd befüllt werden soll
   Const FIELD3 = "Feld3"   'Hier das Feld in der Maske eingeben, in welches die Meldung geschrieben werden soll
   Dim user As String
   
   Set db = session.CurrentDatabase   
   Set doc = workspace.CurrentDocument
   Set profiledoc = db.GetProfileDocument( "Konfiguration")
   
   'Speichern der cmd aus dem Konfigurationsdokument in den Pfad PATHCMD
   Set rtitem =profiledoc.GetFirstItem( "Batchdatei" )
   Forall o In rtitem.EmbeddedObjects
      Call o.ExtractFile _
      ( PATHCMD )
   End Forall   
   
   'Programmaufruf und schreiben der Log-Datei:
   user = doc.FieldGetText( FIELD1 )
   Call ShellExecute(0, "open", PATHCMD, user , "", 1)
   'Messagebox "Warte auf die CMD... "
   Sleep 1
   
   'Hier folgt der Code, der die Daten aus dem Filesystem weiter verarbeitet.........
   # Danach geht es weiter

   'Eintrag im Status-Feld
   Call doc.FieldSetText(FIELD3,"Gruppen aktualisiert am " + Format(Now(), "Short Date") + Chr(13) & Chr(10)+" von " + mynam)
   
   'Löschen der cmd und der Log-Datei
   Kill PATHCMD
   Kill PATH
   
End Sub
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: marschul am 26.09.11 - 15:47:25
Na dann hoffen wir mal, dass

- das Profildokument auch ja das Feld "Batchdatei" enthält (dazu muss das Profil nat. auch vorh. sein),
- der Anhang enthalten ist,
- jeder Rechner ein Laufwerk D: mit Schreibrecht für den / die User hat,
- das Feld "Feld1" einen entsprechenden User enthält,
- die Ausführung der cmd unter 1 Sekunde dauert,
- die Daten zur Weiterverarbeitung im Filesystem auch stimmen,
- Löschrechte für PATHCMD & PATH existieren, ...

Will sagen: 0 Errorhandling bedeutet Stress, wenn mal eine der Bedingungen nicht zutreffen sollte ;)
Titel: Re: Dateiressource aus DB in Verzeichnis ablegen
Beitrag von: ata am 27.09.11 - 07:33:41
... ich halte den Weg für viel zu aufwändig - einfacher Text in einem Textfeld, wie es Torsten schon vorgeschlagen hat - oder falls der Code fix sogar in einer Library als berechnenbare Variable gehalten - hätte genügt. Das erspart das Lösen eines Attachments ins Filesystem - die Überprüfung ob das Profildokument auch wirklich existiert (... und das ist nicht immer gesagt, daß Profildokumente wirklich vorhanden sind...).

Für das Ausführen des cmd benötigt man auch keine Datei, die dann gestartet wird, das geht über LS auch direkt.

Über Webzugriff wird es dann etwas komplexer, aber auch das sollte machbar sein...

Ansonsten hat Marco richtig erwähnt, daß ein Fehlerhandling unerläßlich ist

Toni