Hi All
Today I’d like to share an issue that took a lot of my time!
I'm using AX 2012 R3.
At a certain point, the CIL Compilation failed and the
AOS crashed or freeze without any errors that could help me.
For my lucky I use TFS so I try to verify the last
check-in, one by one.
Finally I found the problem.
The code below cause the AOS Crash or Freeze during CIL
Compilation, Incremental and Full as well.
public void updateRecordsetList()
{
CustInvoiceTable custInvoiceTable;
CustinvoiceJour CustinvoiceJour;
CustInvoiceLine CustInvoiceLine;
update_recordSet CustinvoiceJour
setting
InvoiceAmount = custInvoiceTable.TotalAmount()
join *
from
custInvoiceTable
where
custInvoiceTable.InvoiceId == CustinvoiceJour.InvoiceId
join
parentRecId, TaxAmount, AmountCur
from
custInvoiceLine
where
CustInvoiceLine.ParentRecId == custInvoiceTable.RecId;
}
The “TotalAmount” custom method of the CustInvoiceTable
table contain the following query:
Display amount TotalAmount()
{
CustInvoiceLine custInvoiceLine;
select sum(AmountCur) from
custInvoiceLine
where
custInvoiceLine.ParentRecId == this.RecId;
return custInvoiceLine.AmountCur;
}
I know that the code isn’t properly written, but, I
expect an error.
This issue coming after the last Kernel update.
Before, with AX 2012 RTM Kernel, the CIL Compilation
raise an error like below.
Error 1. Class: XXXXX, Method: updateRecordsetList, Exception: System.NullReferenceException: Object reference not set to an instance of an object.
Error 1. Class: XXXXX, Method: updateRecordsetList, Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at
Microsoft.Dynamics.Ax.Xpp.ILGenerator.processBytecode(XmlNode childNode)
at
Microsoft.Dynamics.Ax.Xpp.ILGenerator.processBytecodes(TypeBuilder typeBuilder,
XmlNode node)
at
Microsoft.Dynamics.Ax.Xpp.ILGenerator.GenerateIL(TypeBuilder typeBuilder,
XmlNode node)
at
Microsoft.Dynamics.Ax.Xpp.ILGenerator.TraversePCode(XmlNode node)
at
Microsoft.Dynamics.Ax.Xpp.PCodeTraverser.TraverseMethod(XmlNode methodNode)
at
Microsoft.Dynamics.Ax.Xpp.ILGenerator.GenerateXppModule()
So, with the last Kernel Microsoft introduce something…
I raised a Support Case and Microsoft suggestion is been
modify the BP check (around line 222) in the “checkSource” method of the
“SysBPCheckMemberFunction” class:
// Check if setting value from valid function in update_recordset statement
if ((textBuffer.find('update_recordSet'))
&& (textBuffer.find('setting',textBuffer.matchPos()+textBuffer.matchLen()))
&& (textBuffer.find('=',textBuffer.matchPos()+textBuffer.matchLen()))
&& (textBuffer.find('(+)',textBuffer.matchPos()+textBuffer.matchLen()))
)
{
setMatchPosLineAndColumn();
if (!isComment())
{
this.addSuppressableWarning(#BPErrorMethodUpdateRecordSetCheck, matchPosLine,
matchPosColumn, strFmt("Are you setting a value from a supported method in
update_recordset?"));
}
}
With this modification at least the Developer will not be
able to compile the object because will raise a BP error.
From my point of view, this issue is time consuming because
could take a lot of time.
I hope that Microsoft will improve the Compilation process
in order to avoid an AOS crash.
I also create a suggestion in Connect, https://connect.microsoft.com/dynamicssuggestions/feedback/details/2182000
I also create a suggestion in Connect, https://connect.microsoft.com/dynamicssuggestions/feedback/details/2182000
Stay Tuned!
1 comment:
The store has been solving the problem for me, and the service is very patient, this is a perfect shopping experience.moncler jackets for sale uk When I received the Moncler outfit, I thought it was a good replica of the Moncler down jacket. replica moncler outerwearI like this online store. This Moncler dress is simple and elegant. Very satisfied with this purchase.
Post a Comment