Placeholders for every fields


Idea is to implement placeholders for every fields (windows, process parameters ,...)
See :




Carlos Ruiz
July 6, 2019, 10:34 AM
Carlos Ruiz
March 8, 2018, 3:01 PM

Thanks , committed your suggestion.

Flemming Birch
March 7, 2018, 7:20 PM


I do believe that we have an issue whit the view ad_field_vt as it return the number of records as multiplied with the numbers of installed language in the system. This gives an error when opening a window in iDempiere!
The following is the correction I have made:

SELECT trl.ad_language, t.ad_window_id, f.ad_tab_id, f.ad_field_id, tbl.ad_table_id, f.ad_column_id,, trl.description,, f.isdisplayed, f.displaylogic, f.displaylength, f.seqno,
f.sortno, f.issameline, f.isheading, f.isfieldonly, f.isreadonly, f.isencrypted AS isencryptedfield, f.obscuretype, c.columnname, c.columnsql, c.fieldlength, COALESCE(f.VFormat, c.VFormat) AS VFormat, COALESCE(f.defaultvalue, c.defaultvalue) AS defaultvalue,
c.iskey, c.isparent, COALESCE(f.ismandatory, c.ismandatory) AS ismandatory, c.isidentifier, c.istranslated, COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id,
c.callout, COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id, COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id, COALESCE(f.isalwaysupdateable,
c.isalwaysupdateable) AS isalwaysupdateable, COALESCE(f.readonlylogic, c.readonlylogic) AS readonlylogic, COALESCE(f.mandatorylogic, c.mandatorylogic) AS mandatorylogic, COALESCE(f.isupdateable, c.isupdateable) AS isupdateable,
c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax, AS fieldgroup, vr.code AS validationcode, f.included_tab_id, fg.fieldgrouptype,
fg.iscollapsedbydefault, COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete, COALESCE(f.isallowcopy, c.isallowcopy) AS isallowcopy, f.isdisplayedgrid,
f.seqnogrid, c.seqnoselection, f.xposition, f.columnspan, f.numlines, COALESCE(f.istoolbarbutton, c.istoolbarbutton) AS istoolbarbutton, c.formatpattern, f.isadvancedfield, f.isdefaultfocus, c.ad_chart_id, f.ad_labelstyle_id, f.ad_fieldstyle_id, c.pa_dashboardcontent_id, COALESCE(trl.placeholder, ct.placeholder) AS placeholder
FROM ad_field f
JOIN ad_field_trl trl ON f.ad_field_id = trl.ad_field_id
JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id
LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id
LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language::text = fgt.ad_language::text
LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id
LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id AND trl.ad_language::text = ct.ad_language::text
JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id
LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id)
WHERE f.isactive = 'Y' AND c.isactive = 'Y'


Carlos Ruiz
February 24, 2018, 1:37 PM


> -> fixed for AD_Field_V (not AD_Field_vt to make it consistent with name, description, ...)

I think name and description are different as they are not "inherited" from column when they are empty.
I fixed that in the script.

> > almost done as i haven't touch the AD_COLUMN_TRL fo postgresql (i'm not able to test it :/) ; the script ran without error on Oracle ; not tested on postgresql

OK, fixed in postgresql too - as postgresql now shares the same syntax of oracle I made the two scripts in sync.


Carlos Ruiz

Nicolas Micoud
February 17, 2018, 8:42 PM


Please find an updated patch:

  • I think you forgot to add PlaceHolderPostal_Add to C_Country_Trl ->


    Add missing translations is throwing error because of that.

  • For the classes adding public methods please regenerate serialVersionUID ->


  • In the views, instead of
    I think you must add
    COALESCE(f.placeholder, c.placeholder) AS placeholder

-> fixed for AD_Field_V (not AD_Field_vt to make it consistent with name, description, ...)

  • The change on must be applied too to migration/processes_post_migration/postgresql/02_SynchronizeTerminology.sql

    > almost done as i haven't touch the AD_COLUMN_TRL fo postgresql (i'm not able to test it :/) ; the script ran without error on Oracle ; not tested on postgresql
    nb: i haven't updated the IsSOTrx='N' part as there is no such field for placeholder

  • In - comments must be in english

    -> fixed (this modification was not part of the patch)

  • Is there any placeholder that we might set up in the default core? Maybe migrate the old from/to placeholders in range process parameter to the new approach?

-> My first idea was to set it to the Value or Name Element. But I fear this change could lead to big changes for end users. I will attach the script for inserting data in placeholder fields for range parameters (is ok on oracle, not tested on postgresql)




Nicolas Micoud


Nicolas Micoud


Tested By