Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

A login is required to participate in the forum. Don't be shy - create your account today!

Image RemovedImage Added

OpenEdge 11.7 Service Pack 2

...

SCL-2259 Business Entity Designer Edit Source Editor "Data Access Validation Method" button was falsely Disabled under certain circumstances

Description:

When a Business Entity is generated without generating the DatasetController, the Business Entity Source Code Editor did not offer the "Data Access Validation Method" option. We have resolved this issue in this release.

SCL-2260 Fixed an issue in the MenuBusinessEntity that caused a runtime error after saving changes a second time in a session.

Description:

The error message caused in the Data Access classes observed was:

No Format
The parameter value 'eSmartMenu' for pcKey in Consultingwerk.Framework.Collections.CharacterDictionary is invalid.

The issue was caused by recent changes to the following Business Entities: * Consultingwerk.SmartFramework.Menu.MenuBusinessEntity * Consultingwerk.SmartFramework.Repository.Customization/CustomizationBusinessEntity * Consultingwerk.SmartFramework.System.SmartBusinessEntityBusinessEntity

Improvement

SCL-2197 Implemented reordering of temp-tables in the Business Entity Designer

Description:

The Business Entity Designer does not allow the reordering of the temp-tables in the generators DEFINE DATASET statement. The order can be changed using a setting in the Field Properties Viewer.

SCL-2217 Implemented repository support for the "step" property in SmartViewer JSON Layout for numeric fields.

Description:

MetaDataField instances in MetaViewer objects will now set the "step" property for numeric fields. For decimal fields, this property is based on the ABL FORMAT of the fields. See https://github.com/consultingwerk/SmartComponentsNG2/issues/237

SCL-2254 Implemented ability to change the product module from a Object Master in the Repository

Description:

It is now possible to change the product module of an existing Object Master in the Repository. As we are not able to move existing .smartrepo files - as this is dependent to the customer's setup, we have implemented an event in the ISmartRepository which is raised (on the application backend), when an Object Master was moved to another product module:

Code Block
languagec#
    /**
     * Purpose: Event raised when the Product Module of an Object Master is changed
     * Notes:
     * @param sender The reference to the object that raised the event
     * @param e The ObjectMasterProductModuleChangedEventArgs with the data for this event
     */
    DEFINE PUBLIC EVENT ObjectMasterProductModuleChanged SIGNATURE VOID (sender AS Progress.Lang.Object,  
                                                                         e AS ObjectMasterProductModuleChangedEventArgs).

...

SCL-2255 Implemented additional JsonHelper methods

Description:

Added the following methods to the JsonHelper:

Code Block
languagec#
    /**
     * Purpose: Builds a Character list of the property values in all objects of the array
     * Notes:
     * @param poJsonArray The JsonArray
     * @param pcPropertyName The name of the property to build a list of
     * @return The comma delimited list of property values
     */
    METHOD PUBLIC STATIC CHARACTER AttributeValueList (poJsonArray AS JsonArray,
                                                       pcPropertyName AS CHARACTER)

    /**
     * Purpose: Builds a Character list of the property values in all objects of the array
     * Notes:
     * @param poJsonArray The JsonArray
     * @param pcPropertyName The name of the property to build a list of
     * @param pcDelimiter The list delimiter
     * @return The delimited list of property values
     */
    METHOD PUBLIC STATIC CHARACTER AttributeValueList (poJsonArray AS JsonArray,
                                                       pcPropertyName AS CHARACTER,
                                                       pcDelimiter AS CHARACTER)

    /**
     * Purpose: Copies the given JSON Properties from the source JSON to
     *          the targegt JSON
     * Notes:
     * @param poSourceObject The source JSON object
     * @param poTargetObject The target JSON object
     * @param pcPropertyNames The names of the properties to copy
     */
    METHOD PUBLIC STATIC VOID CopyProperties (poSourceObject AS JsonObject,
                                              poTargetObject AS JsonObject,
                                              pcPropertyNames AS CHARACTER)

    /**
     * Purpose: Locates the JsonObject from a JsonArray with the requested
     *          integer value in a JsonArray property
     * Notes:
     * @param poJsonArray The JsonArray
     * @param pcPropertyName The name of the property
     * @param piPropertyValue The value of the property
     * @return The JsonObject or ? when the property value cannot be found
     */
    METHOD PUBLIC STATIC JsonObject FindJsonObjectWithArrayValue (poJsonArray AS JsonArray,
                                                                  pcPropertyName AS CHARACTER,
                                                                  piPropertyValue AS INTEGER)

    /**
     * Purpose: Locates the JsonObject from a JsonArray with the requested
     *          integer property value
     * Notes:
     * @param poJsonArray The JsonArray
     * @param pcPropertyName The name of the property
     * @param piPropertyValue The value of the property
     * @return The JsonObject or ? when the property value cannot be found
     */
    METHOD PUBLIC STATIC JsonObject FindJsonObjectWithPropertyValue (poJsonArray AS JsonArray,
                                                                     pcPropertyName AS CHARACTER,
                                                                     piPropertyValue AS INTEGER)

    /**
     * Purpose: Returns the Character Value specified by the given path
     * Notes:   Based on GetJsonObjectByPath, the last part of the path specifies
     *          the property name
     * @param poSourceJsonObject The source Json object that contains the target Json object
     * @param pcPath The path specifying the target object
     * @return The character value of ? when the path is not valid
     */
    METHOD PUBLIC STATIC CHARACTER GetCharacterByPath (poSourceJsonObject AS JsonObject,
                                                       pcPath AS CHARACTER)

    /**
     * Purpose: Returns the Character Value specified by the given path
     * Notes:   Based on GetJsonObjectByPath, the last part of the path specifies
     *          the property name
     * @param poSourceJsonObject The source Json object that contains the target Json object
     * @param pcPath The path specifying the target object
     * @param poArrayBase The array base (one or zero)
     * @return The character value of ? when the path is not valid
     */
    METHOD PUBLIC STATIC CHARACTER GetCharacterByPath (poSourceJsonObject AS JsonObject,
                                                       pcPath AS CHARACTER,
                                                       poArrayBase AS ArrayBaseEnum)

    /**
     * Purpose: Returns the Integer Value specified by the given path
     * Notes:   Based on GetJsonObjectByPath, the last part of the path specifies
     *          the property name
     * @param poSourceJsonObject The source Json object that contains the target Json object
     * @param pcPath The path specifying the target object
     * @return The character value of ? when the path is not valid
     */
    METHOD PUBLIC STATIC INTEGER GetIntegerByPath (poSourceJsonObject AS JsonObject,
                                                   pcPath AS CHARACTER)

    /**
     * Purpose: Returns the Integer Value specified by the given path
     * Notes:   Based on GetJsonObjectByPath, the last part of the path specifies
     *          the property name
     * @param poSourceJsonObject The source Json object that contains the target Json object
     * @param pcPath The path specifying the target object
     * @param poArrayBase The array base (one or zero)
     * @return The character value of ? when the path is not valid
     */
    METHOD PUBLIC STATIC INTEGER GetIntegerByPath (poSourceJsonObject AS JsonObject,
                                                   pcPath AS CHARACTER,
                                                   poArrayBase AS ArrayBaseEnum)

    /**
     * Purpose: Returns the Logical Value specified by the given path
     * Notes:   Based on GetJsonObjectByPath, the last part of the path specifies
     *          the property name
     * @param poSourceJsonObject The source Json object that contains the target Json object
     * @param pcPath The path specifying the target object
     * @return The character value of ? when the path is not valid
     */
    METHOD PUBLIC STATIC LOGICAL GetLogicalByPath (poSourceJsonObject AS JsonObject,
                                                   pcPath AS CHARACTER)

    /**
     * Purpose: Returns the Logical Value specified by the given path
     * Notes:   Based on GetJsonObjectByPath, the last part of the path specifies
     *          the property name
     * @param poSourceJsonObject The source Json object that contains the target Json object
     * @param pcPath The path specifying the target object
     * @param poArrayBase The array base (one or zero)
     * @return The character value of ? when the path is not valid
     */
    METHOD PUBLIC STATIC LOGICAL GetLogicalByPath (poSourceJsonObject AS JsonObject,
                                                   pcPath AS CHARACTER,
                                                   poArrayBase AS ArrayBaseEnum)

    /**
     * Purpose: Returns the values (string, number, boolean, null) of the given JsonArray
     *          as a delimited list
     * Notes:
     * @param poJsonArray The JsonArray to process
     * @return The delimited list of values
     */
    METHOD PUBLIC STATIC CHARACTER ToDelimitedList (poJsonArray AS JsonArray):

        RETURN JsonHelper:ToDelimitedList (poJsonArray, ",":U) 

    /**
     * Purpose: Returns the values (string, number, boolean, null) of the given JsonArray
     *          as a delimited list
     * Notes:
     * @param poJsonArray The JsonArray to process
     * @param pcDelimiter The list delimiter
     * @return The delimited list of values
     */
    METHOD PUBLIC STATIC CHARACTER ToDelimitedList (poJsonArray AS JsonArray,
                                                    pcDelimiter AS CHARACTER)

...

SCL-2256 New method in the StringHelper

Description:

We've added a new method in the StringHelper class which returns the position of the first capital letter in a given character value.

Code Block
languagec#
    /**
     * Purpose: Returns the position of the first capital letter in the given string
     * Notes:
     * @param pcString The string to parse
     * @return The position of the first capital letter or 0 when there is no capital letter
     */
    METHOD PUBLIC STATIC INTEGER FirstCapitalLetter (pcString AS CHARACTER):

...

SCL-2257 TempTableShape did render "?X" after field, when FieldValidationInstance was not set and Custom properties exist for a field

Description:

We've resolved the issue with the rendering of the field names on the design canvas of the Business Entity Designer.

SCL-2262 ServerSessionActivator no longer switches to user "nobody" when the current USERID is already "nobody"

Description:

The ServerSessionActivator class sets the current user ID to "nobody" at the end of every AppServer request. As this causes a message to be written to the database logfile, we're not checking if the current user ID is still "nobody" and will not set the user ID again to "nobody" to avoid extra messages in the database logfile.