Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Lancelot am 17.05.11 - 14:45:52
-
Hallo Leute,
die Forumsuche hat mir nicht geholfen, jetzt bräuchte ich mal wieder den Rat der Experten.
Ich muss aus einem Dok einer selbst entwickelten DB ein PDF machen.
Alle Anhänge aus dem Dok egal in welchem Feld die sind extrahieren und das PDF als auch die Anhänge
in eine Mail anhängen und verschicken.
Das soll ich so machen, weil dann das Dokument den Black Berry und iPhon User schön lesbar angezeigt werden.
Durchlaufe ich den Agent im Debug Schrittweise funzt der Agent auch super toll.
Lasse ich den Agent ohne Debug laufen kommt bei "Set obj = Body,Embedobject.... die Meldung "File not Found".
Das PDF ist aber im Ordner vorhanden und lässt sich auch manuelle öffnen.
Das Laufwerk hat jeder User verbunden bekommen und auf den Ordner habe alle im Mom Vollzugriff.
Der Agent ist mit einer Developer ID gespeichert, die Überall als Admin hinterlegt ist.
Hat jemand eine Idee woran das liegen kann?
Sriptauszug:
Set memo = New NotesDocument( mailDB )
memo.Form = "MemoProjekt"
Set Body = New NotesRichtextItem( memo , "Body" )
Set nkBody = New NotesRichtextItem( memo , "nkBody" )
Set doc = uidoc.Document
pfad_anhang = "U:\Allgemein\TEST_PDF\"
REM kopieren der Anhänge in das Email.
Call uidoc.Print( 1, 0, 0, False, "PDF-XChange 3.0" )
REM HIer kommt der Fehler "File U:\Allgemein\TEST_PDF\LIEF.PDF" not found
Set obj = Body.Embedobject(EMBED_ATTACHMENT, "", pfad_anhang & "Lief.pdf")
REM Prüfung ob Feld "Allgemeines" einen Anhang hat.
REM Wenn ja Anhang in Laufwerk "U:\" extrahieren und im Email neu anhängen.
filecount = 0
Set rtitem = doc.GetFirstItem( "Allgemeines" )
If ( rtitem.Type = RICHTEXT ) Then
If IsArray (rtitem.EmbeddedObjects) Then
ForAll o In rtitem.EmbeddedObjects
-
Seufz. Ich glaub, ich werde mal eine FAQ schreiben.
Wenn Der Agent am Server läuft (auch wenn er als "User" läuft) läuft er unter dem SYSTEM Account, der auf Netzlaufwerke (und U: wird ja wohl eins sein), nicht zugreifen kann.
Für die Lösung -> siehe Forumssuche oder ich suchs Dir später raus.
-
Danke Martin für die schnelle Antwort.
Nur ganz verstehe ich Dich mit Systemaccount nicht.
Ich bin auf meiner Kiste sogar als Systemadmin angemeldet.
der Zugriff auf Laufwerk und Ordner steht auf jeder Vollzugriff.
Somit versteh ich das Problem der Berechtigung nicht.
Egal ich suche mal unter diesen Begriffen im Forum
Danke!
-
Hallo,
Na dann stellen wir doch mal die Frage.
Wie wird der Agent gestartet?
Andreas
-
Der Agent wird im Momen noch per Mausklick auf einen Butto und dem Commandbefehl auf meinem PC aufgerufen.
-
Ein "RunOnServer" involviert?
-
Bringt auch nichts.
Hab sogar die Sicherheitsstufe auf 3. mti vollen Adminrechten laufen lassen gesetzt.
-
Ok, nochmal langsam.
Der Benutzer hat eine Notes-DB offen (lokal oder am Server?). In dieser drückt er auf einen Button. Was/welcher Code wird dann ausgeführt, um den Agent zu starten?
-
OK der User hat das Doc zum bearbeiten offen.
Klickt auf einen Button und in dem Button starten der @Command([ToolsRunMacro]...) den Scriptagenten.
Dieser Agent soll dann aus dem Dok ein PDF machen, dies läuft über einen PDF Druckertreiber ab und soll danach das PDF + alle Anhänge aus dem Dok als neues Email verschicken.
Ich glaube eine Vermutung zu haben.
Notes wird hier zu schnell sein.
Ich sehe zwar das Dokument aber Notes noch nicht, weil die Datei noch nicht im
Indexe von Windows eingetragen ist oder so.
Ich bau jetzt mal eine kleine Warteschleife ein, mal sehen was passiert.
-
Yes, ich habe es gelöst.
Die Warteschleife hat geholfen.
Weis zwar nciht warum Windows 7 die Datei zu der Zeit noch nicht hat,
aber nach dem EInbau der Schleife läuft der Agent fehlerfrei durch udn tut sein Arbeit.
Wen es interresiert oder auch das Problem haben sollte,
hier die Schleife.
Das Script ist getestet und funktioiniert durch einfaches reinkopieren udn setzen der Variabelen.
pfad_dir = "Pfad und Dateiname den man sucht"
'Wartezeit bis der Durchlauf neu startet.
timeout = 2 'Typ Long
bWarten=True
'Anzahl wie oft der Ordner durchlaufen wir.
lLauf=3
lLaufZahl=0
Do While bWarten=True
sDirErg = Dir$(pfad_dir, 0)
Do While sDirErg <> ""
'Abfrage ob der eingelesen Wert sDirErg der Vorgaben im pfad_Dir entspricht.
If UCase(Trim(pfad_dir))=UCase(Trim(sDirErg)) Then
bWarten=False
sDirErg=""
Else
sDirErg=Dir$()
End If
Loop
If lLaufZahl>lLauf Then
bWarten=False
End If
If bWarten=True Then
lLaufZahl=lLaufZahl+1
startTime! = Timer()
Do While Timer()<startTime! + timeout
Yield
Loop
End If
-
@Martin (m3)
das mit dem Netzwerkzugriff ist meines Erachtens nicht ganz richtig. Ich habe in ein Paar Datenbanken durchaus Hintergrundagenten, die auf Netzwerklaufwerke zugreifen, lesen und schreibend.
Ich glaube, es hängt damit zusammen, wie die Netzwerklaufwerke gemappt sind. Wenn ich zum Beispiel vor dem Zugriff über eine Funktion das Netzwerklaufwerk erst mappe, kann ich danach problemlos darauf zugreifen (sofern die Ausführungsrechte des Agenten stimmen) und es danach auch wieder freigebe.
Beispiel:
x = Shell("cmd /c net use u: \\server\freigabe", 2)
open "u:\file" for output as #1
print #1, "Fritz"
close #1
x = Shell("cmd /c net use u: /d", 2)
Ist jetzt ganz schnellt heruntergeschrieben, aber vom Prinzip her funktioniert das.
Gruß,
Joachim
-
Solange der Agent am Client und nicht im Server-Kontext (etwa aufruf übers Web) ausgeführt wird, stimme ich Dir zu. AFAIK helfen Dir die Buchstaben am Server nicht, weil es die im SYSTEM-User Kontext nicht gibt.