FileMgt.BLOBExport Trennung des Streams

Bild Microsoft Dynamics NAV 2017

FileMgt.BLOBExport Trennung des Streams

Beitragvon Ralph71 » 10. Februar 2023 12:02

Hallo zusammen,

Ich möchte aus einem Report eine PDF generieren und diese anschließend exportieren.
Unten stehender Code ist zunächst mal eine Machbarkeitsprüfung. Daher rudimentär..

Problem:
Wenn ich für den Export der Rechnung 2 Datensätze markiere und diese in SalesInvHeader übergeben werden, dann:
* durchläuft er zweimal den Repeat mit unterschiedlichen SalesInvHeader-Parameter --> korrekt
* generiert eine PDF und exportiert diese in entspr. lokale Userverzeichnis --> korrekt
ABER:
Im TempBlob stehen sofort immer 2 Rechnungen. Dh er generiert beim ersten Durchlaufen des Repeat eine PDF mit BEIDEN Rechnungen. Beim zweiten Durchlauf schreibt er dann den gleichen Blob nochmal.
Ergebnis: zwei PDF-Dokumente, die inhaltlich identisch sind.

Ich verstehe nicht, warum im TempBlob SOFORT beide PDFs geschrieben sind, obwohl er im Repeat selbst nur einen Datensatz aus SalesInvHeader in der "Hand" hat.
Wo liegt der Fehler?

Code: Alles auswählen
SalesInvHeader := Rec;
CurrPage.SETSELECTIONFILTER(SalesInvHeader);
Z :=0;
WITH SalesInvHeader DO BEGIN
  IF FINDSET THEN BEGIN
    REPEAT
      SaveDocumentAsPDFToStream(SalesInvHeader, TempBlob);
      Z:= Z + 1;
    UNTIL SalesInvHeader.NEXT = 0;
  END;
END;

LOCAL SaveDocumentAsPDFToStream(DocumentVariant : Variant;VAR TempBlob : TEMPORARY Record TempBlob)
ReportID := 50176;
DataTypeMgt.GetRecordRef(DocumentVariant, DocumentRef);

TempBlob.Blob.CREATEOUTSTREAM(VarOutStream);
IF REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, VarOutStream, DocumentRef) THEN
  BEGIN
    FileMgt.BLOBExport(TempBlob,'OST'+ FORMAT(Z) + '.pdf',FALSE);
  END
ELSE BEGIN
   ERROR(TxtCouldNotSaveReport, ReportID);
END;



Vielen Dank!
Ralph71
 
Beiträge: 69
Registriert: 20. Mai 2020 11:27
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon fiddi » 10. Februar 2023 12:09

Hallo,

wenn du in den Filterkriterien nach dem Start des Reports auf zwei oder mehr Belegnummern filterst, wird nur ein Bericht und damit nur eine PDF erzeugt.

GruĂź fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon Ralph71 » 10. Februar 2023 12:52

Ursache also SETSELECTIONFILTER
Das dachte ich mir, logisch ist es aber nicht (fĂĽr mich).
Was muss ich tun, um tatsächlich 2 PDFs erzeugen zu können? Künftig werden das über 100 sein....
Ralph71
 
Beiträge: 69
Registriert: 20. Mai 2020 11:27
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon fiddi » 10. Februar 2023 13:24

Hallo,

das ist sehr logisch!

Alles was du in den Filterkriterien eines Berichts selektierst, wird auch in einem Bericht ausgedruckt.
Du willst doch auch nicht, dass in einer Artikelliste jeder Artikel einzeln ausgedruckt wird!?

Lösung: Berichtsparameter abfragen, dann eine Vorschaltroutine bauen, die dann für jeden selektierten Beleg den Bericht separat auf den Datensatz gefiltert mit den abgefragten Parametern aufruft.

GruĂź fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon Ralph71 » 10. Februar 2023 14:14

erster Ansatz:
jetzt schreibt er zwar meistens eine eigene PDF, ab und an sind die PDFs aber leer.
Jetzt wirds schwierig....

Code: Alles auswählen
SalesInvHeader := Rec;
CurrPage.SETSELECTIONFILTER(SalesInvHeader);
Z :=0;
WITH SalesInvHeader DO BEGIN
  IF FINDSET THEN BEGIN
    REPEAT
      SalesInvHeader2 := SalesInvHeader;
      SalesInvHeader2.SETRECFILTER;
      SaveDocumentAsPDFToStream(SalesInvHeader2, TempBlob);
      SLEEP(500);
      Z:= Z + 1;
    UNTIL SalesInvHeader.NEXT = 0;
  END;
END;

Ralph71
 
Beiträge: 69
Registriert: 20. Mai 2020 11:27
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon fiddi » 10. Februar 2023 14:32

Hallo,

du solltest dir mal die Doku zu SetRecfilter durchlesen, der tut nicht immer was man erwartet.

Vielleicht ist ja auch nicht zu drucken, und der Bericht springt raus.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon Ralph71 » 14. Februar 2023 10:08

Hallo,
jetzt ohne SetRecfilter.
Um jetzt den Client aus dem Spiel zu nehmen nutze ich "FileMgt.BLOBExportToServerFile"

Ergebnis: beim ersten Export funktioniert alles fehlerfrei. Beim nächsten Export (ich wähle die gleichen Rechnungen erneut aus) erstellt er mir von der Dateigröße her identische PDF-Dokumente, allerdings sind diese alle leer.
Ich denke, der Blob-Inhalt ist irgendwie fehlerhaft. Muss ich den Blob zurĂĽcksetzen? Wenn ja, wie?

Code: Alles auswählen
CurrPage.SETSELECTIONFILTER(SalesInvHeader);
Z :=0;
WITH SalesInvHeader DO BEGIN
  IF FINDSET THEN BEGIN
    REPEAT
      SalesInvHeader2 := SalesInvHeader;
      SalesInvHeader3.SETFILTER("No.",'%1',SalesInvHeader2."No.");
      IF SalesInvHeader3.FINDFIRST THEN
      SaveDocumentAsPDFToStream(SalesInvHeader3, TempBlob);
      Z:= Z + 1;
    UNTIL SalesInvHeader.NEXT = 0;
  END;
END;

LOCAL SaveDocumentAsPDFToStream(DocumentVariant : Variant;VAR TempBlob : TEMPORARY Record TempBlob)
ReportID := 50176;
DataTypeMgt.GetRecordRef(DocumentVariant, DocumentRef);

TempBlob.Blob.CREATEOUTSTREAM(VarOutStream);
IF REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, VarOutStream, DocumentRef) THEN
  BEGIN
    FileMgt.BLOBExportToServerFile(TempBlob,'c:\temp\ost'+ FORMAT(Z) + '.pdf');
    Z:= Z + 1;
  END
ELSE BEGIN
   ERROR(TxtCouldNotSaveReport, ReportID);
END;

Ralph71
 
Beiträge: 69
Registriert: 20. Mai 2020 11:27
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon Ralph71 » 16. Februar 2023 16:06

Ich hab das jetzt verworfen und über myrep.SAVEASPDF gelöst.
Viel einfacher.

Hilfestellung bei der Lösung: viewtopic.php?f=64&t=25519

Danke fĂĽr die UnterstĂĽtzung.
Ralph71
 
Beiträge: 69
Registriert: 20. Mai 2020 11:27
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: FileMgt.BLOBExport Trennung des Streams

Beitragvon enh » 16. Februar 2023 21:49

Warum nicht SAVEASPDF - das wollte ich gestern schon fragen, hab's dann aber offenbar wieder vergessen abzuschicken ;-)
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV


ZurĂĽck zu NAV 2017

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast