Suggestions Implemented in DataFlex 19.0
Runtime
EraseFile Passed with an Empty Parameter Should Not Delete Files in the Current Folder
Suggestion 2678, reported by Quality Assurance
Passing an empty parameter to EraseFile (EraseFile "") deletes all files in the current folder. This behavior is consistent with current versions of Windows, which also delete files when an empty parameter is passed.
This Windows behavior has changed over the years. It was suggested that DataFlex should not allow an empty parameter, as it is too easy to make a mistake, and it should raise an error, DFERR_BAD_PARAMETER, instead.
Database Explorer
Save and Delete Icons Are Too Close to Each Other
Suggestion 6792, reported by Phil Kirby
In the Database section of the Toolbar, the Save and Delete icons are right next to each other, which is too close for comfort. It is suggested that they be separated by at least one other icon.
WinPrint
Error 'Operation Not Allowed' (4144) Is Shown When a DDO Cannot Delete Read-Only/No-Delete - Confusing
Suggestion 7239, reported by Matthias Burkhardt
The error 4144, 'Operations Not Allowed', is generated by request_delete if the DDO is either read_only_state=true or no_delete_state=true. This is treated as a handled error, and the error information does not provide enough context. This should be considered a programming error, as the developer should not allow this message to be sent to a DDO that will not allow the operation. In other words, it should be unhandled.
This will be changed so that it generates an unhandled error DFERR_CANT_DELETE_RECORD (4185), which will provide a more informative "Can't Delete Record" error text. Because it is unhandled, you will also receive a detailed error call stack.
To reproduce in Order Entry, Salesp.Vw:
Object SalesP_DD is a Salesp_DataDictionary
Procedure Request_Delete
Set Read_Only_State to True
Forward Send Request_Delete
End_Procedure
End_Object // Salesp_DD
Samples
Remove DateForm and DatePopup.sl from Specialized Components Workspace
Suggestion 7128, reported by Quality Assurance
The Specialized Components sample still uses MSCal.ocx/DatePopup.sl (and we install the OCX, last modified in 1998, in Bin) while our Order Entry sample uses the new class cMonthCalendarPrompt.
MSCal.ocx has not been installed with Office since MS Office 2010 and is deprecated. When using other languages (Windows locale), the popup calendar still displays in English.
Since 18.2 introduced a better solution for calendars with the creation of the new class and its use is demonstrated in Order Entry already, the following actions are suggested:
- Remove the
DateFormsample view from Specialized Components. - Remove
MSCal.ocxfrom the DataFlex Studio installation.
Studio
Studio Should Create .DEF Files in DDSrc, Not Data Folder
Suggestion 7268, reported by Quality Assurance
The new Studio feature 'Automatically generate table definition files (.def)' is appreciated. However, if the .def file doesn't already exist, it is created in the .\Data folder. It should be created in the .\DDSrc folder, which is where DbBuilder creates the file.
WebApp Framework
cWebTabContainer: Provide Property to Apply Custom Class Names to Tab Buttons
Suggestion 7217, reported by Quality Assurance
There is currently no way to assign custom CSS to a specific tab button. This is needed to add icons or highlight specific tabs.
Implemented as the new psBtnCSSClass on cWebTabPage.
cWebPromptList Invoking Object Cannot Be Enforced (Uses Focus)
Suggestion 7211, reported by Quality Assurance
The cWebPromptList looks at the focused object to determine which object it should access as the invoking object. On this object, it tries to read/write the value and triggers calls like Prompt_Callback and PromptUpdateCallback. Because it uses the focused object, this cannot be customized, and the focused object is sometimes unreliable and unpredictable, which can cause errors.
It would be better to provide a way to customize the object. For example, opening a prompt dialog from a cWebMenuItem and handling the result in a custom manner is impossible since a menu item never has focus.
This has been fixed by changing the cWebPromptList to use the return object of the dialog. This allows customization since this object is passed to the Popup procedure. It can also be overridden by augmenting the ReturnObject function of the dialog.