...
Further details: log4j CVE-2021-44228
OpenEdge 12.6 support!
We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.6. We hereby declare OpenEdge 12.6 fully supported for the SmartComponent Library as of the release of October 4th 2022.
OpenEdge 12.2 support!
We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.2. We hereby declare OpenEdge 12.2 fully supported for the SmartComponent Library as of the release of April 09th 2020.
...
SCL-3889 RestResourcesJsonReader now ignores empty restResourcesCacheFile value in .restapplicationsettings
Description:
Previously the RestResourcesJsonReader did cause errors written to the AppServer logfile when the value of the restResourcesCacheFile entry in .restapplicationsettings was referring to an invalid cache file name:
No Format |
---|
2022-12-13T14:08:47.176+0100 715374 715380 1 AS-7 ?:?:? ServiceLoa ### Initializing Service: Consultingwerk.OERA.RestResource.RestResourceService 2022-12-13T14:08:47.207+0100 715374 715380 1 AS-7 ?:?:? RestResour Unable to parse file "?" 2022-12-13T14:08:47.207+0100 715374 715380 1 AS-7 ?:?:? RestResour An Consultingwerk.Exceptions.InvalidValueException has occurred: 2022-12-13T14:08:47.207+0100 715374 715380 1 AS-7 ?:?:? RestResour Invalid value "?" for File Na |
When the empty value is used for the restResourcesCacheFile we are now ignoring the value. When an invalid file name is provided, we will write a qualified error message to the AppServer logfile.
SCL-3897 GenericDictionary's Keys property may have return too large CharacterList
Description:
We have resolved an issue in the GenericDictionary implementation that was potentially causing the Keys property to return a CharacterList with too many entries. The Keys property now returns a CharacterList who’s size matches the size (Count) of the GenericDictionary.
SCL-3898 Label of field in dynamic SmartViewerControl hidden by security no longer remains visible.
Description:
We have fixed an issue where the label control associated with a field in a dynamic SmartViewerControl instance remained visible also when the control was hidden by security.
SCL-3899 MetaGrid in GUI for .NET does now hide columns that should not be visible by security
Description:
The MetaGrid in GUI for .NET now honors columns that are disabled by security.
Improvement
SCL-3391 Supporting filtering of menu functions and containers in security assignment
Description:
To better support security assignment in larger applications we’re now supporting the filtering of menu functions and containers in the security assignment by product module or object type.
SCL-3796 Implemented optional blocking of overwriting of existing records by the GenericDataImporter
Description:
When the importing of data using the GenericDataImporter previously, we have always been overwriting existing records with new data.
The ImportBusinessEntityData method of the GenericDataImporter now provides an additional LOGICAL parameter that allows to control if existing records should be overwritten or skipped during the import. The parameter may be provided through the “SkipExistingRecords” parameter passed from ANT to the import-data.p procedure:
Code Block | ||
---|---|---|
| ||
<!-- Import SmartDb Data --> <macrodef name="importBusinessEntityData"> <attribute name="BusinessEntity" /> <attribute name="FileName" /> <attribute name="SkipFields" /> <attribute name="SkipExistingRecords" /> <attribute name="ThrowErrors" /> <sequential> <PCTDynRun taskname="SFR-import-data" procedure="Consultingwerk/SmartFramework/Tools/Import/import-data.p" graphicalMode="false" dlcHome="${dlc}" cpinternal="${cpinternal}" cpColl="${cpcoll}" cpstream="${cpstream}" inputchars="32000" token="4000" stackSize="500" msgBufferSize="${Mm}" maximumMemory="65000" dirSize="10000" paramFile="performance.pf" quickRequest="true" ttBufferSize="10000" > <propath> <pathelement path="${installroot}" /> <pathelement path="${installroot}/src" /> <pathelement path="${installroot}/SmartComponentLibrary.pl" /> </propath> <DBConnectionSet refid="smartdbset" /> <Parameter name="BusinessEntity" value="@{BusinessEntity}" /> <Parameter name="FileName" value="@{FileName}" /> <Parameter name="SkipFields" value="@{SkipFields}" /> <Parameter name="SkipExistingRecords" value="@{SkipExistingRecords}" /> <Parameter name="ThrowErrors" value="@{ThrowErrors}" /> </PCTDynRun> <echo/> </sequential> </macrodef> |
...
SCL-3831 Providing OnBeforeBrowse callback with the Consultingwerk.CefSharpSupport assembly
Description:
Through the ChromiumWebBrowserEventHelper control we’re now also providing an ability to implement the OnBeforeBrowse callback of the CefBrowser control.
We have implement support for handling this event through the Consultingwerk.Windows.CefBrowser.ICefBrowserRequestCallbackService service The method
No Format |
---|
/** * Purpose: Called before browser navigation * Notes: If the navigation is allowed FrameLoadStart and FrameLoadEnd will be called. * If the navigation is canceled LoadError will be called with an ErrorCode value of Aborted. * @param poBrowserParent The reference to the Control/Form that holds the CefBrowser control * @param poCefBrowser The reference to the CefBrowser Control * @param poArgs The reference to the OnBeforeBrowseEventArgs with the data for this callback */ method public void BeforeBrowse (poBrowserParent as System.Windows.Forms.Control, poCefBrowser as ChromiumWebBrowser, poArgs as OnBeforeBrowseEventArgs) . |
A sample implementation of this method in the service looks like this:
No Format |
---|
/** * Purpose: Called before browser navigation * Notes: If the navigation is allowed FrameLoadStart and FrameLoadEnd will be called. * If the navigation is canceled LoadError will be called with an ErrorCode value of Aborted. * @param poBrowserParent The reference to the Control/Form that holds the CefBrowser control * @param poCefBrowser The reference to the CefBrowser Control * @param poArgs The reference to the OnBeforeBrowseEventArgs with the data for this callback */ method public void BeforeBrowse (poBrowserParent as System.Windows.Forms.Control, poCefBrowser as ChromiumWebBrowser, poArgs as OnBeforeBrowseEventArgs): if poArgs:Request:Url = "<https://www.dhl.de/de/privatkunden.html":U> then poArgs:CancelNavigation = true . end method . |
The poArgs instance provides access to the URL the browser is about to navigate to and allows to set the CancelNavigation property.
The ICefBrowserRequestCallbackService service is used by both the BrowserForm and BrowserControl implementations.
SCL-3832 CefSharp updated to version 107
Description:
We updated the CefSharp library we use to embed the Chromium Browser to Version 107. This includes the latest Chromium Browser engine as well as various bug and security fixes.
SCL-3861 Added new API to determine if a file was passed in via stdin to a batch mode client
Description:
Based on the discussion in https://stackoverflow.com/questions/74564182/how-to-determine-if-a-procedure-was-passed-a-file-to-standard-input-when-run-via we have added a new method to the Consultingwerk.Util.SessionHelper: InputIsRedirected
The method returns TRUE if a Progress session is started with input redirection.
SCL-3893 Added new template for a simple class file to scl-gen
Description:
We have added a new simple class file template to scl-gen. This template can for instance be used from the command-line within VS Code to generate a class.
No Format |
---|
scl-gen class MyNewClass |
...
SCL-3895 Added OpenEdge 12.7 to ProVersion Enum
Description:
To support our testing efforts for OpenEdge 12.7, we have added OpenEdge 12.7 to ProVersion Enum
SCL-3896 Added OpenEdge 12.7 to Business Entity Designer Configuration
Description:
To support our testing efforts for OpenEdge 12.7, we have added OpenEdge 12.7 to the Business Entity Designer configuration dialog (launcher configuration).
SCL-3900 Implemented support for SecurityKey when rendering dynamic viewer or updatable browser
Description:
The rendering services for dynamic Viewer and Grid instances now assign the viewers or grids Instance Name as the SecurityKey. The SecurityKey of a TableIO target allows to assign toolbar security based on the linked table io target and not just the toolbar item (button) name.
SCL-3901 Implement support for maintaining toolbar items in dynamic forms as security items
Description:
The toolbar security item maintenance now supports maintaining toolbar items in dynamic (rendered) forms based on the name of the dynamic viewer or form as the SecurityKey.
SCL-3904 SmartViewerControl subscribing to CheckStateChanged
Description:
To better support the 3-state UltraCheckEditor the SmartViewerControl is now subscribing to the CheckStateChangedEvent instead of the CheckedChanged event to support changes made by the user. See
https://www.infragistics.com/community/forums/f/ultimate-ui-for-windows-forms/43527/threestate-ultracheckeditor-checkedchanged-event-not-firing
SCL-3905 Implemented optional failing of the GenericDataImporter when importing of data fails
Description:
When the importing of data using the GenericDataImporter failed previously, we have just been logging this to the console when executed from an ANT script (batch mode session). We are now providing the option to fail the build on import errors (e.g. data validation, unique key issues, etc.).
The ImportBusinessEntityData method of the GenericDataImporter now provides an additional LOGICAL parameter that allows to control if errors should be thrown and thus failing the import job. The parameter may be provided through the “ThrowErrors” parameter passed from ANT to the import-data.p procedure:
Code Block | ||
---|---|---|
| ||
<!-- Import SmartDb Data --> <macrodef name="importBusinessEntityData"> <attribute name="BusinessEntity" /> <attribute name="FileName" /> <attribute name="SkipFields" /> <attribute name="SkipExistingRecords" /> <attribute name="ThrowErrors" /> <sequential> <PCTDynRun taskname="SFR-import-data" procedure="Consultingwerk/SmartFramework/Tools/Import/import-data.p" graphicalMode="false" dlcHome="${dlc}" cpinternal="${cpinternal}" cpColl="${cpcoll}" cpstream="${cpstream}" inputchars="32000" token="4000" stackSize="500" msgBufferSize="${Mm}" maximumMemory="65000" dirSize="10000" paramFile="performance.pf" quickRequest="true" ttBufferSize="10000" > <propath> <pathelement path="${installroot}" /> <pathelement path="${installroot}/src" /> <pathelement path="${installroot}/SmartComponentLibrary.pl" /> </propath> <DBConnectionSet refid="smartdbset" /> <Parameter name="BusinessEntity" value="@{BusinessEntity}" /> <Parameter name="FileName" value="@{FileName}" /> <Parameter name="SkipFields" value="@{SkipFields}" /> <Parameter name="SkipExistingRecords" value="@{SkipExistingRecords}" /> <Parameter name="ThrowErrors" value="@{ThrowErrors}" /> </PCTDynRun> <echo/> </sequential> </macrodef> |
...
SCL-3906 Assigning Name property of Controls Rendered by the SmartDynamicFilterControl
Description:
When rendering the Controls within the SmartDynamicFilterControl we are not assigning the Name property of the filtre controls to the name of the filtered field (ProBindingSource column). This will simplify accessing those controls to modify the value programmatically if needed.
To the Label Control attached to the Control we are assigning the binding source column name suffixed with “_Label”.
New Feature
SCL-3628 Introducing SystemOwned flag to certain tables in the SmartDB database
Description:
We have added a new LOGICAL field to these tables in the SmartDB database:
* SmartAttachmentRole
* SmartCommentRole
* SmartConfigurationValue
* SmartFieldSecurityItem
* SmartGenericTable
* SmartGroup
* SmartLanguage
* SmartLoginCompany
* SmartMessage
* SmartModule
* SmartProduct
* SmartSchedulerJob
* SmartSchedulerJobPlan
* SmartSecurityAssignment
* SmartSecurityObject
* SmartSecurityObjectToken
* SmartSecurityToken
* SmartToolbarSecurityItem
* SmartTranslation
* SmartUiTranslation
* SmartUser
* SmartValueList
* SmartValueListEntry
* SmartWorkflow
* SmartWorkflowActivity
* SmartWorkflowStatus
* SmartWorkflowStatusActivity
* SmartWorkflowSwimlane
Customers can use the SystemOwned flag to filter data relevant to deployments. In addition there is row-level authorization for update and delete associated to those records now. Users need to be authorized for the “SystemOwned” token to be allowed to modify or delete those records.
SCL-3845 ServiceAdapter and SmartBusinessEntityAdapter support for native ABL serialization for save changes parameter objects
Description:
In order to support the use of native ABL serialization of objects (ie classes defined with the SERIALIZABLE keyword in the CLASS statement) for saving Business Entity data, 3 new methods are added to the Consultingwerk.OERA.IServiceAdapter interface and consequently to the Consultingwerk.OERA.ServiceAdapter implementation.
The methods are named SubmitData2 and have similar signatures to the existing SubmitData methods. The major difference is that the parameter object is defined as INPUT poParameter AS Progress.Lang.Object , instead of the input Consultingwerk.ISerializable parameter in the SubmitData methods. The parameter object is returned as a return value for cases where the service returns changed values (either to the existing parameter object, or a new or different parameter object). Note that SubmitData2 returns a different instance of the parameter object to the caller than the one which as passed in. Code that relies on properties of the returned object instance need to access those from the returned reference instead of expecting that the input object gets updated.
The method signatures are below. Note that only those SubmitData methods that take a parameter object as input are overridden.
No Format |
---|
/** * Purpose: Saves modified (Create, Update, Delete) data to a Business Entity * Notes: It's recommended but not required to just pass a changes dataset * The phContextDataset parameter is intended to be passed by-reference * @param pcPartition The name of the AppServer partition for this call or "" for the default partition * @param pcEntityName The name of the business entity * @param hChangesDataset INPUT-OUTPUT DATASET-HANDLE The dataset with the modifications to the submitted * @param pcContext INPUT-OUTPUT The context to be passed to the business entity * @param poParameter An optional serializable parameter object to be exchanged with the business entity * @param phContextDataset The handle of the context dataset for this call * @return The parameter object. May be updated/different from the input object */ method public Progress.Lang.Object SubmitData2 (pcPartition as character, pcEntityName as character, input-output dataset-handle hChangesDataset, input-output pcContext as character, poParameter as Progress.Lang.Object, phContextDataset as handle) . /** * Purpose: Saves modified (Create, Update, Delete) data to a Business Entity * Notes: It's recommended but not required to just pass a changes dataset * @param pcPartition The name of the AppServer partition for this call or "" for the default partition * @param pcEntityName The name of the business entity * @param hChangesDataset INPUT-OUTPUT DATASET-HANDLE The dataset with the modifications to the submitted * @param pcContext INPUT-OUTPUT The context to be passed to the business entity * @param poParameter An optional serializable parameter object to be exchanged with the business entity * @return The parameter object. May be updated/different from the input object */ method public Progress.Lang.Object SubmitData2 (pcPartition as character, pcEntityName as character, input-output dataset-handle hChangesDataset, input-output pcContext as character, poParameter as Progress.Lang.Object) . /** * Purpose: Saves modified (Create, Update, Delete) data to a Business Entity * Notes: It's recommended but not required to just pass a changes dataset * @param pcPartition The name of the AppServer partition for this call or "" for the default partition * @param pcEntityName The name of the business entity * @param hChangesDataset INPUT-OUTPUT DATASET-HANDLE The dataset with the modifications to the submitted * @param poParameter An optional serializable parameter object to be exchanged with the business entity * @return The parameter object. May be updated/different from the input object */ method public Progress.Lang.Object SubmitData2 (pcPartition as character, pcEntityName as character, input-output dataset-handle hChangesDataset, poParameter as Progress.Lang.Object). /** * Purpose: Saves modified (Create, Update, Delete) data to a Business Entity * Notes: It's recommended but not required to just pass a changes dataset * The phContextDataset parameter is intended to be passed by-reference * @param pcPartition The name of the AppServer partition for this call or "" for the default partition * @param pcEntityName The name of the business entity * @param hChangesDataset INPUT-OUTPUT DATASET-HANDLE The dataset with the modifications to the submitted * @param poParameter An optional serializable parameter object to be exchanged with the business entity * @param phContextDataset The handle of the context dataset for this call * @return The parameter object. May be updated/different from the input object */ method public Progress.Lang.Object SubmitData2 (pcPartition as character, pcEntityName as character, input-output dataset-handle hChangesDataset, poParameter as Progress.Lang.Object, phContextDataset as handle). |
The methods validate that the input parameter objects are either defined as SERIALIZABLE or that they implement Consultingwerk.ISerializable . Parameter objects that are neither will cause a Consultingwerk.OERA.Exceptions.NoSerializableTypeException to be thrown.
A new preprocessor named {{UsePLOforSmartBusinessEntityAdapterSaveChangesParameter}} in Consultingwerk/produits.i
The Consultingwerk.SmartComponents.Implementation.SmartBusinessEntityAdapter optionally changes the datatype of its SaveChangesParameter property from Consultingwerk.ISerializable to Progress.Lang.Object, in order to support ABL-serializable parameter objects. This behaviour is controlled by a new new preprocessor named {{UsePLOforSmartBusinessEntityAdapterSaveChangesParameter}} in Consultingwerk/products.i . If the preprocessor is defined, then the SaveChangesParameter property in the SmartBusinessEntityAdapter, as well as the SaveChangesParameter property in the Consultingwerk.SmartComponents.Implementation.BeforeSubmitChangesToBackendEventArgs class are defined as Progress.Lang.Object. In the absence of this preprocessor, these properties continue to be defined as _Consultingwerk.ISerializable_.
If the SmartBusinessEntityAdapter’s PreferNativeSerialization property is TRUE (the default value) and the is {{UsePLOforSmartBusinessEntityAdapterSaveChangesParameter}} preprocesor defined , then the property value is set to the return value of the call made to the Service Adapter’s SubmitData2 or InvokeTask2 method.
SCL-3851 New Consultingwerk.Util.CodepageHelper method to remove codepage-incompatible characters from a LONGCHAR
Description:
A new static method ConvertToCodepage has been added to the Consultingwerk.Util.CodepageHelper class. This method converts an input {{LONGCHAR}} value into a specified codedpage {{LONGCHAR}} value. Any characters that cannot be converted are skipped from the new value.
SCL-3887 Providing CefSharp as a Browser UserControl
Description:
In addition to the CefSharp based Consultingwerk.Windows.CefBrowser.BrowserForm we’re now also providing the BrowserControl UserControl. The Control provides the following methods to control the browser:
* NavigateTo (URL)
* NavigateBack ()
* NavigateForward ()
and the following properties:
* Title
* Url
* CancelEnabled
* NavigateBackEnabled
* NavigateForwardEnabeld
along with events raised when those properties change.