IDempiere Recipes
Solutions to common problems and requirements.
Please contribute here, to improve the coverage of documentation.
Translations
Refer: Localization
Use menu trees to quickly setup access and structures (per role).
- Login to system - tree maintenance.
- Associate role with tree.
Organization column to show all organizations, regardless of security
... I've created a new window, where I have a field that should be a list/table of all the Organizations available in the Client. Just like AD_Org_ID, but different, lets call it "AD_OrgForPrint_ID" for example. The problem is that I would like that every user of the system could choose any Organization, but right now it is limited by the Organization(s) that the Role or the User has been assigned to. So I thought that I could make a callout to fill the list/table with all the Organizations available, but I haven't been able to. And I haven't found any other callout filling a list/table/tabledir field, so... could it be done? ...
Common error messages, with meanings and/or solutions
ERROR: relation "tablename_Trl" does not exist
14:04:49.298===========> DB.executeUpdate: INSERT INTO tablename_Trl (AD_Language,.... [POSavetablename_19ff2eb4-f49b-416a-985f-4cd9858654ed] [107] org.postgresql.util.PSQLException: ERROR: relation "tablename_Trl" does not exist
- Certain columns in ad_column are ticked 'translated', and no translation table is available. Untick.
SEVERE: Error - WrongDataType: Escalated - IsEscalated - Class invalid: class java.lang.Boolean, Should be class java.lang.String: false
I am seeing one bug, like if you enable request processor then in the console you will see below error SEVERE: Error - WrongDataType: Escalated - IsEscalated - Class invalid: class java.lang.Boolean, Should be class java.lang.String: false Cause of the issue is, in the X_R_RequestAction, IsEscalated column is String instead of boolean
[[1]]
java.sql.SQLException: ORA-01407: cannot update ("AD_FIELD_TRL"."NAME") to NULL
- Error occurs when copying window tabs, from the Window definition window.
- Solution is to add missing translations for all active languages
java.lang.RuntimeException: Error initializing storage
- The OSGI module database was corrupted (probably the server was unable to store it correctly)
- Solution is to add osgi.clean=true to the configuration/config.ini file - see also [[2]]
Open different iDempiere sessions, same browser, different tabs
Create hosts entries pointing to server IP with different host names.
Allow or disallow users connecting to Postgres server
Edit pg_hba.conf
UI
Added button to window, but can't see it on the window
- Check access to the process
- On the table column, "toolbar button": check window/toolbar (button may only be visible in the gears list at the top)
GUI window editor
There is a GUI tab (window layout) editor available on the Window/Tab (click on the gears icon)
https://www.youtube.com/watch?v=3vOmZ0o09KY&index=13&list=PL2805F9B642C0C91C
Credit:
Thanks to nTier Software Services (Simbarashe Musabaike) for pointing it out!
- Hint: don't use alias in select list
Credit:
nTier Software Services Simbarashe Musabaike
Start iDempiere automatically when linux machine starts
Development
Info windows
- Receive error "No info columns" when opening info window: check that there is a window linked to the table
Plugin development
Service not starting in plugin: troubleshooting
NB: Below is work in progress and subject to improvement and correction
If your service (example, Model Factory) doesn't start
- Make sure the plugin is ticked in the list of plugins in the run configuration
- Carefully follow the steps given in the appropriate page under Category:Plug-In Development, or watch one of the videos available on You Tube.
- If the plugin starts in development mode, but not in deployed mode:
"Before exporting a bundle jar file you have to be sure that your component definition xml in OSGI-INF file is exported into the jar file. Open the build.properties file and look whether all your definitions are checked in the "Binary Build" list." (from Jan Thielemann's writeup from evenos GmbH (www.evenos-consulting.de))
- Increase the trace level through iDempiere Monitor or by editing idempiere.properties.
- Check if anything can be seen in the log file.
- You can check to see if your service is running in Felix Console, by clicking on the arrow next to the plugin.
- Type (for example) services org.adempiere.base.IModelFactory (or services *IModelFactory*) in the OSGi console to see if service has started.
- Check that your service is referenced and that the reference is correct (check for spelling mistakes and so on) in the plugin's MANIFEST.MF file.
- Check that your "implementation class" and "provide interface" classes are correct in the service.xml (check for spelling mistakes and so on).
- Check that your service has a public default constructor.
- Duplicate component name causes service not to start.
- Open the exported binary code (jar) under the plugins folder of the deployment and check:
- That the xml files corresponding to the service are there.
- That the .class file for the service is there.
- Problem with invalid character in the build.properties file caused classes not to be exported into jar file.
- After attempting to use your service make sure the relevant plugin has been started by typing ss pluginname in the OSGi console.
- Make sure org.osgi.framework and org.osgi.service.event are imported (TO BE REVIEWED).
- Check your exports and imports match (TO BE REVIEWED).
- Check that the "Bundle-RequiredExecutionEnvironment" matches between all your plugins.
- Try create new plugin and re-create services in question.
- For regressions use use hg update and hg revert to return to specific revisions when service was starting.
Credit:
- nTier Software Services Simbarashe Musabaike
- nTier Software Services http://www.ntier.co.za
How to import existing plugins into workspace
- Use file/import/existing projects
OSGi Services
It's important to note that OSGi services are shared between consumers, and are effectively singletons. Therefore instance variables are not inherently thread-safe.
Use a factory mechanism combined with the service mechanism if you wish to use instance variables in your services.
from Osgi spec:
• Service Scope - Indicates how service objects are obtained when requesting a service object. The following service scopes are defined: singleton, bundle, and prototype.
The default service scope is singleton.
• Service Factory - A facility to let the registering bundle customize the service object for each using bundle. When using a Service Factory, the service scope of the service is bundle.
• Prototype Service Factory - A facility to let the registering bundle customize the service object for each caller. When using a Prototype Service Factory, the service scope of the service is prototype.
iDempiere 3.1 Upgrade Notes
- Don't forget to install buckminster maven support in Eclipse
- server.product configuration worked, but server.product.eventtest did not. Hangs, related to the starting of Jetty ("WARNING: No default jetty created.")
- Had to use Java 1.8 (change in the run configuration) otherwise error about too many open files and "java.lang.RuntimeException: Error scanning file I_PA_ReportColumnSet.class" (for example)
- Had to run sequence check after upgrade
Deployment
How to add your custom plugins to the core and build them together
Useful for Jenkins build:
http://wiki.idempiere.org/en/Add_customize_plugin_to_package_with_core
Credit:
Hiệp lê quý
Remote debugging using Eclipse
- Start idempiere using idempiere-server.sh debug
- The debug line in the script is: DEBUG="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=4554,server=y,suspend=n"
- See here: https://www.eclipse.org/jetty/documentation/9.3.x/enable-remote-debugging.html
- More notes are needed
Change the sequence of capture of address details
If you want to capture the country before you capture address line 1 (for example), change the Country Setup in System as follows:
Capture Sequence Old:
@A1@ @A2@ @A3@ @A4@ @C@, @P@ @CO@
Capture Sequence New:
@CO@ @A1@ @A2@ @A3@ @A4@ @C@, @P@
Pack Out / In
Notes
- Include SQL to remove window tabs before the window is packed out (see AD scratchpad for details)
- Data pack out: appears that the case which is used in composing the SQL statement is significant
- Don't include trailing spaces after the SQL
- Doesn't packout reference if reference is defined only on the Window and not in a column anywhere (see reference overwrite on window)
- if you find things are missing from your 2pack for no apparent reason, check 'Export Dictionary Entity' is ticked on the header
- To packout the packout definition itself, click on the export button on the toolbar , for each pack out
- Sometimes a cache reset or even server restart is required after a pack-in
- The following error indicates that the table concerned needs UUID to be generated (done under System/UUID Generator). Check the stack trace for the exact table.
org.adempiere.pipo2.exception.DatabaseAccessException: Failed to export SEVERE: AD_Window_Access java.lang.IllegalStateException: 2Pack doesn't work with record without official Id and UUID -> AD_Window_Access_UU at org.adempiere.pipo2.AbstractElementHandler.verifyPackOutRequirement(AbstractElementHandler.java:519) at org.adempiere.pipo2.handler.WindowAccessElementHandler.create(WindowAccessElementHandler.java:69) at org.adempiere.pipo2.handler.RoleElementHandler.createWindowAccess(RoleElementHandler.java:289) at org.adempiere.pipo2.handler.RoleElementHandler.create(RoleElementHandler.java:167)
Table, window & field
Default logic for fields
Specify the default document type without hard coding the c_doctype_id
@SQL=SELECT c_doctype_id as DefaultValue from C_DocType where Name='AR Receipt' and AD_Client_ID=@AD_Client_ID@
UUID missing from table
See menu option: Generate UUIDs
Item showing in dropdown list which is not part of query
Check your callouts. A callout might set a value in the list, which is not included in the reference or dynamic validation.
Report & Process
Display a tabulated report after running process
For example, use the following statements in your process code:
addLog(0, null, new BigDecimal(100), "Test output line 1"); addLog(0, null, new BigDecimal(100), "Test output line 2"); addLog("Test output line 3"); addLog("Test output line 4");
Display or hide user prompt when running process
Various options are available for prompting the user when running a report & process, including:
- Show Help
- Run silently - Take Defaults
- Don't show help
These are available under the Report & Process, Help field
Validate parameters for a report & process
For example if you wish to validate the start and end date parameters entered when running a report, add a class and validate in the java code (add the class to the definition of the report & process). If validation fails, throw an exception - the report will be cancelled.
Workflow
nTier Workflow Analysis & Review Research Document
See: https://groups.google.com/forum/#!topic/idempiere/RnE0kfl9dA4
Workflow: The Soul of an ERP
Red1's document: Workflow: The Soul of an ERP, is available here: http://sourceforge.net/projects/red1/files/ADempiere%20PDFs/Workflow.pdf/download
Jasper Reports
Developing report on Windows machine and deploying to a linux machine
If developing report on Windows machine and deploying to a linux machine, then use SanSerif (or a linux compatible font). If necessary, can find and replace in the .jrxml source. Otherwise, will encounter an error when running the report.
This page is brought to you by nTier Software Services. Feel free to improve directly or suggest using the Discussion tab.