This blog is for Dynamics AX (AXAPTA) Developers,this will help you for your development issues. This site contains some Microsoft Dynamics AX X++ Codes for use in your day to day use.
24 December 2013
Microsoft Dynamics AX 2015 Next release in 2014 or 2015 Dynamics AX 2013-2015 Road map
Microsoft Dynamics AX 2015 Road map
Click here to download the PDF file
The next major release of Microsoft Dynamics AX is code named ’Rainier’. It is a new cloud
optimized platform for deployments in private and public cloud as well as on-premises. It will
underline and the enable next generation of user experiences. Breakthrough application lifecycle
management with adoption of ‘what you need, when you need it’ along with new levels of
process and business insight will make ‘Rainier’ a true breakthrough release!
The first elements of ‘Rainier’ are expected to be available in Q4 CY2014 with key investments
areas including:
Next Generation User Experience - a context-sensitive Windows 8 experience based on
HTML5 client technology
Cloud Delivered – with a focus on enabling a “what you need, when you need it” approach
via Windows Azure and/or Windows Server
Best in class lifecycle management – regardless of deployment choice from on-premise,
hybrid to full cloud
With ‘Rainier’ we will continue to deliver the most intuitive and simple solution for your
customer interactions, your people and your business by innovating and building out the
functionality footprint across retail, distribution, manufacturing, services and public sector.
Features
a. Cloud Based Solutions
b. Platform independence - Browser enabled clients
c. AD Federation and more integration with Azure
d. More investments on Visual Studio (Development Environment will be VS)
e. Application Development targetting any OS through Rainier
f. No longer need to invest on Sharepoint hosting as Enterprise portal will be eliminated
g. 3 key pillars - New client, Cloud Readiness, New Development Stack
h. No RPC based communication (Atleast, now it's assured that the event logs won't get full by RPC errors which was the case with AX 2009)
i. Programming language will still be X++ but everything will be .net compiled
j. Capability to expose updatable views using OData
k. HTML 5 based Web Client so more faster and richer experience
So, all looks exciting for the next major release of Dynamics AX which would be somewhere in end of 2014 or early 2015!
15 December 2013
Query range in AX 2012 /2009
dateQBR.value(queryRange(FromDateEdit.dateValue(), ToDateEdit.dateValue()));
-> below query you can write in form ->DataSource-> ExecuteQuery()
this.query().dataSourceName("QualityInspectionControl").addRange(fieldNum(QualityInspectionControl,QuaityChecked)).value(queryvalue(NoYes::No));
this.query().dataSourceTable(tablenum(QualityInspectionControl)).addRange(fieldnum(QualityInspectionControl,QuaityChecked)).value(queryVal
-> below query you can write in form ->DataSource-> ExecuteQuery()
this.query().dataSourceName("QualityInspectionControl").addRange(fieldNum(QualityInspectionControl,QuaityChecked)).value(queryvalue(NoYes::No));
this.query().dataSourceTable(tablenum(QualityInspectionControl)).addRange(fieldnum(QualityInspectionControl,QuaityChecked)).value(queryVal
query range in ax 2009 date function
Fist add following peace of line in init() method
criteriaApproved = this.query().dataSourceTable(tablenum(VendTrans)).addRange(fieldnum(VendTrans,Approved));
followin line in execute query()
dateQBR.value(strfmt('(CustTrans.TransDate >= %1) && (CustTrans.TransDate <= %2)', Date2StrXpp(01\01\2010), Date2StrXpp(31\10\2010)));
criteriaApproved = this.query().dataSourceTable(tablenum(VendTrans)).addRange(fieldnum(VendTrans,Approved));
followin line in execute query()
dateQBR.value(strfmt('(CustTrans.TransDate >= %1) && (CustTrans.TransDate <= %2)', Date2StrXpp(01\01\2010), Date2StrXpp(31\10\2010)));
07 December 2013
06 December 2013
X++ code for Ledger journal posting with one line / journal posting in AX
Example class for reference: \Classes\TutorialJournalCheckPost\main
Example: Using Ledger Journal
The following is an example of creating a journal with one journal line and then
posting the journal.
static void ExampleLedgerJournal(Args _args)
{
LedgerJournalName LedgerJournalName;
LedgerJournalTable ledgerJournalTable;
LedgerJournalTrans ledgerJournalTrans;
LedgerJournalCheckPost ledgerJournalCheckPost;
NumberSeq numberseq;
LedgerJournalNameId LedgerJournalNameId = 'GenJrn';
BankAccountID BankAccountID = 'EUR OPER';
ledgerAccount offsetAccount = '601500';
amountCur amountCur = 102;
;
ttsbegin;
// Find a ledgerJournalName record
select firstonly LedgerJournalName
where LedgerJournalName.JournalName ==
LedgerJournalNameId;
//Created the ledgerJournalTable
ledgerJournalTable.JournalName =
LedgerJournalName.JournalName;
ledgerJournalTable.initFromLedgerJournalName();
ledgerJournalTable.Name = 'Hotel';
ledgerJournalTable.insert();
numberseq =
NumberSeq::newGetVoucherFromCode(ledgerJournalName.VoucherS
eries);
ledgerJournalTrans.Voucher = numberseq.voucher();
//Generate the transaction line
ledgerJournalTrans.JournalNum =
ledgerJournalTable.JournalNum;
ledgerJournalTrans.CurrencyCode = 'EUR';
ledgerJournalTrans.ExchRate =
Currency::exchRate(ledgerJournalTrans.CurrencyCode);
ledgerJournalTrans.AccountNum = BankAccountID;
ledgerJournalTrans.AccountType =
LedgerJournalACType::Bank;
ledgerJournalTrans.AmountCurCredit = amountCur;
ledgerJournalTrans.TransDate = today();
ledgerJournalTrans.Txt = 'Room Stay';
ledgerJournalTrans.OffsetAccount = offsetAccount;
ledgerJournalTrans.OffsetAccountType =
LedgerJournalACType::Ledger;
ledgerJournalTrans.insert();
info(strfmt('Journal Id:
%1',ledgerJournalTable.JournalNum));
//Post the Journal
ledgerJournalCheckPost =
ledgerJournalCheckPost::newLedgerJournalTable(ledgerJournal
Table,NoYes::Yes);
ledgerJournalCheckPost.run();
ttscommit;
}
Example: Using Ledger Journal
The following is an example of creating a journal with one journal line and then
posting the journal.
static void ExampleLedgerJournal(Args _args)
{
LedgerJournalName LedgerJournalName;
LedgerJournalTable ledgerJournalTable;
LedgerJournalTrans ledgerJournalTrans;
LedgerJournalCheckPost ledgerJournalCheckPost;
NumberSeq numberseq;
LedgerJournalNameId LedgerJournalNameId = 'GenJrn';
BankAccountID BankAccountID = 'EUR OPER';
ledgerAccount offsetAccount = '601500';
amountCur amountCur = 102;
;
ttsbegin;
// Find a ledgerJournalName record
select firstonly LedgerJournalName
where LedgerJournalName.JournalName ==
LedgerJournalNameId;
//Created the ledgerJournalTable
ledgerJournalTable.JournalName =
LedgerJournalName.JournalName;
ledgerJournalTable.initFromLedgerJournalName();
ledgerJournalTable.Name = 'Hotel';
ledgerJournalTable.insert();
numberseq =
NumberSeq::newGetVoucherFromCode(ledgerJournalName.VoucherS
eries);
ledgerJournalTrans.Voucher = numberseq.voucher();
//Generate the transaction line
ledgerJournalTrans.JournalNum =
ledgerJournalTable.JournalNum;
ledgerJournalTrans.CurrencyCode = 'EUR';
ledgerJournalTrans.ExchRate =
Currency::exchRate(ledgerJournalTrans.CurrencyCode);
ledgerJournalTrans.AccountNum = BankAccountID;
ledgerJournalTrans.AccountType =
LedgerJournalACType::Bank;
ledgerJournalTrans.AmountCurCredit = amountCur;
ledgerJournalTrans.TransDate = today();
ledgerJournalTrans.Txt = 'Room Stay';
ledgerJournalTrans.OffsetAccount = offsetAccount;
ledgerJournalTrans.OffsetAccountType =
LedgerJournalACType::Ledger;
ledgerJournalTrans.insert();
info(strfmt('Journal Id:
%1',ledgerJournalTable.JournalNum));
//Post the Journal
ledgerJournalCheckPost =
ledgerJournalCheckPost::newLedgerJournalTable(ledgerJournal
Table,NoYes::Yes);
ledgerJournalCheckPost.run();
ttscommit;
}
X++ coding for Ledger Voucher posting with example / Ledger Voucher posting / voucher posting in AX
Example Class for Reference : \Classes\TutorialLedgerVoucher\runSalesPost
Example: Using LedgerVoucher
The following job posts a petty cash disbursement for a payment for a stapler and
some stamps. The accounts and amounts are set in the variable declaration.
Usually these would be obtained from parameters, user input or a calculation.
static void ExampleLedgerVoucher(Args _args)
{
LedgerVoucher ledgerVoucher;
LedgerVoucherTransObject ledgerVoucherTransObject;
Dimension dimension;
NumberSeq numSeq;
NumberSequenceCode NumberSequenceCode =
'Acco_18';
ledgerAccount accountNumPetty = '110180';
// Petty cash
ledgerAccount accountNumOffsetOffice =
'606300'; // Office Supplies
ledgerAccount accountNumOffsetPostage =
'606500'; // Postage
amountMST amountPetty = 55;
amountMST amountOffice = 50;
amountMST amountPostage = 5;
;
numSeq =
NumberSeq::newGetNumFromCode(NumberSequenceCode);
ttsbegin;
//First Step - Create Voucher
ledgerVoucher =
ledgerVoucher::newLedgerPost(DetailSummary::Summary,
SysModule::Ledger,
LedgerParameters::numRefLedgerExchAdjVoucher().NumberSequen
ce) ;
//Second Step - Create Voucher Number
ledgerVoucher.AddVoucher(LedgerVoucherObject::newVoucher(nu
mseq.num(),
today(),
Sysmodule::Ledger,
LedgerTransType::None));
//Create the first Transaction - this is the credit
side of the transaction (-55)
//The other two DR transactions should total to the CR
otherwise it won't post.
ledgerVoucherTransObject =
LedgerVoucherTransObject::newCreateTrans(
ledgerVoucher.findLedgerVoucherObject(),
LedgerPostingType::LedgerJournal,
accountNumPetty, // Ledger Account
dimension,
CompanyInfo::standardCurrency(),
-
amountPetty, // Amount
0, //
TableId
0); //
ReciID
ledgerVoucherTransObject.parmTransTxt("Petty cash
disbursement");
ledgerVoucher.addTrans(ledgerVoucherTransObject);
//Create the second Transaction
ledgerVoucherTransObject =
LedgerVoucherTransObject::newCreateTrans(
ledgerVoucher.findLedgerVoucherObject(),
LedgerPostingType::LedgerJournal,
accountNumOffsetOffice,
dimension,
CompanyInfo::standardCurrency(),
amountOffice, // Amount
0,
// TableId
0);
// ReciID
ledgerVoucherTransObject.parmTransTxt("Red stapler");
ledgerVoucher.addTrans(ledgerVoucherTransObject);
//Create third Transaction
ledgerVoucherTransObject =
LedgerVoucherTransObject::newCreateTrans(
ledgerVoucher.findLedgerVoucherObject(),
LedgerPostingType::LedgerJournal,
accountNumOffsetPostage,
dimension,
CompanyInfo::standardCurrency(),
amountPostage,
0,
// TableId
0);
// ReciID
ledgerVoucherTransObject.parmTransTxt("Stamps");
ledgerVoucher.addTrans(ledgerVoucherTransObject);
//Last Step - To Balance Voucher and Close
ledgerVoucher.end();
numseq.used();
ttsCommit;
}
Example: Using LedgerVoucher
The following job posts a petty cash disbursement for a payment for a stapler and
some stamps. The accounts and amounts are set in the variable declaration.
Usually these would be obtained from parameters, user input or a calculation.
static void ExampleLedgerVoucher(Args _args)
{
LedgerVoucher ledgerVoucher;
LedgerVoucherTransObject ledgerVoucherTransObject;
Dimension dimension;
NumberSeq numSeq;
NumberSequenceCode NumberSequenceCode =
'Acco_18';
ledgerAccount accountNumPetty = '110180';
// Petty cash
ledgerAccount accountNumOffsetOffice =
'606300'; // Office Supplies
ledgerAccount accountNumOffsetPostage =
'606500'; // Postage
amountMST amountPetty = 55;
amountMST amountOffice = 50;
amountMST amountPostage = 5;
;
numSeq =
NumberSeq::newGetNumFromCode(NumberSequenceCode);
ttsbegin;
//First Step - Create Voucher
ledgerVoucher =
ledgerVoucher::newLedgerPost(DetailSummary::Summary,
SysModule::Ledger,
LedgerParameters::numRefLedgerExchAdjVoucher().NumberSequen
ce) ;
//Second Step - Create Voucher Number
ledgerVoucher.AddVoucher(LedgerVoucherObject::newVoucher(nu
mseq.num(),
today(),
Sysmodule::Ledger,
LedgerTransType::None));
//Create the first Transaction - this is the credit
side of the transaction (-55)
//The other two DR transactions should total to the CR
otherwise it won't post.
ledgerVoucherTransObject =
LedgerVoucherTransObject::newCreateTrans(
ledgerVoucher.findLedgerVoucherObject(),
LedgerPostingType::LedgerJournal,
accountNumPetty, // Ledger Account
dimension,
CompanyInfo::standardCurrency(),
-
amountPetty, // Amount
0, //
TableId
0); //
ReciID
ledgerVoucherTransObject.parmTransTxt("Petty cash
disbursement");
ledgerVoucher.addTrans(ledgerVoucherTransObject);
//Create the second Transaction
ledgerVoucherTransObject =
LedgerVoucherTransObject::newCreateTrans(
ledgerVoucher.findLedgerVoucherObject(),
LedgerPostingType::LedgerJournal,
accountNumOffsetOffice,
dimension,
CompanyInfo::standardCurrency(),
amountOffice, // Amount
0,
// TableId
0);
// ReciID
ledgerVoucherTransObject.parmTransTxt("Red stapler");
ledgerVoucher.addTrans(ledgerVoucherTransObject);
//Create third Transaction
ledgerVoucherTransObject =
LedgerVoucherTransObject::newCreateTrans(
ledgerVoucher.findLedgerVoucherObject(),
LedgerPostingType::LedgerJournal,
accountNumOffsetPostage,
dimension,
CompanyInfo::standardCurrency(),
amountPostage,
0,
// TableId
0);
// ReciID
ledgerVoucherTransObject.parmTransTxt("Stamps");
ledgerVoucher.addTrans(ledgerVoucherTransObject);
//Last Step - To Balance Voucher and Close
ledgerVoucher.end();
numseq.used();
ttsCommit;
}
03 December 2013
Refreshing form's datasource without affecting cursor position / How to retain cursor position? in AX
WE can do in two ways
1.Just calling the Research method by passing true boolean value
MyTable_ds.research(true); // boolean value retain the cursor position
------------
2.you can use method setPosition() and getPosotion()
{
int position;
;
position= MyTable_ds.getPosition();
MyTable_ds.research();
MyTable_ds.setPosition(position);
}
Happy Daxing
Sunil
1.Just calling the Research method by passing true boolean value
MyTable_ds.research(true); // boolean value retain the cursor position
------------
2.you can use method setPosition() and getPosotion()
{
int position;
;
position= MyTable_ds.getPosition();
MyTable_ds.research();
MyTable_ds.setPosition(position);
}
Happy Daxing
Sunil
02 December 2013
Surrogate key
Hi,
A surrogate key is a AX -generated record identifier. In Dynamics Ax terms, it is a RecId field, used as the primary key of a table.
Happy Daxing
SUNIL
A surrogate key is a AX -generated record identifier. In Dynamics Ax terms, it is a RecId field, used as the primary key of a table.
Happy Daxing
SUNIL
01 December 2013
how to deploy ssrs reports in ax 2012 by using management shell
1.Type the following command to deploy the report. For example, let's deploy
the CustTransList report:
Publish-AXReport -ReportName CustTransList
2.To deploy multiple reports using PowerShell, we can use the following command:
Publish-AXReport -ReportName Sales, SalesAnalysis
3.To deploy all the reports using PowerShell, we can use the following command:
Publish-AXReport –ReportName *
4.To deploy reports to a different Report Server, we can use the following command:
Publish-AXReport – ReportName -ServiceAOSName
-ServicesAOSWSDLPort
===================================
1) Open Windows Powershell as Administrator
2) Type the below command :-
To Deploy specific report: C:\AosService\PackagesLocalDirectory\Plugins\AxReportVmRoleStartupTask\DeployAllReportsToSSRS.ps1 -Module ApplicationSuite -ReportName PurchPurchaseOrder* -PackageInstallLocation "C:\AosService\PackagesLocalDirectory" To Deploy all Reports: c:\AosService\PackagesLocalDirectory\Plugins\AxReportVmRoleStartupTask\DeployAllReportsToSSRS.ps1 -PackageInstallLocation "c:\AosService\PackagesLocalDirectory"
the CustTransList report:
Publish-AXReport -ReportName CustTransList
2.To deploy multiple reports using PowerShell, we can use the following command:
Publish-AXReport -ReportName Sales, SalesAnalysis
3.To deploy all the reports using PowerShell, we can use the following command:
Publish-AXReport –ReportName *
4.To deploy reports to a different Report Server, we can use the following command:
Publish-AXReport – ReportName
2) Type the below command :-
Subscribe to:
Posts (Atom)
Ledger Voucher creation Framework and x++ code to create ledger voucher
Please click her for MS reference file Below is the out of the box example reference and code. SalesInvoiceJournalPostSubBill_Extension->...
-
{ "Message" : "Please verify that the user is valid and set up correctly." } Sol: System Administration > Se...
-
Please click here to access Custom Workflow step by step process:
-
FormRun formRun = sender.formRun(); Object inventTrans_ds = formRun.dataSource(formDataSourceStr(InventMarking,InventTransO...