Posts Tagged ‘Ax 4.0’
Working with numbersequences – Keep In Mind
When you are using a Number Sequence, keep in mind that a Continuous Number Sequence is slower than a non-continuous. The reason is that the system creates a record in the table NumberSequenceList (with the status Active) and cleans it up later during TTSCOMMIT.
Performance tip: You can improve the performance of a process that creates many numbers of one Number Sequence by using number pre-allocation. This loads a set of numbers into the memory and provides faster access. You can do this by using the NumberSeqGlobal, witch means that once it is instantiated, it is available until the session is closed. This function is only available for non-continuous Number Sequences. The numbers can only be retrieved from the cache by calling the getNumInternal() method in the NumberSeq_Fast class.
Working with numbersequences – New Module
In a previous post I explained how to create a new Number Sequence in a existing module (Working with numbersequences – new NumberSequence). In this post I will explain how you can create a new Number Sequence-module.
I will create a new module called TEST (lack of inspiration).
Step-By-Step: (more…)
Placement of code
When you are programming, you have to think about where placing you’re code. Always try to place you’re code nearest to the source so it can be manipulated easily. For instance code that manipulates tables should be placed in that tables methods.
Best Practice: Try to minimize the x++ code in forms for the following reasons:
- Forms do not support inheritance. You cannot share logic implemented in a form with other application objects.
- The X++ code implemented in forms is always executed on the client. This means that you cannot tune an application by specifying where to execute the code.
Maximum value RecId
Did you ever wonder what the maximum value of a RecId was?
In Ax3.0 it is pritty simple. You know that the RecId was a int value and with the function ‘maxInt()’, you get the value.
In Ax4.0 and higher, the RecId is changed from a regular int to in64. There is no such function as ‘maxInt64()’ so you cant use this. In the ‘Global’, I found a method called ‘maxRecId()’.
So you just call this method and you will see that the maximum value of a RecId is 9223372036854775807 (I hope I didn’t mistype) or 2^63-1.
XML parser namespace error
Today I tried to create the following XML-structure in Ax:
1 2 | <?xml version="1.0" encoding="UTF-8"?> <personen xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Personeel.xsd"> |
I wrote the following to do so:
1 2 3 4 | xmlDoc = WGKFunctions::createXMLDocumentWithDeclaration(#version, #encoding, #standalone); root = xmlDoc.createElement(this.rootNode()); ... root.setAttribute("xsi:noNamespaceSchemaLocation", "Personeel.xsd"); |
But I got the following result:
1 2 | <?xml version="1.0" encoding="UTF-8"?> <personen xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="Personeel.xsd"> |
As you see the ‘xsi:noNamespaceSchemaLocation‘ is replaced by ‘noNamespaceSchemaLocation‘.
After some research, I found the following link: http://blogs.msdn.com/emeadaxsupport/archive/2009/06/12/xml-parser-namespace-error.aspx
You are using Microsoft Dynamics AX to create an XML Document. The code you are using to create the XML file was created for the previous version of the product and is now upgraded to Microsoft Dynamics AX 4.0 SP1.
Using the method
setAttribute(‘namespaceprefix:attribname’,'attribvalue’);
does not add the “namespaceprefix” to the final XML node.The attribute name in the final XML node will be added without namespaceprefix:
<node attribname="attribvalue" />
This is because the XML Framework was changed starting from Dynamics AX 4.0 and offers now a method that takes care about namespaces and prefixes itself.So the solution is to use the following method instead:
setAttribute2(‘attribname’,'namespace’,'attribvalue’);
Please note that the “namespace” – not the “namespace prefix” has to be entered as second parameter. The XML Framework will resolve the namespace automatically to the correct namespace prefix and add it to the final XML node:<node namespaceprefix:attribname=”attribvalue” />
So I modified my code to:
1 | root.setAttribute2("noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance", "Personeel.xsd"); |
and the correct XML was generated.
Internal Error Number 25 in script occurs
When you modify the info.reportsendmail() in Ax2009 so it won’t send mails trough SysINetMail, but trough the SysMailer you could get the following error: ‘Internal Error Number 25 in script’. The same error occures when you try to post an invoice to a e-mail message.
There is a hotfix for Microsoft Dynamics Ax 2009 SP1 (KB973902) and Microsoft Dynamics Ax 4.0 SP2 (KB948130)
NOTE: This hotfix won’t fix the following: You assign different value-types to a Any-type. In this case you still get the ‘Internal error 25 in script’.

