Create Organization hierarchy Chart in axapta

These are method to create organization hierarchy chart in Axapta


 public class FormRun extends ObjectRun  
 {  
 CCFormTreeDatasource treeDatasource;  
 }  
 void InsertinTemp()  
 {  
 TmpOrganizationChart2 TmpOrganizationChart2_1;  
 _OrganizationChart2 _OrganizationChart2_1;  
 ;  
 /*hile select _OrganizationChart2_1  
 {  
 while select forupdate TmpOrganizationChart2_1 where TmpOrganizationChart2_1.WareHouseCode==_OrganizationChart2_1.WareHouseCode  
 {  
 TmpOrganizationChart2_1.delete();  
 }  
 }*/  
 Delete_from TmpOrganizationChart2_1;  
 While select _OrganizationChart2_1  
 {  
 TmpOrganizationChart2_1.WareHouseCode=_OrganizationChart2_1.WareHouseCode;  
 TmpOrganizationChart2_1.ParentWareHouseCode=_OrganizationChart2_1.ParentWareHouseCode;  
 TmpOrganizationChart2_1.Office_type=_OrganizationChart2_1.Office_type;  
 TmpOrganizationChart2_1.Name=InventLocation::find(_OrganizationChart2_1.WareHouseCode).Name;  
 TmpOrganizationChart2_1.insert();  
 }  
 }  
 public void init()  
 {  
 super();  
 // this.query().dataSourceNo(1).clearDynalinks();  
 element.InsertinTemp();  
 }  
 int task(int p1)  
 {  
 int ret;  
 ;  
 ret = super(p1);  
 if (p1 == 288) // Enter  
 element.exit();  
 Return ret;  
 }  
 public void run()  
 {  
 FormControl hostControl;  
 ;  
 super();  
 // initialize tree  
 this.InitTree();  
 // if this form was called as lookup, then expand tree at value of calling host control  
 hostControl = element.selectTarget();  
 if (hostControl)  
 this.ExpandAndSelect( hostControl.valueStr() );  
 }  
 void exit()  
 {  
 ;  
 // on exit, return data of currently selected node  
 element.closeSelect(treedatasource.selectedData());  
 }  
 int ExpandAndSelectRec(str 10 ChildId)  
 {  
 int node;  
 Irrigation_OrganizationChart2 table;  
 str IdTree;  
 ;  
 // recursively search for parent Ids to be expanded first  
 select firstonly table where table.WareHouseCode == ChildId;  
 if (table) {  
 node = this.ExpandAndSelectRec(table.ParentWareHouseCode);  
 // expand found node  
 tree.expand(node, FormTreeExpand::EXPAND);  
 // search for my node starting from parent  
 IdTree = tree.getItem(node).data();  
 while (ChildId != IdTree)  
 {  
 node = tree.getNextVisible(node);  
 IdTree = tree.getItem(node).data();  
 }  
 } else {  
 // if no parent was found, then we reached the root node  
 node = tree.getRoot();  
 }  
 // select and return found node  
 tree.select(node);  
 return node;  
 }  
 void ExpandAndSelect(str ChildId)  
 {  
 tree.lockWindowUpdate(true);  
 this.ExpandAndSelectRec(ChildId);  
 tree.lockWindowUpdate(false);  
 }  
 void InitTree()  
 {  
 treeDatasource = new CCFormTreeDatasource(TmpOrganizationChart2_DS,tree,  
 fieldnum(TmpOrganizationChart2,WarehouseCode),  
 fieldnum(TmpOrganizationChart2,ParentWarehouseCode),  
 fieldnum(TmpOrganizationChart2,Name),  
 true, false  
 );  
 treeDatasource.initRoot("Organization",'',0);  
 }  
 //Methods under treeview tabpage  
 public void pageActivated()  
 {  
 ;  
 this.ViewTreeView();  
 super();  
 }  
 public int mouseDblClick(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift)  
 {  
 int ret;  
 ret = super(_x, _y, _button, _Ctrl, _Shift);  
 return ret;  
 }  
 public int mouseUp(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift)  
 {  
 int ret;  
 ret = super(_x, _y, _button, _Ctrl, _Shift);  
 return ret;  
 }  
 Methods under Tree  
 boolean expanding(int idx, FormTreeExpand action, anytype data)  
 {  
 boolean ret;  
 ;  
 ret = super(idx, action, data);  
 treeDatasource.expanding(idx, action, data); // expand node  
 Return ret;  
 }  
 public void selectionChanged(FormTreeItem _OldItem, FormTreeItem _NewItem, FormTreeSelect _how)  
 {  
 super(_OldItem, _NewItem, _how);  
 }