Upgrade to Bee's Knees 10.x Troubleshooting

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 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, but an instance of DomainObject (a CompensationRecord in this case):

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.

Found an issue in documentation? Write to us.