Technical FAQ

From ADempiere
Revision as of 13:19, 28 December 2006 by CarlosRuiz (Talk) (Added troubleshooting questions)

Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

RUN_Setup related

Can't access http://server_name:8080 from clients

I've installed Adempiere and I'm not able to connect to it using a windows xp client. From the server machine, going to http://server_name:8080 works and I see the webstart homepage. So does http://127.0.0.1:8080. But wont work if you try to access http://192.168.0.103:8080.

This problem can arise when the client can't resolve the name server_name. 
Workaround:
Install RUN_Setup giving the IP address 192.168.0.103


Troubleshooting customizations

No Identifier records found

Error loading Lookup for a field, this error is shown in the console:

===========> MLookupFactory.getLookup_TableDir: No Identifier records found: CUST_Table

There are no identifier columns defined in CUST_Table.
You must mark identifier columns with isIdentifier = 1, 2 ...

No query columns found

Error looking columns in fields of type Search, this error is shown in the console:

===========> InfoGeneral.initInfoTable: No query columns found

Adempiere tries to look String column that appears in any window, the following query is executed:

SELECT   c.columnname, t.ad_table_id, t.tablename
    FROM ad_table t INNER JOIN ad_column c ON (t.ad_table_id = c.ad_table_id)
   WHERE c.ad_reference_id = 10
     AND t.tablename = ?
--       // Displayed in Window
     AND EXISTS (
            SELECT *
              FROM ad_field f
             WHERE f.ad_column_id = c.ad_column_id
               AND f.isdisplayed = 'Y'
               AND f.isencrypted = 'N'
               AND f.obscuretype IS NULL)
--       //
ORDER BY c.isidentifier DESC, c.seqno

If the field is not displayed in any window, it's not taken as search column. 

No Info for AD_Table_ID=

Adempiere can't found information for a table,, this error is shown in the console: ===========> InfoGeneral.initInfoTable: No Info for AD_Table_ID=1000001 - SELECT ... [11]

Adempiere tries to look for columns that appears in the window associated to the table:

SELECT   t.ad_table_id, c.columnname, c.ad_reference_id, c.iskey,
         f.isdisplayed, c.ad_reference_value_id
    FROM ad_column c INNER JOIN ad_table t ON (c.ad_table_id = t.ad_table_id)
         INNER JOIN ad_tab tab ON (t.ad_window_id = tab.ad_window_id)
         INNER JOIN ad_field f
         ON (tab.ad_tab_id = f.ad_tab_id AND f.ad_column_id = c.ad_column_id)
   WHERE t.ad_table_id = ?
     AND (c.iskey = 'Y' OR (f.isencrypted = 'N' AND f.obscuretype IS NULL))
ORDER BY t.created DESC, c.iskey DESC, f.seqno
The following statement associates a window for tables without the association:

UPDATE ad_table
   SET ad_window_id = (SELECT MIN (ad_window_id)
                         FROM ad_tab
                        WHERE ad_tab.ad_table_id = ad_table.ad_table_id)
 WHERE tablename LIKE 'DICB\_%' ESCAPE '\' AND ad_window_id IS NULL

Development FAQ

Add an information message

ADialog.warn(WindowNo, new ConfirmPanel(),"Information message")

Where to put extensions

You should place your extensions in extend/src.
You should define at least this one as Java Sources directory. Others as well if you change standard classes.

For PO classes:
Then respect coding conventions that can be found in M_Table.getClass(String)
Basically : compiere.model.MThisIsMyTable for a table THIS_IS_MY_TABLE

For Validation classes:
Look at ModelValidationEngine()

Define in your Client the field ModelValidationClasses with you validation classes. They must implement ModelValidator.
Look at example MyValidator.

Make sure Eclipse is setup in Auto Compilation mode.

Anyway, all this is based on Reflection so the only thing to make it work is that Eclipse find the classes at the right place.