Skip to main content

Tree Structure for Custom Windows in Openbravo

Generating Tree Structure is a great innovative feature that is present in OpenbravoERP. If you are wondering what it looks like, refer to Organization window in the Client Mode or the Menu Window in System Admin mode. There will be an icon called Tree in the Toolbar. Click on that and you will see something similar to the screen shot below.
This functionality will find its use in most places where there is a hierarchy to be shown and segregations are to be visualized. One more appreciably feature is that you can drag and drop the items and rearrange it. Doesn’t it sound really cool to you? I was really excited to test this out for the custom windows and with the help of Wiki, Forge and of course my colleague, I was able to create a tree similar to the one shown above for a custom window called ‘Department’. I have attached a screen shot of my tree below.
This feature is really helpful in lot of cases. I have shared the sequence of steps that I followed that enabled me to create such a structure.
1.    Create a new table for storing the tree nodes. Eg: XYZ_treenodedp
2.    Add logic in the Department Table to insert values in XYZ_treenodedp and the corresponding delete logic also. Refer Organisation table trigger for more information.
3.    Add a new entry in the list reference ad_treetype. Eg: Search key: XYZ_DP Name: Department
4.    Create a new entry in Tree and Node Image window both in System administrator and desired client admin. Eg. Name: Primary Department Tree type: Department in System Administrator and Name: F&B International Admin Department Tree Type: Department in F&B International Admin.
5.    Add a new column in ad_clientinfo. Eg: em_XYZ_tree_department
6.    Update and set the value for the em_XYZ_tree_department field as the client's tree entry. Eg: In F&B International Admin, Set the value as 'F&B International Admin Department.
7.    Set the field 'Tree Included' to Yes in Fields Tab. Eg: In Department window
8.    Modify the following files.
8.1    src/org/openbravo/erpCommon/utility/WindowTreeUtility.java
8.2    src/org/openbravo/erpCommon/utility/WindowTree_data.xsql
8.3    src/org/openbravo/erpCommon/utility/WindowTreeChecks.java
Make the following Modifications
  • In WindowTreeUtility.java, add the following lines in checkSpecificChanges() Method.
else if (TreeType.equals("XYZ_DP")) { //Department result = ""; }
In WindowTreeUtility.java, add the following lines in getTreeType() Method.
else if (keyColumnName.equals("XYZ_Department_ID")) TreeType = "XYZ_DP";
 In WindowTreeUtility.java, add the following lines in getTree() Method.
else if (TreeType.equals("XYZ_DP")) data = WindowTreeData.selectDepartment(conn, vars.getUser(), strEditable, strParentID,  strNodeId, TreeID);
  • In WindowTreeUtility.java, add the following lines in setNode() Method.
else if (TreeType.equals("XYZ_DP")) WindowTreeData.updateDP(conn, vars.getUser(), strParentID, strSeqNo, TreeID, strLink);
  •  In WindowTree_data.xsql, add two new sql methods to select and update the tree nodes.
<SqlMethod name="updateDP" type="preparedStatement" return="rowCount"> <SqlMethodComment></SqlMethodComment> <Sql> UPDATE XYZ_TREENODEDP SET UPDATED=now(), UPDATEDBY = ?,                 PARENT_id = ?, SEQNO=TO_NUMBER(?)   WHERE AD_TREE_ID = ? AND NODE_ID = ? </Sql> <Parameter name="updatedby"/> <Parameter name="parentId"/> <Parameter name="seqno"/> <Parameter name="adTreeId"/> <Parameter name="nodeId"/> </SqlMethod> <SqlMethod name="selectDepartment" type="preparedStatement" return="multiple"> <SqlMethodComment></SqlMethodComment> <Sql> SELECT tn.Node_ID,tn.Parent_ID,tn.SeqNo,tb.IsActive,                             m.XYZ_Department_ID AS ID, m.Name,m.Description,m.IsSummary FROM XYZ_TreeNodedp tn left join AD_TreeBar tb on                         tn.AD_Tree_ID=tb.AD_Tree_ID AND tn.Node_ID=tb.Node_ID AND tb.AD_User_ID  = ? , XYZ_Department m WHERE tn.Node_ID = m.XYZ_Department_ID AND tn.AD_Tree_ID = ? ORDER BY COALESCE(tn.Parent_ID, '-1'), tn.SeqNo </Sql> <Parameter name="adUserId"/> <Parameter name="editable" optional="true" type="none" after="WHERE "                 text="tn.IsActive='Y' AND m.isActive='Y' AND "/> <Parameter name="parentId" optional="true" after="WHERE " text="tn.Parent_ID = ?             AND "/> <Parameter name="nodeId" optional="true" after="WHERE " text="tn.Node_ID = ?             AND "/> <Parameter name="adTreeId"/> </SqlMethod>
Get back to me for any doubts in this regards... Happy Working.... 

Comments

Popular posts from this blog

My 10 years in Application Development

It's been around 10 years since I started programming. May be a bit more, if I have to include my first attempts at C programming in school. But it would be a grave insult to call remembering ten lines of code and just replicating it to put a star on the screen. I also did a course on Visual basic, but it was more gimmicks that Application development. But it was truly in the year 2007 when I started my Master in Computer Applications that I found a new flare for developing applications. 
I was very late to computers in general and even when I joined my Masters, computers were not really accessible to me. But when I joined my Masters where one is actually expected to hone the skills which they already have, but in case it was were I was learning the skills, initially it was very difficult. I was not sure what computers had for me nor I had a natural flair for programming. But the thing about computers that attracted me was the visual medium it gave. Initially it was just a door t…

Changing Timezone in Postgresql, Ubuntu

Timezone and locale are integral concepts that one should be aware of when implementing a System. For example. if you create a database in PostgreSql, it will use the default System settings for the database. Lets say you have a server in UK and your client is US. If the client tries to retrieve the current date or time, it is going to show the UK time and not the US one.
Today I encountered a different issue in our client place where the Ubuntu timezone and PostgreSql timezone were showing a incorrect values. Instead of Indian Standard Time (IST) it was showing Pacific Daylight Time(PDT). These are the steps that I followed to change the timezone to IST in PostgreSql and Ubuntu.
Changing timezone in Ubuntu:
sudo dpkg-reconfigure tzdataYou will be prompted to choose the continent and then the area. Provided screen shots where we configure the location.
Use TAB key to navigate to the OK button and then press Enter.

The changes will get reflected immediately. To check it you can open a n…

கிறுக்கனின் கிறுக்கல்கள் - அழுகையின் சிறப்பு

அழுகை என்பதை வெறுத்தவன் நான்... என்னை ஒரு நாள் பிரிந்திருக்க முடியாமல் , கைப்பேசியில் நீ சிந்திய உன் கண்ணீர் ஓசை என் காதில் கேட்கும் வரை...

பின்குறிப்பு: கிறுக்கனின் கிறுக்கல்கள் எங்கிருந்தோ தழுவப்பட்டது போல் தோன்றினால் கிறுக்கன் ( நான் உண்மையை ஏற்றுக்கொள்பவன்..:) ) பொறுப்பல்ல. கிறுக்கனின் கிறுக்கல்களில் வரும் கிறுக்கல்கள் யாவும் என் சிறய மூளையில் உதித்ததே ஆகும்.  Inspirations could have been drawn from somewhere else, but its the execution that counts....Isn't it ?