If you have a report that only displays ***** instead of numbers, you have one easy way of showing the correct numbers without any modifications: Print the report to a file and open it in Excel (field delimiter is TAB) --> you will see all the numbers in Excel.
I finished the first performance tests and here are the results. The configuration is as follows: Oracle: 184.108.40.206, used Axapta client is 1951.3733 SQL2005: used Axapta client is Kernel Rollup 1
The test server is a P4 2.8 GhZ with 2GB of RAM. Both Oracle and SQL2005 have 1GB RAM assigned (not at the same time. Either Oracle OR SQL2005 is running.)
The first tests show that SQL2005 is about 25-30% slower than Oracle if the database is running in SQL2000 mode. The performance is a little bit better when running in native SQL2005 mode: then SQL2005 is about 14-19% slower than Oracle.
The biggest surprise was that Oracle was always faster when a certain test (form filter/report execution) was done the second time and the data was coming from cache. It seems that the caching algorithm of Oracle was much better than from SQL2005. There was a range of 45-150% worse performance in SQL2005 when getting data from cache.
Today I saw that my blog is a featured Microsoft community at the moment. Wow. I just also wanted to tell you what I am doing right now: currently I am doing a performance comparison of our system between Oracle 220.127.116.11 (currently our live system) and SQL2005. I have read in many forums that the Kernel rollup also decreases performance. Well, I will also try to check that.
If you want to set a date field to an empty date or need to compare if a date field is empty, you can use the datenull() function. It is a method of the Global class and will simply return 01\01\1900.
This leads to more things:
You can write dates in Axapta X++ editor using backslashes, e.g. 14\04\2006
An empty date in Axapta is specified as January 1st, 1900.
You can use methods from the Global class without having to write "Global::". So, you can write "if date == datenull()" and you do not have to write "if date == Global::datenull()". This works with all the methods from the Global class.
So, the select statement should look something like this:
select sysConfigTemp where sysConfigTemp.id == licenseCodeNum(...) && sysConfigTemp.ConfigType == ConfigType::AccessCodes;
Why all that? Well, when you start the Online Users form, Axapta will check how many users are in your license. It will then only show online users up to that amount. The methods above are not giving back the correct numbers because they are looking into the wrong record. So, Axapta thinks you are in demo mode and will only display 3 users. Why is it only on Oracle? --> On MSSQL, there is a Clustered Index used on the Sysconfig table so that Axapta chooses the right records by chance !
Example: the method "licensedUsers" looks like this in standard Axapta 3.0 SP3
select sysConfigTemp where sysConfigTemp.id == licenseCodeNum(SysUsers);
The Id that should be selected is 10.
Problem: there are 2 records with ID 10! --> one with ConfigType = "AccessCodes" (that would be the correct one) and one with ConfigType = "ConfigurationKey"