Hi Maverick ! you try the following code if you find a bug, please tell me if you succeed provision should tell me:
Step 1: Create new 1 form in form have 2 Edit String , 1 Button and 1 GridView in Grid have 3 EditString. create new a table regular, a table TempBP.
Step 2: Insert all tables name in your table have create in step 1. Create 1 new Jobs and code.
static void ListOfTables(Args _args)
{
UtilElements localEelmet;
UtilEntryLevel LayerName = UtilEntryLevel::sys;
TreeNode treeNode;
BSDQueryRelation_Thanh _BSDQueryRelation_Thanh;
//int CountTable =0 ;
;
while select localEelmet
where localEelmet.utilLevel == LayerName
&& localEelmet.recordType == UtilElementType::Table
{
// CountTable++;
treeNode = xUtilElements::getNodeInTree(xUtilElements::parentElement(localEelmet));
delete_from _BSDQueryRelation_Thanh;
_BSDQueryRelation_Thanh.NameTable = localEelmet.name;
_BSDQueryRelation_Thanh.insert();
//info(strFmt("TableId: %1 ; Name: %2, %3",localEelmet.TableId,localEelmet.name, CountTable));
}
}
Step 3: Code of Form program:
class Declaration:
public class FormRun extends ObjectRun
{
container allrelationTrace;
}
Query Relation method:
public container QueryRelation(TableId _SourceTableId,TableId _TargetId)
{
int relationId, id, ccount ;
int relationCnt;
container relationTrace, allrelationtrace2;
str name;
str nameTableSource,nameTableTarget;
SysDictTable dictTable;
SysDictRelation dictRelation;
nameTableSource = tableId2name(_SourceTableId);
nameTableTarget = tableId2name(_TargetId);
if(_SourceTableId ==_TargetId)
{
return [_TargetId];
}
dictTable = new DictTable(_SourceTableId);
dictRelation = new DictRelation (_SourceTableId);
relationCnt= dictTable.relationCnt();
// vong lap kiem tra quan he cua Source Table
for(relationId = 1; relationId <= relationCnt; relationId++)
{
dictRelation.loadNameRelation(dictTable.relation(relationId));
if(dictRelation.externTable() == _TargetId)
{
relationTrace = conIns(relationTrace, conLen(relationTrace)+1,tableId2name(dictRelation.externTable()));
return relationTrace;
}
}
// vong lap chay tung quan he cua table Source
for(relationId = 1; relationId <= relationCnt; relationId++)
{
dictRelation.loadNameRelation(dictTable.relation(relationId));
// vong lap kiem tra cac quan he hien tai dang di qua ( tranh bi lap lai khi quan he xoay vong)
for(id =1; id <= conLen(allrelationTrace); id++)
{
name =tableId2name(dictRelation.externTable());
if(conPeek(allrelationTrace,id) == name)
{
ccount =1;
break;
}
}
allrelationtrace2 = conIns(allrelationtrace2, conLen(allrelationtrace2)+1,tableId2name(_SourceTableId));
// vonh lap kiem tra tat ca cac quan he di qua ma khong co ket qua tra ve ( tranh trung lap cac quan he ko co ket qua)
for(id =1; id <= conLen(allrelationtrace2); id++)
{
name =tableId2name(dictRelation.externTable());
if(conPeek(allrelationtrace2,id) == name)
{
ccount =1;
break;
}
}
// neu 2 dieu kien ben tren thoa man thi cho phep thuc thi vong lap de quy
if(ccount < 1 && _SourceTableId != dictRelation.externTable())
{
ccount=0;
allrelationtrace2 = conNull();
relationTrace = this.QueryRelation(dictRelation.externTable(),_TargetId);
if(relationTrace)
{
relationTrace = conIns(relationTrace, conLen(relationTrace)+1,tableId2name(dictRelation.externTable()));
return relationTrace;
}
else
{
allrelationTrace = conIns(allrelationTrace, conLen(allrelationTrace)+1,tableId2name(_SourceTableId));
}
}
}
return relationTrace ;
}
Write code action Click of Button:
void clicked()
{
container conquery, conquery2 ;
int i, j;
SysDictTable dictTable;
SysDictRelation dictRelation;
int relationCnt;
str name ;
super();
allrelationTrace = conNull();
dictTable = new DictTable(tableName2id(txtSourceTable.valueStr()));
dictRelation = new DictRelation (tableName2id(txtSourceTable.valueStr()));
relationCnt= dictTable.relationCnt();
for (j =1 ; j < relationCnt; j++)
{
if(j==1)
{
dictRelation.loadNameRelation(dictTable.relation(j));
conquery = element.QueryRelation(tableName2id(txtSourceTable.valueStr())
,tableName2id(txtTargetTable.valueStr()));
}
else
{
dictRelation.loadNameRelation(dictTable.relation(j-1));
conquery = element.QueryRelation(dictRelation.externTable()
,tableName2id(txtTargetTable.valueStr()));
if(conLen(conquery) > 0)
{
conquery = conIns(conquery,conLen(conquery)+1,tableId2name(dictRelation.externTable()));
}
}
conquery2 = conIns(conquery2,conLen(conquery2)+1,conquery);
conquery= conNull();
}
delete_from BsdRalationTable_Thanh;
for (i = 1;i <= conLen(conquery2); i++)
{
conquery = conPeek(conquery2,i);
BsdRalationTable_Thanh.clear();
BsdRalationTable_Thanh.TableTargetName = txtTargetTable.valueStr();
BsdRalationTable_Thanh.TableSourceName = txtSourceTable.valueStr();
name ="--> ";
for (j=conLen(conquery);j >1; j--)
{
if(typeOf(conPeek(conquery,j)) == Types::Integer)
name +=int2str(conPeek(conquery,j)) +" --> ";
else
name +=conPeek(conquery,j) +" --> ";
}
if(conLen(conquery) >0)
{
BsdRalationTable_Thanh.TableRelationName = name;
BsdRalationTable_Thanh.insert();
}
BsdRalationTable_Thanh_DS.refresh();
BsdRalationTable_Thanh_DS.research();
name = "";
}
}
Code lookup for 2 StringEdit:
public void lookup()
{
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(BSDQueryRelation_Thanh), this);
sysTableLookup.addLookupField(fieldNum(BSDQueryRelation_Thanh,NameTable));
queryBuildDataSource = query.addDataSource(tableNum(BSDQueryRelation_Thanh));
// queryBuildDataSource.addGroupByField(fieldNum(BSDQueryRelation_Thanh,NameTable));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
super();
}
Good luck ! replay for me, please !