26. November 2012 13:13
Hallo zusammen,
ich finde in der Datenbank aktuell leider kein Beispiel.
Ich versuche eine Routine zu schreiben, die ein geschriebenes PDF per Knopfdruck als als Anhang Outlook hinzugefügt wird.
Ich bin jetzt soweit, dass NAV Outlook öffnet und An: CC: Betreff: und den Body ausfüllt.
Meine Frage:
Wie kann ich ein Dokument anhängen, was an einem definierten Pfad liegt? Kann bestimmt nicht so schwer sein oder?
Zuletzt geändert von PhilSan am 27. November 2012 15:32, insgesamt 1-mal geändert.
26. November 2012 13:19
Welche Codeunit benutzt du? In der CU397 kannst du der Mail doch problemlos einen Anhang mitgeben.
26. November 2012 13:59
Hi,
benötige die Funktion aus diversen Gründen in einer separaten Codeunit.
Bin da jetzt auch soweit fertig. Das einzige was mir noch fehlt ist ein guter PDF Drucker der
1. Umsonst für den Kunde ist
2. Problemlos ein PDF abspeichern kann...
Kann da noch einmal jemand weiterhelfen?
26. November 2012 14:10
PhilSan hat geschrieben:Hi,
benötige die Funktion aus diversen Gründen in einer separaten Codeunit.
Bin da jetzt auch soweit fertig. Das einzige was mir noch fehlt ist ein guter PDF Drucker der
1. Umsonst für den Kunde ist
2. Problemlos ein PDF abspeichern kann...
Kann da noch einmal jemand weiterhelfen?
Sowas wird dein Arbeitgeber doch sicherlich nicht das erstemal als Aufgabenstellung haben? PDF drucken und abspeichern
26. November 2012 14:17
Ne, nur kann mir gerade niemand weiterhelfen :)
26. November 2012 14:52
Hi PhilSan,
den "PDF Creator" kannst du aus NAV Programmtechnisch ansprechen. Gibt es meine ich auch ein Beispiel hier im Forum.
Im RTC kannst du die Reports z.B. mittels SAVEASPDF speichern, sofern es sich um eine RDLC Report handelt.
Gruß
Dimi
26. November 2012 16:17
Hi,
ne es handelt sich um Classic Report die aus dem RTC augerufen werden.
Mit den Parametern hinter dem Create möchte ich erreichen, dass auf den lokalen Rechnern gearbeitet wird.
Die Email wird korrekt erzeugt. Leider allerdings ohne PDF. D.h. irgendwie wird mein PDF noch nicht richtig erzeugt.
Kann jmd einen Fehler entdecken?
- Code:
IF ISCLEAR(PDFCreator) THEN
CREATE(PDFCreator,FALSE,TRUE);
IF ISCLEAR(PDFCreatorError) THEN
CREATE(PDFCreatorError,FALSE,TRUE);
ReportID := REPORT::"LHV Order Confirmation";
IF Object.GET(Object.Type::Report,'',ReportID) THEN;
FileDirectory := 'H:\';
FileName := 'example.pdf';
PDFCreatorError := PDFCreator.cError;
IF PDFCreator.cStart('/NoProcessingAtStartup',TRUE) = TRUE THEN
MESSAGE('PDF erstellt')
ELSE
ERROR('Status: Error[' + FORMAT(PDFCreatorError.Number) + ']: ' + PDFCreatorError.Description);
IF Customer.GET("Sell-to Customer No.") THEN
ToName := Customer."E-Mail";
CCName := 'XXX';
Subject := STRSUBSTNO('%1 %2',Sub1, "No.");
FileName := 'H:\\example.pdf';
Mail.NewMail(ToName,CCName,Subject,FileName,TRUE);
26. November 2012 16:20
Kann 'H:\\example.pdf' als Anhangspfad überhaupt richtig sein?
Mich machen die doppelten "\\" stutzig.
Du solltest über ein bisschen Extra-Testcode prüfen, ob die so angegebene Datei auch tatsächlich existiert.
26. November 2012 16:30
Genau da ist mein Problem. Den Pfad hab ich schon ein paar mal geändert. Allerdings schreibt er das PDF nicht...
Ich finde den Grund nicht :/
26. November 2012 16:43
Nimm erstmal ein lokales Laufwerk und nicht direkt ein Netzlaufwerk.
Wenn Win7/8 im Einsatz ist mit aktiviertem UAC, dann bitte ein Unterverzeichnis in C machen und dort vollrechte auf den aktuellen User geben.
26. November 2012 16:47
Wie soll der PDF-Druck überhaupt funktionieren?
Du schreibst zwar den Pfad in eine Variable (FileDirectory := ..), aber mit dieser Variable machst du nichts. Ich sehe keine Stelle, an welcher du dem PDFCreator diesen Pfad übergibst. Woher soll dieser nun wissen, wo er das PDF (und unter welchem Namen) ablegen soll? Oder hast du ihn manuell in den Druckereigenschaften hinterlegt?
Das Ganze setzt sich fort mit der "ReportID". Wo steht geschrieben, dass der Report gedruckt (d.h. als PDF erstellt) wird? Du hast nur eine Variable befüllt, ohne sie weiter zu verwenden. Wofür machst du das Object.GET?
Was hast du überhaupt als Vorlage für deinen Quelltext genutzt?
26. November 2012 18:00
So wie hier ist der PDFCreator bei mir erfolgreich im Einsatz
- Code:
IF ISCLEAR(PDFCreator) THEN
CREATE(PDFCreator);
IF ISCLEAR(PDFCreatorError) THEN
CREATE(PDFCreatorError);
PDFCreatorError := PDFCreator.cError;
IF PDFCreator.cStart('/NoProcessingAtStartup',TRUE) = FALSE THEN
ERROR('Status: Error[' + FORMAT(PDFCreatorError.Number) + ']: ' + PDFCreatorError.Description);
PDFCreatorOption := PDFCreator.cOptions;
PDFCreatorOption.UseAutosave := 1;
PDFCreatorOption.UseAutosaveDirectory := 1;
PDFCreatorOption.AutosaveDirectory := PathName;
PDFCreatorOption.AutosaveFormat := 0; //PDF file
PDFCreatorOption.AutosaveFilename := FileName;
PDFCreator.cOptions := PDFCreatorOption;
PDFCreator.cClearCache();
PDFCreator.cPrinterStop := FALSE;
CLEAR(MyPDFReport); // dem Report ist der PDFCreator-Drucker in der Tabelle 78 Printer Selection zugewiesen
MyReportRecord.SETFILTER(… // hier filtern
MyPDFReport.USEREQUESTFORM(FALSE);
MyPDFReport.SETTABLEVIEW(MyReportRecord);
MyPDFReport.RUN;
26. November 2012 18:44
So hab meinen Fehler selbst gefunden... Blöderweise 2 Zeilen Code vergessen
Jetzt aber noch ein großes Problem:
Am Ende der PDF Generierung rufe ich eine Mail Funktion auf, die Outlook öffnet mit den angegebenen Paramtern.
Outlook ist allerdings immer schneller geöffnet als das PDF generiert ist. Also wird Outlook immer ohne Anhang gestartet.
Kann ich den PDF Creator irgendwie fragen, ob er mit dem drucken fertig ist?
Hier das letzte Codesetück
- Code:
PDFCreatorOption.UseAutosave := 1;
PDFCreatorOption.UseAutosaveDirectory := 1;
PDFCreatorOption.AutosaveDirectory := FileDirectory;
PDFCreatorOption.AutosaveFormat := 0; //PDF file, you can also save in other formats
PDFCreatorOption.AutosaveFilename := FileName;
PDFCreator.cOptions := PDFCreatorOption;
PDFCreator.cClearCache();
DefaultPrinter := PDFCreator.cDefaultPrinter;
PDFCreator.cDefaultPrinter := 'PDFCreator';
PDFCreator.cPrinterStop := FALSE;
SalesHeaderL.SETRANGE ("Document Type",Rec."Document Type");
SalesHeaderL.SETRANGE ("No.",Rec."No.");
IF SalesHeaderL.FINDFIRST THEN BEGIN
REPORT.RUNMODAL(ReportID,FALSE,TRUE,SalesHeaderL);
COMMIT;
SLEEP(500);
END;
SendMail();
27. November 2012 11:21
PhilSan hat geschrieben:Kann ich den PDF Creator irgendwie fragen, ob er mit dem drucken fertig ist?
Das geht mit dem Property PDFCreator.cCountOfPrintjobs.
- Code:
// Einspeisen in Druckerwarteschleife abwarten
Window.OPEN('PDF-Datei wird erstellt… (#1#### Sek.)',Seconds);
REPEAT
SLEEP(100);
Seconds += 0.1;
Window.UPDATE;
UNTIL PDFCreator.cCountOfPrintjobs = 1;
// Beenden des Drucks abwarten
WHILE PDFCreator.cCountOfPrintjobs > 0 DO BEGIN
SLEEP(100);
Seconds += 0.1;
Window.UPDATE;
END;
27. November 2012 11:37
Perfekt. Danke!!!!
Letztes Problem dabei:
Wenn ich nach senden der E-Mail die Datei wieder löschen möchte, kommt die Fehlermeldung, dass er die Datei nicht finden kann. Und das obwohl ich die Datei FileNameAtt an die E-Mail hänge. Hat das was mit Berechtigungen o.ö. zu tun?
- Code:
IF CONFIRM('E-Mail gesendet?') THEN
ERASE(FileNameAtt);
27. November 2012 14:25
PhilSan hat geschrieben:Letztes Problem dabei:
Wenn ich nach senden der E-Mail die Datei wieder löschen möchte, kommt die Fehlermeldung, dass er die Datei nicht finden kann. Und das obwohl ich die Datei FileNameAtt an die E-Mail hänge. Hat das was mit Berechtigungen o.ö. zu tun?
- Code:
IF CONFIRM('E-Mail gesendet?') THEN
ERASE(FileNameAtt);
Das könnten die Berechtigungen sein, würde ich aber ohnehin über das
FileSystemObject der Microsoft Scripting Runtime erledigen (
FSO -> FileExists bzw. DeleteFile). Wenn da auch nichts gefunden wird, dann ist jedenfalls nicht NAV daran schuld
.
27. November 2012 14:37
Hab da doch eher eine andere Vermutung... er sucht die Datei auf dem Tier (Funktion wird ja über RTC aufgerufen). Bei den Automations erreiche ich ja über
Create(Auto,False,True) das er auf dem Client ausgeführt wird.
Ist die bei den File Funktionen irgendwie auch so?
27. November 2012 14:50
Ja, das FSO ist ja auch ein Automationserver in NAV, den
OnClient- Parameter muss man dann setzen.
27. November 2012 15:23
Jetzt steh ich auf dem Schlauch... der Typ File ist doch gar keine Automation?
Also der Befehl erase(file) dort wird doch gar keine Automation angesprochen oder?
27. November 2012 15:32
Sorry für die doofe Frage :)
Gefunden und erledigt. Danke an alle für die Hilfe!!
11. November 2013 13:16
Hallo,
ich versuche nun auch bei mir Rechnungen als PDF datei zuerzeugen und lokal abzuspeichern.
Kann mir vielleicht jemand die Variablen sagen?! Was ist PDFCreatorOption ? Eine Record Variable ein Outstream oder was?! Kann mir das vielleicht jemand hier zeigen?
Vielen Dank.
11. November 2013 16:25
simon123 hat geschrieben:[…]Was ist PDFCreatorOption ? Eine Record Variable ein Outstream oder was?![…]
Weder noch, wenn man den PDFCreator installiert, hat man den als Automation-Server über die COM-Schnittstelle verfügbar. Das sind Eigenschaften und Methoden des Programms, die man dann in NAV einstellen bzw. nutzen kann.
15. November 2013 11:15
Weder noch, wenn man den PDFCreator installiert, hat man den als Automation-Server über die COM-Schnittstelle verfügbar. Das sind Eigenschaften und Methoden des Programms, die man dann in NAV einstellen bzw. nutzen kann.
Ah ok, funktioniert das auch bei NAV 5 oder erst ab einer neueren Version?
Den drucker zu installieren ist ja kein Problem, aber muss ich diesen in NAV noch speziell hinterlegen oder einrichten? Wenn ja könntest du mir dabei helfen?
15. November 2013 12:22
simon123 hat geschrieben:Ah ok, funktioniert das auch bei NAV 5 oder erst ab einer neueren Version?
Den drucker zu installieren ist ja kein Problem, aber muss ich diesen in NAV noch speziell hinterlegen oder einrichten?
Das geht auch bei Version 5. Hinterlegt werden die dann wie sonst auch in der Tabelle
Druckerauswahlen, zu finden in Verwaltung>Anwendung Einrichtung>Allgemein.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.