Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

The following areas might be a source of issues when starting to use the new version Bee’s Knees 10.0, so please make yourself familiar with this section.

Classic UI Ends

Support for the Classic UI ended with this version and users are expected to use the Unity UI. All of the Classic functionality is now fully available in Unity.

Related Migration Steps

  • SSO links – If you were using single sign-on with links pointing to Classic UI, change them to Unity UI.

  • Email templates links – If you were using links to Classic UI in your email templates, change them to Unity UI.

  • Bookmarks – If you have any bookmarks pointing to Classic UI, change them to Unity UI.

  • Custom help – If you were using Custom Help in Classic UI and created content there, transfer it elsewhere. In Unity UI, Custom Help is supported in a different form – you can add your own link to the user menu pointing users to an external page with custom help.

Conversion of Groovy Closure Type Parameters to Groovy Types

There is a formula sandbox change to increase security: a new Advanced Configuration Option filterGroovyClosureParameterType enforces conversion of Groovy closure type parameters to their respective Groovy types. It is set to true by default for newly created partitions.

Background

Before Bee’s Knees, types were not properly converted for Groovy Sandbox (such as DomainObject to Map) when used as a closure parameter.

In this example, the code works but the cor parameter is not a Map (as it should be) but some instance of DomainObject (CompensationRecord):

def result
        List cors = api.find("COR", 0, 1, null, null, Filter.equal("label", "SC_basic_logic"))?.collect()
        cors.each {def cor ->
            result = cor
        }
        return result

Note that if you explicitly set the type of cor to Map, the code will fail with an error.

Since Bees Knee's, the conversion of types in closure parameters is automatic just for LocalDateTime -> Date (which is safe in terms of backward compatibility). Other types will not be converted by default because the conversion might break the existing Groovy code; instead there will be a specific warning in logs, i.e.:

PFUN-16195 groovy closure parameter type possible conversion: source type: net.pricefx.domain.CompensationRecord, target type: java.util.LinkedHashMap, groovy method: each

If you see this kind of log message, you should consider adding an Advanced Configuration Option filterGroovyClosureParameterType=true which will enable automatic conversion for Groovy closure parameters as it should be and will also remove the log message. Then check your Groovy code for possible errors and fix them by using a proper data type, i.e. DomainObject will be converted to Map.

  • When filterGroovyClosureParameterType=true is not set, then:

    • Will not work: cors.each {Map cor ->

    • Will work: cors.each {def cor ->

    • cor is an instance of some DomainObject class.

  • When filterGroovyClosureParameterType=true is set, then:

    • Both will work:
      cors.each {Map cor ->
      cors.each {def cor ->

    • But you will not be able to access the DomainObject because it was converted to a Map.

  • No labels