Hi folks!
I will show you how to create a CommandButton in a form able to launh a SSRS report in Report Viewer from AX 2009 with parameter passing.
Picture yourself that we have a SSRS report with a parameter called "test", and this parameter must be taken from the datasource table of the form.
All you have to do is create a CommandButton control in your form and override the "clicked" method with this code:
void clicked()
{
//declare the parameter
str _test;
;
//assign to the parameter the value of the datasource field
_test = YourTableName.YourFieldName;
infoLog.urlLookup(
strfmt("http://<yourServername>/<yourReportWebServiceName>/Pages/ReportViewer.aspx?/<yourReportName>&rs:Command=Render&<Test>=%1",_test));
super();
}
This command will open your browser and automatically launch the report with the specified parameter.
Sometimes I noticed visualization problems with browser different from Internet Explorer.
If Internet Explorer isn't the default browser, just change the command "infolog.urlLookup()" with:
WinAPI::shellExecute("iexplore.exe",strfmt("http://<yourServername>/<yourReportWebServiceName>/Pages/ReportViewer.aspx?/<yourReportName>&rs:Command=Render&<Test>=%1",_test),"","",1);
That's all!
...if users don't go to AX, AX will go to the users...! a blog about Dynamics AX tips and tricks, Sharepoint and Reporting Services
Showing posts with label AX. Show all posts
Showing posts with label AX. Show all posts
Monday, November 18, 2013
Thursday, November 8, 2012
Calculation of the item average availability
Hi all!
This time I will talk to you about the way to calculate average availability over time in AX 2009.
The calculation of the average availability requires the availability of every item code on a specific date (usually at the end of month), but this information seems not available directly in AX 2009.
I found a way to retrieve this information: I create a batch class that runs every day and check if the current day is the last day of the month.
For doing this check I have used the "endMth" function, that works also with leap years
Here's the code:
void Run()
{
Table1 table1;
TransDate t = today();
TransDate lastdayofMth;
;
lastdayofMth = endmth(t);
if (t==lastdayofMth)
{
//Insert your code here for populate a custom table with item availability
}
}
This is part of a custom project I developed for get the Inventory Turnover Index in AX 2009.
(if anyone is interested please do not hesitate to contact me).
See you next time!...
Etichette:
availability,
average,
AX,
AX2009,
DAX,
inventory turnover
Friday, November 2, 2012
Passing values between two forms
Hi all!
Today i will talk to you about passing values between forms in AX...
We have to open a form with data filtered by specific parameters coming from another form.
In this specific case I have to pass ItemId and InventDimId from InventDimCombination (formA) to a custom-made form (formB).
First I created a MenuItemButton on formA which calls FormB and I override the clicked method with this code:
void clicked()
{
Args _args;
FormRun _formRun;
str _filterValue;
;
//Assign at _filterValue a string that contains ItemId and InventDimId in a unique field which is
//pass to the next form
_filterValue = (InventDimCombination.ItemId + '-' + InventDimCombination.InventDimId);
_args = new Args();
// _filterValue is passed to next form
_args.parm(_filterValue);
_args.name(formstr(formB));
_args.caller(this);
// Creating object for FormRun and initialization for load
_formRun = ClassFactory.formRunClass(_args);
_formRun.init();
_formRun.run();
_formRun.wait();
}
Then I override the init method of the formB datasource:
public void init()
{
QueryBuildRange rangeItemId;
QueryBuildRange rangeConfigId;
QueryBuildRange rangeColorId;
str Config;
str Color;
str s,t;
int i;
super();
//check if value is arrived from formA
if(element.args().parm())
{
//retrieve ItemId and InventDimId as two separate field from the passed value
i = strlen(element.args().parm());
s = substr(element.args().parm(),i-7,8);//inventDimId
t = strDel(element.args().parm(),i-8,9);//ItemId
Config = InventDim::find(s).configId;
Color = InventDim::find(s).InventColorId;
//create the query to initialize the form
rangeItemId = this.query().dataSourceTable(tablenum(formBtable)).addRange(fieldnum(formBTable, ItemIdfield));
rangeConfigId = this.query().dataSourceTable(tablenum(formBtable)).addRange(fieldnum(formBtable, ConfigIdfield));
rangeColorId = this.query().dataSourceTable(tablenum(formBtable)).addRange(fieldnum(formBtable, InventColorIdfield));
rangeItemId.value(t);
rangeConfigId.value(Config);
rangeColorId.value(Color);
rangeItemId.status(RangeStatus::Hidden);
rangeConfigId.status(RangeStatus::Hidden);
rangeColorId.status(RangeStatus::Hidden);
}
}
That's all, when you press the button in formA, the formB will open showing only data related to the passed parameters
See you next time!
Etichette:
AX,
AX2009,
DAX,
passing parameters,
passing values between form
Subscribe to:
Posts (Atom)