Decluttering configuration

Description

Hi, wanting to explore an idea here about decluttering the configuration of iDempiere.

Thinking about and the way how I implemented it.
SysConfig is an option to configure those exceptions, but anyways in the end is a bad option.
Also I don't like adding a new column for an exception case where 99% of records in AD_Tab will have that field empty and there are a few exceptions with the value filled.

I think we add too much columns in application dictionary for exceptional cases (cluttering the configuration). In the end we have a system that just experts can configure, and some of the options make the system too brittle. There are options that if somebody changes inadvertently can mess the system up.

So, I was thinking if would be easier to have some tables to define exceptions.

I mean, for example the specific case of is to configure a different DetailPagingSize for a few tabs, instead of adding AD_Tab.PagingDetailSize we have the following structure:

Table AD_TabNDC (NDC means non-default-configuration - but we can think a better name)

Columns:

  • AD_Tab_ID -> for example the tab Calendar Year and Period > Period

  • Property -> PagingDetailSize

  • Value -> 12

So, the whole system has a default and we define the exceptions in that table. This can be similar to SysConfig (system and client) but more focused on specific properties of the system.

Maybe we can have a table itself for the properties and their system-wide default values.

AD_PropertyDC (Property default configuration)

  • Property -> PagingDetailSize

  • Value -> 10 -> system-wide default value (or we can make it client+system in some cases same as SysConfig)

And in future, when needing to add an option that is exceptionally configured, we can simply add it as a default property and allow to fine-grain configure it in the exception tables, instead of adding a new direct field in dictionary, or a new cryptic SysConfig.

Also, some actual SysConfig are candidates to move to this new approach. And maybe the concept can be extended also to some client-side tables where you need a new column with a default value and rare exceptions configured in some records.

WDYT?

----------

I think we have a lot of candidates for this approach, and we can clean up some configuration from dictionary, for example:

AD_Window

  • WinWidth and WinHeight (I think this is not used in zk, maybe we can simply remove it)

  • System Color doesn't work -> can be removed

  • TitleLogic (mostly empty and just a few windows will have this filled)

  • Image? -> we have 20 windows with image from 424 (less than 5%) - in this case the property would be an ID - would need to think how to model it

  • IsBetaFunctionality -> could be made a property - we basically don't use this in core

AD_Tab

  • IsSingleRow -> just 21 from 1081 has 'N' - and probably is a misconfiguration

  • MaxQueryRecords

  • CommitWarning? -> just 9 from 1081

  • AD_Image_ID -> I think this is not being used

AD_Field

  • ObscureType? -> 5 from 19958 records have configured this

  • IsHeading -> zero in core

  • IsFieldOnly -> 8 from 19958

  • IsDefaultFocus -> zero in core

  • IsEncrypted -> 33 from 19958
    Some of the options in "Overwritten From Column" group are also applicable here, like "Allow Copy" or "Value Format"

AD_Table

  • IsChangeLog -> this is maybe also better to have a system-wide default and people configure exceptions

  • IsHighVolume -> 37 from 961 different from default

AD_Column

  • Version -> we don't use this

  • IsAutoComplete?

  • VFormat

  • IsHtml

  • FormatPattern

AD_Process

  • AllowMultipleExecution

  • ExecutionType

  • IsBetaFunctionality

  • ShowHelp

  • IsServerProcess

AD_Process_Para

  • VFormat

  • IsEncrypted

Environment

None

Attachments

6

Activity

Show:

Carlos RuizMarch 2, 2025 at 1:31 PM

Hi - last tests from the pull request have been successful.

Can you please also check this pull request?

 

Something I notice with the current state:

With this we can replace SysConfig keys that are System level or System+Client level.

The “System” level would be the definition of the default, and the client level would be the setting on the tenant (hmmm, I haven’t tested that case, I’m taking note to test it).

What it’s not replacing is “Org” SysConfig level, but I think those are a minority, and we can keep working with SysConfig when needed.

 

Regards,

Carlos Ruiz

Carlos RuizMarch 1, 2025 at 1:47 PM

The documentation needs to be updated to match the latest changes.

This is my new 2Pack for testing:

 

Carlos RuizOctober 14, 2024 at 9:53 AM

Great - thanks, sorry I didn’t notice.

Deepak PansheriyaOctober 14, 2024 at 1:53 AM

documentation was already added and same was added in web link in this ticket.

Carlos RuizOctober 13, 2024 at 7:02 PM
Edited

Thanks - this looks very promising!!

I’ll add my peer review in the pull request.

Please add documentation NF12 wiki page.


For documentation purposes.

The pull request 2459 adds:

new columns:
AD_Table.M_AttributeSet_ID
M_Attribute.DefaultValue
M_Attribute.EntityType
M_AttributeSet.EntityType
M_AttributeUse.DefaultValue
M_AttributeUse.EntityType
M_AttributeValue.EntityType

new tables
AD_TableAttribute
AD_TableAttributeSet

 

I’m using this simple 2pack as first test case:

It adds an attribute IsGovernment to the table C_BPartner.

But we need test for more complex cases.

Details

Assignee

Reporter

Priority

Created March 27, 2020 at 10:53 AM
Updated March 2, 2025 at 1:31 PM