Deprecation: #89331 - FormEngine legacy functions¶
See forge#89331
Description¶
The FormEngine supports global callback functions executed on certain interactions. Such functions were overridden and spread through some extensions which are not related to FormEngine at all.
These functions have been marked as deprecated:
setFormValueOpenBrowser()
setFormValueFromBrowseWin()
setHiddenFromList()
setFormValueManipulate()
setFormValue_getFObj()
The function setFormValueFromBrowseWin()
is also called by ElementBrowser
. Extensions not related to FormEngine
are able to override this function and inject custom handling. This approach has been marked as deprecated as well.
Impact¶
Calling a deprecated function will trigger a warning in the browser console.
Affected Installations¶
All installations using 3rd party extensions calling any of these deprecated functions are affected.
Migration¶
Some functions can be used in FormEngine context only from now on. Load the module TYPO3/CMS/Backend/FormEngine
and
use the according replacements:
setFormValueOpenBrowser()
- useFormEngine.openPopupWindow()
insteadsetFormValueFromBrowseWin()
- useFormEngine.setSelectOptionFromExternalSource()
insteadsetHiddenFromList()
- useFormEngine.updateHiddenFieldValueFromSelect()
insteadsetFormValueManipulate()
- no replacement, this is internal logic for form controls separated into according modulessetFormValue_getFObj()
- useFormEngine.getFormElement()
instead
If setFormValueFromBrowseWin()
is not used within a FormEngine context, it is possible to listen to the
message
event.
Example code:
require(['TYPO3/CMS/Backend/Utility/MessageUtility'], function (MessageUtility) {
window.addEventListener('message', function (e) {
// MessageUtility.MessageUtility is correct as this is not an AMD module
if (!MessageUtility.MessageUtility.verifyOrigin(e.origin)) {
throw 'Denied message sent by ' + e.origin;
}
if (typeof e.data.fieldName === 'undefined') {
throw 'fieldName not defined in message';
}
if (typeof e.data.value === 'undefined') {
throw 'value not defined in message';
}
const result = e.data.value.split('_');
const field = <HTMLInputElement>document.querySelector('input[name="' + e.data.fieldName + '"]');
field.value = result[1];
});
}