Please find below a 4 minute teaser trailer of mfp's article (remember to change to higher resolution):
Tuesday, November 29, 2016
Monday, October 3, 2016
Bugs in the DateTimeUtil::getSystemDateTime()
After the current system date is changed, either from the user interface or via systemDateSet function, the DateTimeUtil::getSystemDateTime() goes out of control. Don't ever use this function for unique keys generation.
Unfortunately, they use it a lot in the DIXF.
And this is the result:
P. S.: Kernel version 6.3.4000.1745, Application version 6.3.3000.110
Unfortunately, they use it a lot in the DIXF.
static void printDateTimeJob(Args _args) { void printDateTime() { info(strFmt('systemDateGet: %1 %2', systemDateGet(), time2StrHMS(timeNow()))); info(strFmt('getSystemDateTime: %1', DateTimeUtil::getSystemDateTime())); info(strFmt('utcNow: %1', DateTimeUtil::utcNow())); } warning('Before date/time change'); printDateTime(); sleep(2000); info('...2 seconds later:'); printDateTime(); systemDateSet(systemDateGet() - 3); warning('System date changed:'); printDateTime(); sleep(2000); info('...2 seconds later:'); printDateTime(); systemDateSet(systemDateGet() + 3); warning('System date is back:'); printDateTime(); sleep(2000); info('...2 seconds later:'); printDateTime(); }
And this is the result:
P. S.: Kernel version 6.3.4000.1745, Application version 6.3.3000.110
Monday, April 4, 2016
Error executing code: The field with ID '0' does not exist in table 'SysExtensionSerializerExtensionMap'.
If you ever get "Error executing code: The field with ID '0' does not exist in table 'SysExtensionSerializerExtensionMap'." error in CIL, it may happen it is the table extension framework + the standard buf2buf function to blame.
Somehow, if you pass a Map instead of a table to buf2buf function, the following line fails:
_to.(fieldId) = _from.(fieldId);
However, if you replace this line with:
fieldName = fieldId2name(_from.TableId, fieldId);
_to.setFieldValue(fieldName, _from.getFieldValue(fieldName));
everything is fine both in X++ and in CIL.
P.S. I didn't dare to change the standard buf2buf method. Istead, I created another method and used it in the table extension framework logic, which failed because of the issue (\Data Dictionary\Maps\SysExtensionSerializerMap\Methods\copyExtensionTableData)
P.P.S. There are a couple of other SysExtensionSerializerMap methods that should be fixed, as they call buf2buf too.
Somehow, if you pass a Map instead of a table to buf2buf function, the following line fails:
_to.(fieldId) = _from.(fieldId);
However, if you replace this line with:
fieldName = fieldId2name(_from.TableId, fieldId);
_to.setFieldValue(fieldName, _from.getFieldValue(fieldName));
everything is fine both in X++ and in CIL.
P.S. I didn't dare to change the standard buf2buf method. Istead, I created another method and used it in the table extension framework logic, which failed because of the issue (\Data Dictionary\Maps\SysExtensionSerializerMap\Methods\copyExtensionTableData)
P.P.S. There are a couple of other SysExtensionSerializerMap methods that should be fixed, as they call buf2buf too.
Tuesday, March 8, 2016
Subscribe to:
Posts (Atom)