Using Tree in Form
1. Firstly, create three tables with the following requirements.
1.1 Create a table (parent table) name: Medicine
Fields type Edt
MedName str
MedDesc str
MedName str
MedDesc str
1.2. Create a table (reference table) name: MedReferencehrr
Fields type Edt
MedRef int64 Medref = reference table: Medicines
DtOwn int64
MedRef int64 Medref = reference table: Medicines
DtOwn int64
Relation:
1. ownrelation : MedReferencehrr i.e, DtOwn == recid
2. Foreign key rel : Medicines MedRef = MedReferencehrr .recid
1. ownrelation : MedReferencehrr i.e, DtOwn == recid
2. Foreign key rel : Medicines MedRef = MedReferencehrr .recid
1.3 Create a table( child table ) name : MedDetails
Fields type Edt
MedRef int64 Medref = reference table: Medicines
Name1 str
Desc1 str
Name1 str
Desc1 str
Relation: Normal: MedDetails .MedRef = Medicines .recid
1.4 Create a new Form named SampleTree2 and drag 3 tables in the form DS. The following code
must written as it is.
must written as it is.
Medicines no relation
MedDetails join source: Medicines type: active
MedReferencehrr
In design: add group in group add a Tree name it as: SampleTree2
MedDetails join source: Medicines type: active
MedReferencehrr
In design: add group in group add a Tree name it as: SampleTree2
Public class FormRun extends ObjectRun
{
{
boolean isCreatedNew;
boolean isModified;
TreeItemIdx newItemIdx;
TreeItemIdx lastRecordIdx;
int64 lastRecordRecId;
String10 billingGroupRecid;
boolean isModified;
TreeItemIdx newItemIdx;
TreeItemIdx lastRecordIdx;
int64 lastRecordRecId;
String10 billingGroupRecid;
//
String10 billingeGroupHierarchyRecid;
int64 billingGroupHierarchyParentRecid;
String10 billingeGroupHierarchyRecid;
int64 billingGroupHierarchyParentRecid;
//
QueryBuildRange qbrMedecines;
QueryBuildRange qbrMedecines;
QueryBuildRange qbrMedReferencehrr;
//
List delRecList;
//
List delRecList;
//
ImageListAppl_HISServices imageAppl;
#define.Root(3)
}
1. Init method :
#define.Root(3)
}
1. Init method :
public void init()
{
super();
imageAppl = new ImageListAppl_HISServices();
imageAppl.addImage(resourceStr(SampleTree),#Root);
SampleTree.setImagelist(imageAppl.imageList());
}
{
super();
imageAppl = new ImageListAppl_HISServices();
imageAppl.addImage(resourceStr(SampleTree),#Root);
SampleTree.setImagelist(imageAppl.imageList());
}
2. Run method :
public void run()
{
super();
if( Medecines.RecId == 0)
{
AddNewService.enabled(true);
}
element.loadTree();
public void run()
{
super();
if( Medecines.RecId == 0)
{
AddNewService.enabled(true);
}
element.loadTree();
}
3. Loadtree method:
3. Loadtree method:
public void loadTree()
{
TreeItemIdx parentItemIdx;
{
TreeItemIdx parentItemIdx;
SampleTree2.deleteAll();
parentItemIdx = this.createRootNode();
this.createChildNodes(parentItemIdx,0);
SampleTree2.select(SampleTree2.getRoot());
SampleTree2.expand(SampleTree2.getRoot());
}
SampleTree2.expand(SampleTree2.getRoot());
}
4. createRootNode method :
public TreeItemIdx createRootNode()
{
FormTreeItem parentItem;
{
FormTreeItem parentItem;
parentItem = new FormTreeItem(“Medicines”);
parentItem.data(0);
parentItem.data(0);
//parentitem.image(imageAppl.image(#Root));
// parentitem.selectedImage(imageAppl.image(#Root));
// parentitem.selectedImage(imageAppl.image(#Root));
returnSampleTree2.addItem(FormTreeAdd::Root,FormTreeAdd::First,parentItem);
}
}
5. createChildNodes method :
public void createChildNodes(TreeItemIdx _parentIdx, int64 _serviceGroupHierarchyParentRecid)
{
MedReferencehrr MedReferencehrrLocal;
MedReferencehrr MedReferencehrrChild;
Medecines medecines1;
FormTreeItem parentItem;
TreeItemIdx newParentIdx;
{
MedReferencehrr MedReferencehrrLocal;
MedReferencehrr MedReferencehrrChild;
Medecines medecines1;
FormTreeItem parentItem;
TreeItemIdx newParentIdx;
while select * from MedReferencehrrLocal
join * from medecines1
where MedReferencehrrLocal.DtOwn == _serviceGroupHierarchyParentRecid
&& MedReferencehrrLocal.MedRef == medecines1.RecId
{
join * from medecines1
where MedReferencehrrLocal.DtOwn == _serviceGroupHierarchyParentRecid
&& MedReferencehrrLocal.MedRef == medecines1.RecId
{
select count(recId) from MedReferencehrrChild
where MedReferencehrrChild.DtOwn == MedReferencehrrLocal.RecId;
where MedReferencehrrChild.DtOwn == MedReferencehrrLocal.RecId;
if(MedReferencehrrChild.RecId > 0)
{
parentItem = new FormTreeItem();
parentItem.data(MedReferencehrrLocal.RecId);
parentItem.text(medecines1.MedDesc);
{
parentItem = new FormTreeItem();
parentItem.data(MedReferencehrrLocal.RecId);
parentItem.text(medecines1.MedDesc);
newParentIdx = SampleTree2.addItem(_parentIdx,FormTreeAdd::Sort,parentItem);
if(MedReferencehrrLocal.RecId == lastRecordRecId)
{
lastRecordIdx = newParentIdx;
}
element.createChildNodes(newParentIdx,MedReferencehrrLocal.RecId);
}
else
{
parentItem = new FormTreeItem();
parentItem.data(MedReferencehrrLocal.RecId);
parentItem.text(medecines1.MedDesc);
if(MedReferencehrrLocal.RecId == lastRecordRecId)
{
lastRecordIdx = newParentIdx;
}
element.createChildNodes(newParentIdx,MedReferencehrrLocal.RecId);
}
else
{
parentItem = new FormTreeItem();
parentItem.data(MedReferencehrrLocal.RecId);
parentItem.text(medecines1.MedDesc);
newParentIdx = SampleTree2.addItem(_parentIdx,FormTreeAdd::Sort,parentItem);
if(MedReferencehrrLocal.RecId == lastRecordRecId)
{
lastRecordIdx = newParentIdx;
}
}
if(MedReferencehrrLocal.RecId == lastRecordRecId)
{
lastRecordIdx = newParentIdx;
}
}
}
}
Now add action panel to this tree group . in button group add two buttons type : button name :AddBelow and delete .
In AddBelow button : clicked method :
void clicked()
{
super();
element.addNode(SampleTree2.getSelection());
}
In form Methods : add the method:
addNode method :
In AddBelow button : clicked method :
void clicked()
{
super();
element.addNode(SampleTree2.getSelection());
}
In form Methods : add the method:
addNode method :
public void addNode(TreeItemIdx _parentIdx)
{
FormTreeItem newItem;
FormTreeItem parentItem;
{
FormTreeItem newItem;
FormTreeItem parentItem;
newItem = new FormTreeItem(“”);
newItem.data(0);
//newItem.image(imageAppl.image(#NormalGroup));
//newItem.selectedImage(imageAppl.image(#NormalGroup));
newItem.data(0);
//newItem.image(imageAppl.image(#NormalGroup));
//newItem.selectedImage(imageAppl.image(#NormalGroup));
newItemIdx = SampleTree2.addItem(_parentIdx, FormTreeAdd::Sort,newItem);
SampleTree2.select(newItemIdx);
Medecines_ds.create();
parentItem = SampleTree2.getItem(_parentIdx);
billingGroupHierarchyParentRecid = parentItem.data();
isCreatedNew = true;
billingGroupHierarchyParentRecid = parentItem.data();
isCreatedNew = true;
AddBelow.enabled(false);
}
}
In Delete button : clicked method :
void clicked()
{
//super();
FormTreeItem treeItem;
void clicked()
{
//super();
FormTreeItem treeItem;
treeItem = BillingTree.getItem(BillingTree.getSelection());
if(element.deleteBillingGroup(treeItem.data()))
{
element.loadTree();
}
{
element.loadTree();
}
}
In form Methods : add the method:
deleteBillingGroup method :
ignore error and cont
public boolean deleteBillingGroup(recId _recId)
{
Medecines medecines2;
MedReferencehrr medReferencehrrlocal;
deleteBillingGroup method :
ignore error and cont
public boolean deleteBillingGroup(recId _recId)
{
Medecines medecines2;
MedReferencehrr medReferencehrrlocal;
DialogButton dialogButton;
ListEnumerator enumer;
boolean allDeleted = true;
ListEnumerator enumer;
boolean allDeleted = true;
if(_recId)
{
medReferencehrrlocal = MedReferencehrr::find(_recId);
{
medReferencehrrlocal = MedReferencehrr::find(_recId);
dialogButton = Box::yesNo(‘Selected billing group and its subsidary group will be deleted’, DialogButton::No);
if( dialogButton == DialogButton::Yes )
{
try
{
delRecList = new List(Types::Int64);
if( dialogButton == DialogButton::Yes )
{
try
{
delRecList = new List(Types::Int64);
delRecList.addStart(medReferencehrrlocal.MedRef);
element.deleteGroupCode(_recId);
enumer = delRecList.getEnumerator();
ttsBegin;
while(enumer.moveNext())
{
select forupdate medecines2
where medecines2.RecId == enumer.current();
{
select forupdate medecines2
where medecines2.RecId == enumer.current();
if(medecines2.validateDelete())
{
medecines2.delete();
}
else
{
allDeleted = false;
break;
}
}
{
medecines2.delete();
}
else
{
allDeleted = false;
break;
}
}
if(allDeleted)
{
ttsCommit;
return true;
}
else
{
ttsAbort;
return false;
}
{
ttsCommit;
return true;
}
else
{
ttsAbort;
return false;
}
}
catch
{
return false;
}
}
else
{
return false;
}
}
catch
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
–
In Table MedReferencehrr(In Table not in Form) Create a new method ,write the following code :
{
return false;
}
}
–
In Table MedReferencehrr(In Table not in Form) Create a new method ,write the following code :
public static MedReferencehrr find(
RecId _recid,
boolean _forUpdate = false,
ConcurrencyModel _concurrencyModel = ConcurrencyModel::Auto)
{
MedReferencehrr medReferencehrr ;
medReferencehrr.selectForUpdate(_forUpdate);
RecId _recid,
boolean _forUpdate = false,
ConcurrencyModel _concurrencyModel = ConcurrencyModel::Auto)
{
MedReferencehrr medReferencehrr ;
medReferencehrr.selectForUpdate(_forUpdate);
if(_forUpdate && _concurrencyModel != ConcurrencyModel::Auto)
{
medReferencehrr.concurrencyModel(_concurrencyModel);
}
{
medReferencehrr.concurrencyModel(_concurrencyModel);
}
select firstonly * from medReferencehrr where medReferencehrr.RecId == _recid;
return medReferencehrr;
}
}
——
Come Back to Form and Create a New Method In form name : deleteGroupCode
Come Back to Form and Create a New Method In form name : deleteGroupCode
public void deleteGroupCode(recId _parentrecId)
{
MedReferencehrr medReferencehrrChild;
MedReferencehrr medReferencehrrTraverse;
{
MedReferencehrr medReferencehrrChild;
MedReferencehrr medReferencehrrTraverse;
while select * from medReferencehrrTraverse
where medReferencehrrTraverse.DtOwn == _parentrecId
where medReferencehrrTraverse.DtOwn == _parentrecId
{
select count(recId) from medReferencehrrChild
where medReferencehrrChild.DtOwn == medReferencehrrTraverse.RecId;
where medReferencehrrChild.DtOwn == medReferencehrrTraverse.RecId;
if(medReferencehrrChild.RecId > 0)
{
delRecList.addEnd(medReferencehrrTraverse.MedRef);
element.deleteGroupCode(medReferencehrrTraverse.RecId);
{
delRecList.addEnd(medReferencehrrTraverse.MedRef);
element.deleteGroupCode(medReferencehrrTraverse.RecId);
}
else
{
delRecList.addEnd(medReferencehrrTraverse.MedRef);
}
else
{
delRecList.addEnd(medReferencehrrTraverse.MedRef);
}
}
}
}
In Form DesignDesigngroupTree SampleTree2 –right click – override method – SelectionChanged :
public void selectionChanged(FormTreeItem _OldItem, FormTreeItem _NewItem, FormTreeSelect _how)
{
super(_OldItem, _NewItem, _how);
{
super(_OldItem, _NewItem, _how);
if(SampleTree2.getRoot() == SampleTree2.getSelection())
{
AddNewService.enabled(false);
}
else
{
AddNewService.enabled(true);
}
{
AddNewService.enabled(false);
}
else
{
AddNewService.enabled(true);
}
if(isCreatedNew)
{
if(isModified)
{
if(SampleTree2.getSelection() != newItemIdx)
{
//if(HMServiceCatalog_ds.validateWrite())
//{
//HMServiceCatalog_ds.write();
//}
//else
//{
SampleTree2.select(newItemIdx);
//}
}
{
if(isModified)
{
if(SampleTree2.getSelection() != newItemIdx)
{
//if(HMServiceCatalog_ds.validateWrite())
//{
//HMServiceCatalog_ds.write();
//}
//else
//{
SampleTree2.select(newItemIdx);
//}
}
}
else
{
SampleTree2.delete(newItemIdx);
newItemIdx = 0;
if(Medecines_ds.validateWrite())
{
Medecines_ds.write();
}
isCreatedNew = false;
isModified = false;
AddBelow.enabled(true);
billingeGroupHierarchyRecid = element.getCurrentSelectedItemRecid();
MedReferencehrr_ds.executeQuery();
billingGroupRecid = int642str(MedReferencehrr.MedRef);
Medecines_ds.executeQuery();
else
{
SampleTree2.delete(newItemIdx);
newItemIdx = 0;
if(Medecines_ds.validateWrite())
{
Medecines_ds.write();
}
isCreatedNew = false;
isModified = false;
AddBelow.enabled(true);
billingeGroupHierarchyRecid = element.getCurrentSelectedItemRecid();
MedReferencehrr_ds.executeQuery();
billingGroupRecid = int642str(MedReferencehrr.MedRef);
Medecines_ds.executeQuery();
}
}
else
{
billingeGroupHierarchyRecid = element.getCurrentSelectedItemRecid();
MedReferencehrr_ds.executeQuery();
billingGroupRecid = int642str(MedReferencehrr.MedRef);
Medecines_ds.executeQuery();
}
else
{
billingeGroupHierarchyRecid = element.getCurrentSelectedItemRecid();
MedReferencehrr_ds.executeQuery();
billingGroupRecid = int642str(MedReferencehrr.MedRef);
Medecines_ds.executeQuery();
}
}
}
Now design the form. Take another Group , take action panel with two method,
Name Prop
AddNewService command : New
DeleteNewService command : DeleteRecord
Name Prop
AddNewService command : New
DeleteNewService command : DeleteRecord
Select a new grid and drag some fields from the Table : MedDetails
In Form DataSource :
1. Medecines
1. Medecines
public void init()
{
super();
{
super();
qbrMedecines =this.query().dataSourceTable(tableNum(Medecines)).addRange(fieldNum(Medecines,recId));
}
public void write()
{
MedReferencehrr MedReferencehrrLocal;
}
public void write()
{
MedReferencehrr MedReferencehrrLocal;
super();
if(isCreatedNew == true)
{
MedReferencehrrLocal.MedRef = Medecines.RecId;
MedReferencehrrLocal.DtOwn = billingGroupHierarchyParentRecid;
MedReferencehrrLocal.insert();
{
MedReferencehrrLocal.MedRef = Medecines.RecId;
MedReferencehrrLocal.DtOwn = billingGroupHierarchyParentRecid;
MedReferencehrrLocal.insert();
newItemIdx = 0;
billingGroupHierarchyParentRecid = 0;
isCreatedNew = false;
isModified = false;
AddBelow.enabled(true);
billingGroupHierarchyParentRecid = 0;
isCreatedNew = false;
isModified = false;
AddBelow.enabled(true);
element.refresh(MedReferencehrrLocal.RecId);
}
else
{
element.refresh(MedReferencehrr.RecId);
}
}
public void executeQuery()
{
qbrMedecines.value(billingGroupRecid);
}
else
{
element.refresh(MedReferencehrr.RecId);
}
}
public void executeQuery()
{
qbrMedecines.value(billingGroupRecid);
super();
}
}
2. MedReferencehrr
public void init()
{
super();
{
super();
qbrMedReferencehrr =this.query().dataSourceTable(tableNum(MedReferencehrr)).addRange(fieldNum(MedReferencehrr,recId));
}
}
public void executeQuery()
{
qbrMedReferencehrr.value(billingeGroupHierarchyRecid);
{
qbrMedReferencehrr.value(billingeGroupHierarchyRecid);
super();
}
}
Lastly Create a new method in Form Method :
public void refresh(recId _lastRecid)
{
lastRecordRecId = _lastRecid;
{
lastRecordRecId = _lastRecid;
element.loadTree();
SampleTree2.select(lastRecordIdx);
}
}
Now : In order to Sort the Tree Based on the following upper grid then :
1. Create a new Table MainTableMed
Add few fields
In Table Medecines :
Add relation new relation give table : MainTableMed;
Right click foreign key PrimaryKey
A field will be generated .
Add few fields
In Table Medecines :
Add relation new relation give table : MainTableMed;
Right click foreign key PrimaryKey
A field will be generated .
2. In the Form Drag Table : MainTableMed into Datasource ..
InDatasourceTable: Medecines Properities
Join Source = MainTableMed
Link Type = active
InDatasourceTable: Medecines Properities
Join Source = MainTableMed
Link Type = active
In Form DataSource Table MainTableMed override methods :
public void create(boolean _append = false)
{
super(_append);
{
super(_append);
SampleTree2.deleteAll();
AddBelow.enabled(false);
}
AddBelow.enabled(false);
}
public void delete()
{
super();
{
super();
if(MainTableMed.RecId == 0)
{
SampleTree2.deleteAll();
AddBelow.enabled(false);
}
{
SampleTree2.deleteAll();
AddBelow.enabled(false);
}
}
public int active()
{
int ret;
public int active()
{
int ret;
ret = super();
if(ret)
{
if(MainTableMed.RecId)
{
element.loadTree();
AddBelow.enabled(true);
}
else
{
SampleTree2.deleteAll();
AddBelow.enabled(false);
}
}
{
if(MainTableMed.RecId)
{
element.loadTree();
AddBelow.enabled(true);
}
else
{
SampleTree2.deleteAll();
AddBelow.enabled(false);
}
}
To work this Moddify the form method : CreateChildNodes