I have seen some posts recently about model files and missing labels. There is confusion when delivering model file, if all newest labels are exported. Sometimes if model version is updated, new labels are still not showing up in application. What is more strange that when you go to AOT\Labels\<your label> and export language file - you will see the old labels. That is not the problem with model file, but rather the way Dynamics AX 2012 handles labels. Application is using temporary label files from ..\program files\Microsoft dynamics ax\60\server\bin\appl\standard, and these files sometimes are out of sync with model repository.
So if you see missing labels after model file installation, do the following:
1. Stop AOS
2. go to ..\program files\Microsoft dynamics ax\60\server\bin\appl\standard and delete all files starting with axXXX*.* (where XXX your label file ID). Do not worry these are only temporary files that are created when you starting AOS.
3. Start AOS. You can check the same folder as in step 2 to make sure your new label files are generated.
Development Tips & Tricks in Dynamics AX
Various Dynamics AX development tips and tricks
Monday, 13 January 2014
Tuesday, 20 September 2011
Wednesday, 11 August 2010
Printing existing sales invoice into a file
Recently i had a problem with Dynamics AX 2009 printing already existing sales invoice into a file. Normally i would use code like this:
SalesFormLetter salesFormLetter;
CustInvoiceJour custInvoiceJour;
PrintJobSettings printJobSettings;
;
select firstonly custInvoiceJour; // This is for testing purposes only
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false);
printJobSettings = new printJobSettings();
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName('C:\\Temp\\Test.pdf');
salesFormletter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
custInvoiceJour.printJournal(SalesFormletter);
However this is not working due to FormLetterReport.loadPrintSettings method, which is overwriting Target parameter.
To solve this issue elegantly, and keep standard behaviour, there are several actions required:
1. Add boolean variable „skipPrintTargetOverwrite“, in SalesFormLetter class declaration.
2. Add method „skipPrintTargetOverwrite“ in SalesFormLetter class:
Boolean skipPrintTargetOverwrite(boolean _skip = skipPrintTargetOverwrite)
{
skipPrintTargetOverwrite = _skip;
return skipPrintTargetOverwrite;
}
3. Add one optional parameter in FormLetterReport.loadPrintSettings method:
public void loadPrintSettings(Common _jourTable, Common _transTable, str _languageId, boolean skipTargetOverwrite = false)
Also change lines where setTarget(PrintMedium::Screen) is set:
Old version:
printSettingDetail.parmPrintJobSettings().setTarget(PrintMedium::Screen);
New version:
if (!skipTargetOverwrite) printSettingDetail.parmPrintJobSettings().setTarget(PrintMedium::Screen);
4. On SalesInvoice report fetch method find code salesFormLetterReport.loadPrintSettings and replace like following:
Old version:
salesFormLetterReport.loadPrintSettings(
custInvoiceJour,
custInvoiceJour.salesTable(),
custInvoiceJour.LanguageId);
New version:
salesFormLetterReport.loadPrintSettings(
custInvoiceJour,
custInvoiceJour.salesTable(),
custInvoiceJour.LanguageId,
salesFormLetter?salesFormLetter.skipPrintTargetOverwrite():false);
Once all that is done, there is only one line required in my code generating file:
SalesFormLetter salesFormLetter;
CustInvoiceJour custInvoiceJour;
PrintJobSettings printJobSettings;
;
select firstonly custInvoiceJour; // This is for testing purposes only
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false);
printJobSettings = new printJobSettings();
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName('C:\\Temp\\Test.pdf');
salesFormletter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
salesFormLetter.skipPrinttargetOverwrite(true);
custInvoiceJour.printJournal(SalesFormletter);
I hope that helps if someone having a troubles.
SalesFormLetter salesFormLetter;
CustInvoiceJour custInvoiceJour;
PrintJobSettings printJobSettings;
;
select firstonly custInvoiceJour; // This is for testing purposes only
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false);
printJobSettings = new printJobSettings();
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName('C:\\Temp\\Test.pdf');
salesFormletter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
custInvoiceJour.printJournal(SalesFormletter);
However this is not working due to FormLetterReport.loadPrintSettings method, which is overwriting Target parameter.
To solve this issue elegantly, and keep standard behaviour, there are several actions required:
1. Add boolean variable „skipPrintTargetOverwrite“, in SalesFormLetter class declaration.
2. Add method „skipPrintTargetOverwrite“ in SalesFormLetter class:
Boolean skipPrintTargetOverwrite(boolean _skip = skipPrintTargetOverwrite)
{
skipPrintTargetOverwrite = _skip;
return skipPrintTargetOverwrite;
}
3. Add one optional parameter in FormLetterReport.loadPrintSettings method:
public void loadPrintSettings(Common _jourTable, Common _transTable, str _languageId, boolean skipTargetOverwrite = false)
Also change lines where setTarget(PrintMedium::Screen) is set:
Old version:
printSettingDetail.parmPrintJobSettings().setTarget(PrintMedium::Screen);
New version:
if (!skipTargetOverwrite) printSettingDetail.parmPrintJobSettings().setTarget(PrintMedium::Screen);
4. On SalesInvoice report fetch method find code salesFormLetterReport.loadPrintSettings and replace like following:
Old version:
salesFormLetterReport.loadPrintSettings(
custInvoiceJour,
custInvoiceJour.salesTable(),
custInvoiceJour.LanguageId);
New version:
salesFormLetterReport.loadPrintSettings(
custInvoiceJour,
custInvoiceJour.salesTable(),
custInvoiceJour.LanguageId,
salesFormLetter?salesFormLetter.skipPrintTargetOverwrite():false);
Once all that is done, there is only one line required in my code generating file:
SalesFormLetter salesFormLetter;
CustInvoiceJour custInvoiceJour;
PrintJobSettings printJobSettings;
;
select firstonly custInvoiceJour; // This is for testing purposes only
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false);
printJobSettings = new printJobSettings();
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName('C:\\Temp\\Test.pdf');
salesFormletter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
salesFormLetter.skipPrinttargetOverwrite(true);
custInvoiceJour.printJournal(SalesFormletter);
I hope that helps if someone having a troubles.
Subscribe to:
Posts (Atom)