Dynamics AX Blog - Dynamics AX 2009 - Beiträge von 2008 - Seite 4
Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Dynamics AX 2009« relevant sind. 
RSS-Feed dieser Version

RSS-Feed dieser Version
Momentan angezeigt werden nur Beiträge von »2008«.
Dynamics AX: Rechnungen per Code druckenÜber nachstehenden Code kann ganz einfach jederzeit eine Verkaufsrechnung nachträglich ausgedruckt werden. Durch leichte Modifikationen des Codes gilt dies auch für sämtliche anderen verkaufs- und einkaufsseitigen Dokumente. Hier ein kurzes Beispiel unter AX 2009
static void PrintSalesInvoice(Args _args)
{
custInvoiceJour custInvoiceJour;
SalesFormLetter salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false);
PrintJobSettings printJobSettings = new PrintJobSettings();
Args args = new Args();
boolean prompt = true;
boolean printIt = true;
;
if (prompt)
{
// Auswahl des Benutzers über Dialog
printIt = printJobSettings.printerSettings('SysPrintForm');
}
else
{
// Printjobsettings per Code steuern
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName(@'c:\temp\myfile.pdf');
}
if (!printIt)
{
return; // Benutzerabbruch
}
salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
select firstOnly custInvoiceJour
where custInvoiceJour.salesid == '100001';
args.record(custInvoiceJour);
args.caller(salesFormLetter);
new MenuFunction(menuitemoutputstr(SalesInvoice), MenuItemType::Output).run(args);
}
Nachstehend ein Code-Beispiel unter AX 4.0
static void PrintSalesInvoice(Args _args)
{
custInvoiceJour custInvoiceJour;
SalesFormLetter salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false);
PrintJobSettings printJobSettings = new PrintJobSettings();
Args args = new Args();
boolean prompt = true;
boolean printIt = true;
salesPrintSetup salesPrintSetup;
;
if (prompt)
{
// Auswahl des Benutzers über Dialog
printJobSettings = new PrintJobSettings(salesPrintSetup.PrintJobSettings);
printIt = printJobSettings.printerSettings('SysPrintForm');
salesPrintSetup.PrintJobSettings = printJobSettings.packPrintJobSettings();
}
else
{
// Printjobsettings per Code steuern
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName(@'c:\temp\myfile.pdf');
}
if (!printIt)
{
return; // Benutzerabbruch
}
salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
select firstOnly custInvoiceJour
where custInvoiceJour.salesid == '100001';
args.record(custInvoiceJour);
args.caller(salesFormLetter);
new MenuFunction(menuitemoutputstr(SalesInvoice), MenuItemType::Output).run(args);
}
|
CSV-Datei und Zeilenumbrüche
10.03.2008Microsoft Dynamics AX (Axapta)
Wenn man aus AX Daten in eine CSV-Datei exportieren muss, gibt es immer wieder Probleme mit Zeilenumbrüchen in mehrzeiligen AX-Feldern. Um diese zu umgehen, müssen lediglich folgende Punkte beachtet werden:
static void Export_CSV(Args _args) { TextIO textFile; CustTable CustTable; str csv(str _str) { _str = strReplace(_str, """, """"); return """ + _str + """; } ; textFile = new TextIO("c:\temp\csv_test.csv","W",0); textFile.outFieldDelimiter(";"); textFile.outRecordDelimiter(num2char(10)); // Wichtig wegen Zeilenumbrüchen!!! while select CustTable { textFile.write( csv(CustTable.Name) + ";" + csv(CustTable.Address) + ";" ); } textFile = null; } |
|
|
|
|
|
|
Es gibt vier verschiedene Dateien, in welchen serverseitig Informationen zu Labels gespeichert werden:
Bei den Datetypen, ald, alc und ali existiert pro Sprache und Labelfile jeweils eine Datei im AX-Applikationsverzeichnis (z.b. axSYSde-at wobei SYS für die Labeldatei und de-at für die jeweilige Sprache steht).
Bei den alt-Dateien existiert lediglich pro Sprache eine eigene Datei (z.b. axap*.alt wobei * für die jeweilige Sprache steht).
Einige Labels werden allerdings clientseitig im bin-Verzeichnis gespeichert. Dies sind z.b. jene des Menüs (Datei - Bearbeiten - Werkzeuge ...). Hier gibt es eigene Dateitypen:
Bei beiden Dateitypen existiert pro verwendeter Sprache jeweils eine Datei.
Da die Dateien clientseitig installiert sind, kann rein theoretisch jeder Client zumindest diese Texte anpassen, ob das Sinn macht bleibt dahingestellt. Außerdem besteht die Gefahr die Datei, durch Tippfehler oder wenn man die ktd-Datei im falschen Zeichensatz bearbeitet, zu zerstören. Dann ist der Client nicht mehr startbar!
In dieser ktd-datei werden übrigens auch einige andere Dinge gesteuert. Zum Beispiel liefert in einem deutschen AX die Abfrage
if("a" == "ä")immmer true zurück. Grund hierfür ist die nachstehende Passage im zur deutschen Sprache gehörigen axsysde-at.ktd