Although MS Connector for Dynamics' purpose is to connect and integrate products from MS Dynamics family it is possible to use it to integrate AX and 3rd party's systems.
We are currently using Connector this way. I faced several problems through AIF services development to be able to use them with Connector. Here are some points.
Originally I wanted to write about my problems with Dynamics AX and their solutions. But then I started to play with Dynamics CRM and original purpose of my blog has been changed. Now it is a collection of the problems which I found on my way through my life with AX and CRM .o)
Friday, 31 October 2014
Thursday, 22 May 2014
AX 2012 R3 Demo running on Azure
I was thinking how to try new release of AX 2012 when the test environment (virtual machine) provided by Microsoft is quite demanding and I have no server with required configuration.
I found this article about how to set up AX 2012 R3 demo on Azure. Hope it will help.
http://blogs.msdn.com/b/axinthefield/archive/2014/05/01/setting-dynamics-ax-2012-r3-demo-with-lcs-and-azure.aspx
Note: You will need acces to Dynamics Lifecycle Services (https://lcs.dynamics.com/) and some Azure subscription.
I found this article about how to set up AX 2012 R3 demo on Azure. Hope it will help.
http://blogs.msdn.com/b/axinthefield/archive/2014/05/01/setting-dynamics-ax-2012-r3-demo-with-lcs-and-azure.aspx
Note: You will need acces to Dynamics Lifecycle Services (https://lcs.dynamics.com/) and some Azure subscription.
Friday, 28 March 2014
Microsoft Office for iPad
I've just tested Microsoft Excel and PowerPoint for iPad. Attached documents are created on iPad mini.
For me Microsoft Office for iPad is quite perfect software.
PowerPoint sample
Excel sample
For me Microsoft Office for iPad is quite perfect software.
PowerPoint sample
Excel sample
Ax 2012: Pass printer settings from class dialog to SSRS report
For one project I needed to create standard runnable class which calls SSRS report in a while loop. The question was how to work with the printer/destination settings.
Solution:
1. Create your runnable class "YourController" from which you will control calls of your report "YourReport".
2. Create your printer setup class "YourPrinterSetup".
class YourPrinterSetup extends RunBase
{
Map mapPrinterSettings;
YourController baseClass;
Args args;
#define.CurrentVersion(1)
#localmacro.CurrentList
mapPrinterSettings
#endmacro
}
void new(Args _args)
{
;
mapPrinterSettings = new Map(Types::Enum, Types::Container);
Args = _args;
}
public container pack()
{
return [#CurrentVersion, [#CurrentList, mapPrinterSettings.pack()]];
}
public boolean unpack(container _packedClass)
{
Version version;
container packedPrinterSettings, packedOutPaymRecordList, packedValues;
version = RunBase::getVersion(_packedClass);
switch (version)
{
case(#CurrentVersion) :
[version, packedValues] = _packedClass;
[#currentList, packedPrinterSettings] = packedValues;
break;
default :
return false;
}
if (packedPrinterSettings)
{
// Recreate the object from the packed values.
mapPrinterSettings = Map::create(packedPrinterSettings);
}
else
{
mapPrinterSettings = new Map(Types::Enum, Types::Container);
}
return true;
}
static void main(Args _args)
{
YourPrinterSetup printSetup = new YourPrinterSetup(_args);
printSetup.run();
}
updatePrinterSettings is used to store chosen settings.
public void updatePrinterSettings(container _printerSettings)
{
mapPrinterSettings.insert("1", _printerSettings);
baseClass.setPrinterSettings(_printerSettings);
}
In run method the standard SRSPrintDestinationSettings class is called.
void run()
{
SrsPrintDestinationSettings printSettings;
FormRun printSettingForm;
boolean ok = true;
Object caller = args.caller();
baseClass = caller.runbase();
printSettings = new SrsPrintDestinationSettings();
printSettings.unpack(this.getPrinterSettings());
printSettings.fromPage(1);
printSettings.toPage(99999999);
args.caller(printSettings);
args.name(formstr(SRSPrintDestinationSettingsForm));
printSettingForm = classfactory.formRunClass(args);
printSettingForm.init();
printSettingForm.run();
printSettingForm.wait(true);
ok = printSettingForm.closedOk();
if (ok)
{
this.updatePrinterSettings(printSettings.pack());
}
}
3. Create Menu item "YourPrinterSetupMenuItem" of type Action. Object type Class, Object "YourPrinterSetup" class.
4. Add "YourPrinterSetupMenuItem" to the dialog of your "YourController" class. Something like this:
dialog.addMenuItemButton(MenuItemType::Action, "YourPrinterSetup", DialogMenuItemGroup::CurrentGrp);
5. Don't forget to implement setPrinterSettings method to your "YourController" class. It is used to pass chosen printer settings to "YourController".
public void setPrinterSettings(container _settings)
{
printerSettings = _settings;
printDestinationSettings = new SRSPrintDestinationSettings();
if (conlen(printerSettings) > 0)
{
printDestinationSettings.unpack(printerSettings);
dialogReportDestination.value(strFmt("%1", printDestinationSettings.printMediumType()));
}
}
6. Pass printer settings to your "YourReport". Use it in that place where you call the report. See example below.
public class YourController extends RunBaseBatch
{
container printerSettings;
}
public void run()
{
SrsReportRunController srsReportRunCont;
SRSPrintDestinationSettings printDestinationSettings;
printDestinationSettings = new SRSPrintDestinationSettings();
if (conlen(printerSettings) > 0)
{
printDestinationSettings.unpack(printerSettings);
}
srsReportRunCont = new SrsReportRunController();
srsReportRunCont.parmReportName('YourReport.Report');
srsReportRunCont.parmReportContract().parmPrintSettings(printDestinationSettings);
}
Hope it will help someone.
Mind that you can modify SrsPrintDestinationSettingsForm to enable/disable possibilities.
Solution:
1. Create your runnable class "YourController" from which you will control calls of your report "YourReport".
2. Create your printer setup class "YourPrinterSetup".
class YourPrinterSetup extends RunBase
{
Map mapPrinterSettings;
YourController baseClass;
Args args;
#define.CurrentVersion(1)
#localmacro.CurrentList
mapPrinterSettings
#endmacro
}
void new(Args _args)
{
;
mapPrinterSettings = new Map(Types::Enum, Types::Container);
Args = _args;
}
public container pack()
{
return [#CurrentVersion, [#CurrentList, mapPrinterSettings.pack()]];
}
public boolean unpack(container _packedClass)
{
Version version;
container packedPrinterSettings, packedOutPaymRecordList, packedValues;
version = RunBase::getVersion(_packedClass);
switch (version)
{
case(#CurrentVersion) :
[version, packedValues] = _packedClass;
[#currentList, packedPrinterSettings] = packedValues;
break;
default :
return false;
}
if (packedPrinterSettings)
{
// Recreate the object from the packed values.
mapPrinterSettings = Map::create(packedPrinterSettings);
}
else
{
mapPrinterSettings = new Map(Types::Enum, Types::Container);
}
return true;
}
static void main(Args _args)
{
YourPrinterSetup printSetup = new YourPrinterSetup(_args);
printSetup.run();
}
updatePrinterSettings is used to store chosen settings.
public void updatePrinterSettings(container _printerSettings)
{
mapPrinterSettings.insert("1", _printerSettings);
baseClass.setPrinterSettings(_printerSettings);
}
In run method the standard SRSPrintDestinationSettings class is called.
void run()
{
SrsPrintDestinationSettings printSettings;
FormRun printSettingForm;
boolean ok = true;
Object caller = args.caller();
baseClass = caller.runbase();
printSettings = new SrsPrintDestinationSettings();
printSettings.unpack(this.getPrinterSettings());
printSettings.fromPage(1);
printSettings.toPage(99999999);
args.caller(printSettings);
args.name(formstr(SRSPrintDestinationSettingsForm));
printSettingForm = classfactory.formRunClass(args);
printSettingForm.init();
printSettingForm.run();
printSettingForm.wait(true);
ok = printSettingForm.closedOk();
if (ok)
{
this.updatePrinterSettings(printSettings.pack());
}
}
3. Create Menu item "YourPrinterSetupMenuItem" of type Action. Object type Class, Object "YourPrinterSetup" class.
4. Add "YourPrinterSetupMenuItem" to the dialog of your "YourController" class. Something like this:
dialog.addMenuItemButton(MenuItemType::Action, "YourPrinterSetup", DialogMenuItemGroup::CurrentGrp);
5. Don't forget to implement setPrinterSettings method to your "YourController" class. It is used to pass chosen printer settings to "YourController".
public void setPrinterSettings(container _settings)
{
printerSettings = _settings;
printDestinationSettings = new SRSPrintDestinationSettings();
if (conlen(printerSettings) > 0)
{
printDestinationSettings.unpack(printerSettings);
dialogReportDestination.value(strFmt("%1", printDestinationSettings.printMediumType()));
}
}
6. Pass printer settings to your "YourReport". Use it in that place where you call the report. See example below.
public class YourController extends RunBaseBatch
{
container printerSettings;
}
public void run()
{
SrsReportRunController srsReportRunCont;
SRSPrintDestinationSettings printDestinationSettings;
printDestinationSettings = new SRSPrintDestinationSettings();
if (conlen(printerSettings) > 0)
{
printDestinationSettings.unpack(printerSettings);
}
srsReportRunCont = new SrsReportRunController();
srsReportRunCont.parmReportName('YourReport.Report');
srsReportRunCont.parmReportContract().parmPrintSettings(printDestinationSettings);
}
Hope it will help someone.
Mind that you can modify SrsPrintDestinationSettingsForm to enable/disable possibilities.
Labels:
2012,
ax,
Ax2012,
destination,
print,
settings,
srsprintdestinationsettings,
SSRS
Subscribe to:
Posts (Atom)