Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet 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.
-
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
-
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...
-
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.
-
...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?
-
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...
-
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.
-
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...
-
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
-
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 ;)
-
... 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