An optimization month. We start the year profiling, refactoring, and fixing functionality while we keep up the steady pace of enhancements. Wonderful!

Features and Implementor/Developer enhancements

  • List View gets profiling and optimizations to make it faster, we reduce the time to load significantly by using our profiling and benchmarking infrastructure but protecting the functionality with new unit tests and benchmark measures.
  • Denormalization This month we did an update where all modules in the application were denormalized catching a bunch of edge cases that increment the confidence level of this enhancement
    • field is ambiguous, fully qualified names on fields
    • getHelpDeskRelatedAccounts
    • ModComments alias crmentity
    • correct SQL and reduce columns returned
    • use correct table when joining on Users through smownerid
    • email from users query
  • applicationMenu now returns menu entries sorted and supports returning a nested format using the <nested>1</nested> directive
  • enhance Business Map testMap to support more information output and custom Validations support
  • add module information to corebos.filter.listview.render to optimize Timecontrol list view and other events
  • add module argument to updateProfileForField because we always forget to change it when we need it ;-)
  • add autocomplete to MicroTasks uitype 10 fields
  • Picklists
    • giving user the ability to remove none picklist value
    • support adding new values to uitype 16 picklist using vtlib API
  • add a default value for Export Question field
  • Woocommerce: now we can map product/service taxes from WC2CB and CB2WC to be synced
  • Products: add a save tax supported parameter to give the possibility to modify taxes, for example when you sync from woocommerce or other external applications
  • Document Management System add preview for txt files
  • GenDoc: support condition map and worklfow context in gendoc templates. this change permits us to add workflow expressions to the filtering of the foreach directive. We can create a condition expression business map and add the ID of that map to the foreach directive inside our template. Then the loop will execute the condition for each record and merge the content or not depending on the result of the condition. This looks like this:
    {foreach ModuleName::ID_of_Business Map}
    This {module.field} will be shown only for the records that pass the business map condition.
    {/foreach}
  • Workflows
    • adding the array_column expression function to access array elements
    • adding the get_element expression function to access array elements
    • adding Mode expression function to retrieve mode or action in maps

EvolutivoFW Standard Code Formatting, Security, Optimizations, and Tests

  • EvolutivoFW Standard Formatting
  • Documentation: code and wiki.
    • function headers and help messages
    • wiki documentation keeps going
    • reduce the usage of the word coreBOS in favor of Evolutivo
    • change the footer copyright date to 2023 as Evolutivo officially starts in 2023
  • Refactor and Optimize code
    • sonarqube recommendations
    • substitute preg_replace for faster str_replace
    • reduce SQL columns in Colorizer query
    • eliminate useless IF statement
    • call footer response global variable only for admin users
    • eliminate redundant code in web service create/update
    • change in_array for direct compare
    • List View: move evaluations outside loop, eliminate redundant code and warnings
    • check if module has RAC workflow and return before doing more work
    • Tracker: reduce operations and variables inside the loop
    • vtlib_isCustomModule static cache
    • textlength_check MBSTRLEN_EXISTS check outside function
    • use direct values instead of variables
    • remove unused getMailErrorString
    • reduce code sent to popup footer when Colorizer module is not active
    • delete record information from the database using crmobject and direct IDs in RecycleBin
  • Security fixes and updates
    • update DOMPurify to 3.0.8
  • PHP constant updates
  • Unit Tests: keeps getting more and more assertions. List View this month!

Global Variables

  • RecycleBin_Remove_Record: If set to 1, record information will be entirely deleted from the database when emptying the recycle bin. By default, the information stays in the database. This can help with GDPR compliance
  • Application_DetailView_Hide_Duplicate: Hide Duplicate button in detail view. Default is 0, not hidden.
  • Application_Phone_Clickable: If set to a "true" value it will prefix tel to phone fields making them clickable. By default, the fields are not clickable

Others

  • clear button prevents condition value from saving in advanced filter
  • control if AWS generated file is set
  • show special characters in mail subject
  • excel exporting empty string as a number
  • show detailed errors when the import fails
  • Field Dependency fixes getting uitype 10 and avoid setting undefined value
  • escape quotes and set default values for empty variables in Module Manager
  • MsgTemplate field usage check enhanced to check actual field in the template
  • remove duplicate and inactive users from scheduled reports recipients
  • support scheduled reports with a percent character in the name, besides its special meaning
  • avoid warning loading inexistent user during login
  • get the correct module in all cases of VAT calculations
  • Vendors popup select with address incorrect field name after migration to uitype 10
  • eliminate javascript error in ExecuteFunction call: convert error to executefunction call error which is another issue that needs to be debugged in each failing AJAX call
  • Workflow
    • do not launch every modified workflow on afterdelete
    • error duplicating workflow
    • task fieldtype is not saved
  • Translations

Insights

January Insights

January February
Sonarqube January Sonarqube February

Thanks for reading.

Previous Post Next Post