Probleme nach Umstellung von AfterPrint auf AfterPrintOrPreview
Markus Rewak
Hallo Philipp,jetzt hab ich ein ganz anderes Problem. Durch dieses AfterPrintOrPreview springt er nicht mehr in die Bedinung im Common Script:
If GetData("LD.Par.PrintMode")="P" Then
msgbox("ExportPath:" & GetData("LD.Par.ExportPath"))
'sPath=System.IO.Path.GetDirectoryName (GetData("LD.Par.ExportPath"))
'sFile=System.IO.Path.GetFileName (GetData("LD.Par.ExportPath"))
'sDocnum = GetData("LD.Par.DocNum")
End If
Ich will folgendes erreichen:
Direktdruck eines Beleges --> Dokument als pdf schreiben
Drucken über Vorschau --> Dokument als pdf schreiben
Nachdem das Pdf gedruckt wurde will ich es archivieren.
Durch dieses neue Event gelangt er aber nun nicht mehr in den PrintMode="P"
Folgendes ist dadurch der Fall:
Drucken Beleg 1 --> nichts passiert, weil PrintMode=N
danach nur Vorschau Beleg1 oder eines anderen Beleges --> erzeugt direkt pdf des zuvor gedruckten Dokuments, weil PrintMode=P
Mit dem AfterPrint Event hat das funktioniert aber da gab es Probleme mit dem Attgroup.
Hast du hierfür eine Lösung.
viele Grüsse
Markus
Philipp Knecht
Hi MarkusWenn du Aktionen nach dem Erstellen von PDF's ausführen möchstest musst du den Event AfterExport verwenden.
hth
Markus Rewak
Hallo Philipp,dieses AfterExport - Event zieht leider nicht. Ich verwende die Version 1.72.
Generate skript:
'Definition of Currency
isFC = Data("B1_Data.Document.DocCur") <> Data("B1_Data.Company.MainCurncy")
' Reset FirstLineText Flag
FTRendered = False
'Durchschnittliche VAT
dvat = Data("B1_Data.Document.VatSum") / (IIF(Data("B1_Data.Document.DocTotal") <> 0,Data("B1_Data.Document.DocTotal"),1))
' Handler für die Nach Print Aktion registrieren
If Not Engine.IsDoublePass Then
'If Engine.IsDoublePass Then
'AddHandler LayoutHelper.LD.AfterPrint,AddressOf LD_AfterPrint
AddHandler LayoutHelper.LD.AfterExport,AddressOf LD_AfterExport
AddHandler LayoutHelper.LD.AfterPrintOrPreview,AddressOf LD_AfterPrintOrPreview
handlerAdded = True
End If
Common Skript:
Dim depth As Integer
Dim isFC,FTRendered As Boolean
Dim scontoAmount As Double
Dim dvat As Double
Dim handlerAdded As Boolean = False
Dim cEasy As EasyConnector.cEasy
Dim sPath As String
Dim sFile As String
Dim sDocnum As String
Dim sPrintDef As String
Dim sFormType As String
'Private Sub LD_AfterPrint(company As SAPbobsCOM.Company , sendToPrintDriver As Boolean)
Private Sub LD_AfterPrintOrPreview()
sFormType=GetData("LD.Par.FormType").ToString()
If GetData("LD.Par.PrintMode")="N" And GetData("LD.Par.Preview")="N" Then
Select Case sFormType
Case "149"
'Angebot
sPrintDef="U0000032"
Case "139"
'Auftrag
sPrintDef="U0000031"
End Select
LayoutHelper.LayoutOpener.ExecutePrintDef( sPrintDef ,LayoutHelper.LayoutOpener.OpenLayoutModes.PDF ,"DocEntry",GetData("LD.Par.DocEntry"), "DocNum", GetData("LD.Par.DocNum"), "ObjectId", GetData("LD.Par.ObjectId"))
End If
End Sub
Private Sub LD_AfterExport()
msgbox ("ExportPath:" & GetData("LD.Par.ExportPath"))
msgbox ("Docnum:" & GetData("LD.Par.DocNum"))
sPath=System.IO.Path.GetDirectoryName (GetData("LD.Par.ExportPath"))
sFile=System.IO.Path.GetFileName (GetData("LD.Par.ExportPath"))
sDocnum = GetData("LD.Par.DocNum")
cEasy= New EasyConnector.cEasy()
cEasy.archive( SwissAddonFramework.B1Connector.GetB1Connector().Application , SwissAddonFramework.B1Connector.GetB1Connector().Company , sFormType, sdocnum, spath , sfile)
End Sub
Gruß
Markus
Philipp Knecht
Hallo MarkusWir haben einen neuen Release am Start, müssen aber noch hinterlistige Threading - Probleme ausmerzen die leier nicht so einfach zu finden sind.
Mit diesem neuen Release klappt dein Vorhaben 100%.
Werde auch noch UseCases zu deisem Thema veröffentlichen (Best Practises, AfterPrintOrPreview, AfterExport, AfterMailOrFax)
hth
Markus Rewak
Hallo Philipp,sagen wir mal 75% :-) Der Wahnsinn nimmt einfach kein Ende.
Mit der Version 1.72 reagiert das System nun auf den AfterExport - Event und springt in die After-Export Methode rein, jedoch steht im Parameter GetData("LD.Par.ExportPath")) nichts mehr drin.
Die Belegnummer bleibt erhalten (GetData("LD.Par.Docnum") ), ich benötige aber weiterhin auch den ExportPath, damit ich die eben erzeugte pdf-datei auch weiterhin verarbeiten kann.
Viele Grüsse
Markus
Markus Rewak
gibt es hierfür eine Lösung?Philipp Knecht
Hi MarkusHast du dies im Echbetrieb (sprich mittels PDF - Button) getestet?
hth
Markus Rewak
Hi Philipp,der Parameter LD.ExportPath liefert in beiden Fällen keinen Wert zurück:
Fall1: Drucken, PDF-Druck per skript anstossen
Fall2: Button PDF
wie gesagt, er springt zwar nun in die Methode rein aber der ExportPath-Parameter ist leer. Alle anderen Parameter sind vorhanden:
Private Sub LD_AfterExport()
msgbox ("ExportPath:" & GetData("LD.Par.ExportPath"))
msgbox ("Docnum:" & GetData("LD.Par.DocNum"))
End Sub
gruss
Markus
Markus Rewak
bzw. es wird der ExportPath aus der falschen Printdefinition geliefert. Ich benötige aber unbedingt den ExportPath aus der anderen Printdefinition für den PDF-Druck.Benötige dringend eine Lösung.
Kannst mir einen Tipp geben wie ich das realisieren kann?
gruss
Markus
Manuel Marhold
Hi Markus,ist dein Exportpfad eine SQL-Query oder ein fester Wert?
Du kannst dir den Wert der printDef per SQL-Query ziehen:
SELECT U_ExpPath FROM [@SWA_LD_PRNDEF] WHERE Code=''
Und wenn das ein Querystring ist, der hinterlegt ist, jagst du den in LD.QueryData(), diese funktion zieht dann auch die Texte, falls du [@T000001] o.ä. in der Query verwendest. Evetuelle Parameter in der Query, wie z.B. "[%DocNum]", müssen dann nat. erseztzt werden durch "Data("LD.Par.DocNum")".
gruß
Manuel
Markus Rewak
Hallo Manuel,ganz so einfach ist es leider nicht. Der ExportPath enthält Dateiname + Pfad. Der Dateiname ist allerdings dynamisch:
select replace(replace(replace((replace( convert(varchar,getdate(),121),'-','')),':',''),'.',''),' ','')
Wenn ich später diese Query ausführe, bekomme ich einen anderen Wert. Ich benötige exakt den ExportPath der beim Drucken des PDF-Dokuments erzeugt wird.
gruss
Markus
Markus Rewak
Hallo Philipp,ich benötige hier dringend mal deine Unterstützung. Ich komme hier seit Wochen nicht mehr weiter.
In der Methode AfterExport benötige ich unbedingt den ExportPath aus der Printdefinition für den PDF-Druck, der zum Zeipunkt des Drucks ausgeführt wird.
gruss
Markus
0
Please sign in to leave a comment.
Comments
0 comments