While the function works for the GUI client, you get this exception in Enterpriseportal:
Dynamics Object Adapter Call failed.
Funktion 'GetLocaleInfoW' in DLL-Bibliothek 'KERNEL32' hat eine Ausnahmebedingung ausgelöst.
Microsoft.Dynamics.BusinessConnectorNet.XppException
at Microsoft.Dynamics.BusinessConnectorNet.AxaptaObject.Call(String methodName, Object[] paramList)
at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsObjectAdapter.Call(String methodName, Object param1)
The impact for the user was, that he just get a plain lookup popup window instead a calendar popup to select a date for a data field. *
I was unable to find the excact reason for that bug. But I assume it's the combination of x64 architecture, the .NET Business Connector and the use of a Unicode Windows Kernel function.
To bypass the error we've modified the method Global::firstWeekOfYear(), which was the caller to WinAPI::getLocaleInfo(), as follow:
Original:
static int firstWeekOfYear() { #WinAPI return str2int(WinAPI::getLocaleInfo(#LOCALE_USER_DEFAULT, #LOCALE_FIRSTWEEKOFYEAR)); }Modified:
static int firstWeekOfYear() { /* #WinAPI return str2int(WinAPI::getLocaleInfo(#LOCALE_USER_DEFAULT, #LOCALE_FIRSTWEEKOFYEAR)); */ System.Globalization.DateTimeFormatInfo info = System.Globalization.DateTimeFormatInfo::get_CurrentInfo(); System.Globalization.CalendarWeekRule rule = info.get_CalendarWeekRule(); ; return(CLRInterop::getAnyTypeForObject(rule)); }
With this modification the Windows function GetLocaleInfoW in Kernel32 will not be direct used.
* Webframework based on Webforms (until AX 2009)
had the same problem and the fix works great ! thank you
ReplyDeleteSame problem fixed here, many thanks.
ReplyDelete