Lookup
lookup
//=========
// LOOKUP =
//=========
//Dans le Champ du DataSource on definit une methode Lookup. In the field of the DS we overwrite the lookup method.
//Le bon usage : mettre le code ans la table Table - Best practices : put the code in the table
//
public void lookup(FormControl _formControl, str _filterStr)
{
;
WMSLocation::lookupLocationIdType(_formControl);
}
//Table WMSLocation
-------------------
public client static void lookupLocationIdType(FormStringControl _ctrl)
{
SysTableLookup sysTableLookup;
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
Query query;
;
sysTableLookup = SysTableLookup::newParameters(tablenum(WMSLocation), _ctrl);
query = new Query();
queryBuildDataSource = query.addDataSource(tablenum(WMSLocation));
sysTableLookup.addLookupfield(fieldnum(WMSLocation, inventLocationId)); X------------------add a column, if not pb
sysTableLookup.parmQuery(query); //lie la query au lookup - link the query to the lookup
sysTableLookup.performFormLookup(); //Execute le lookup
}
//Class sysTableLookup
static SysTableLookup newParameters(tableId tableId, FormControl callingControl, boolean useLookupValue = true)
{
SysTableLookup sysTableLookup = SysTableLookup::construct();
;
sysTableLookup.parmTableId(tableId);
sysTableLookup.parmCallingControl(callingControl);
sysTableLookup.parmUseLookupValue(useLookupValue); //true -> valeur renvoyee = callingControl - value send = CallingControl ?
return sysTableLookup;
}
//Ajouter un champ au lookup - To add a field to the lookup
//
sysTableLookup.addLookupfield(fieldnum(InventQuarantineOrder, QuarantineId));
//Ajouter une methode display - To add a display method
//
sysTableLookup.addLookupMethod(tablemethodstr(WMSLocation, inventSiteId));
//=======================================================================================================================================//
//Autre example - Another Example
//Table : WMSJournalTable
//-----------------------
boolean lookupInventTransRefId(FormStringControl _lookupCtrl)
{
switch(this.InventTransType)
{
case InventTransType::Production:
ProdTable::wmsRegisterProdLookup(_lookupCtrl);
return true;
case InventTransType::Purch:
this.purchIdLookup(_lookupCtrl);
return true;
case InventTransType::Sales:
this.salesIdLookup(_lookupCtrl);
return true;
case InventTransType::QuarantineOrder:
this.lookupQuarantineOrder(_lookupCtrl);
return true;
case InventTransType::TransferOrderReceive:
InventTransferTable::lookupWMSReception(_lookupCtrl);
return true;
}
return false;
}
public void lookupQuarantineOrder(FormStringControl _lookupCtrl)
{
;
InventQuarantineOrder::lookupWMSReception(_lookupCtrl);
}
Table : InventQuarantineOrder
-----------------------------
static void lookupWMSReception(FormStringControl ctrl)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(InventQuarantineOrder), ctrl);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildDataSource queryBuildDataSource1;
QueryBuildRange queryBuildRange;
;
sysTableLookup.addLookupfield(fieldnum(InventQuarantineOrder, QuarantineId));
sysTableLookup.addLookupfield(fieldnum(InventQuarantineOrder, Name));
sysTableLookup.addLookupfield(fieldnum(InventQuarantineOrder, Status));
queryBuildDataSource = query.addDataSource(tablenum(InventQuarantineOrder));
queryBuildDataSource.addSortField(fieldnum(InventQuarantineOrder, Status), SortOrder::Descending); // show reported as finished before created
queryBuildDataSource.addSortField(fieldnum(InventQuarantineOrder, QuarantineId), SortOrder::Ascending);
queryBuildRange = queryBuildDataSource.addRange(fieldnum(InventQuarantineOrder, Status));
queryBuildRange.value(queryRangeConcat(SysQuery::value(InventQuarantineStatus::Created), SysQuery::value(InventQuarantineStatus::ReportedFinished)));
queryBuildDataSource1 = queryBuildDataSource.addDataSource(tablenum(InventTrans));
queryBuildDataSource1.joinMode(JoinMode::ExistsJoin);
queryBuildDataSource1.relations(true);
queryBuildRange = queryBuildDataSource1.addRange(fieldnum(InventTrans, StatusReceipt));
queryBuildRange.value(SysQuery::value(StatusReceipt::Ordered));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
Method
------
the call of the lookup is in the field of the dataSource.
public void lookup(FormControl _formControl, str _filterStr)
{
;
if (!wmsBillOfLading.lookupInventTransRefId(_formControl))
super(_formControl, _filterStr);
}
Form Lookup Form : Example in SalesTable.
-----------------------------------------
public void lookup(FormControl _formControl, str _filterStr)
{
Args args;
FormRun formRun;
;
// PBa
if (PBAParameters::find().LookupMethod == PBALookupMethod::Configurable)
{
args = new Args(formstr(PBAItemIdLookup));
args.caller(element);
args.record(salesLine);
formRun = classfactory.formRunClass(args);
formRun.init();
this.performFormLookup(formRun, _formControl);
}
else
super(_formControl, _filterStr);
}
Lookup with group by in a string edit
public void lookup()
{
;
table1::SPLLookupOprId(this,projId);
}
static void SPLLookupOprId(FormStringControl ctrl,ProjId _projId)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(table1), ctrl);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
;
if (!_projId)
return;
sysTableLookup.addLookupfield(fieldnum(table1, OprID)); //return this field event if it isn't the key. (Checked!!!, good)
queryBuildDataSource = query.addDataSource(tablenum(table1));
queryBuildDataSource.addGroupByField(fieldnum(table1, OprID));
queryBuildDataSource.addSortField(fieldnum(table1, OprID), SortOrder::Ascending);
queryBuildRange = queryBuildDataSource.addRange(fieldnum(table1,ProjID));
queryBuildRange.value(Queryvalue(_projId));
queryBuildRange = queryBuildDataSource.addRange(fieldnum(table1,ProjID));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
Lookup
// to avoid the problem that the lookup doesn't work :
public void lookup()
{
;
oprIdFilter.text(""); //We put null in the field before the lookup
table1::SPLLookupOprId(this,projId);
}
Lookup on a string edit for filter
On a string Edit
Lookup on a real edit for filter
// the type of control is FormRealControl !!!!!
static void SPLLookupDiraNum(FormRealControl ctrl,ProjId _projId)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(OferKablanConstructionOnAccount), ctrl);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
;
if (!_projId)
return;
SysTableLookup.addLookupfield(fieldnum(OferKablanConstructionOnAccount, DiraNum));
queryBuildDataSource = query.addDataSource(tablenum(OferKablanConstructionOnAccount));
queryBuildDataSource.addGroupByField(fieldnum(OferKablanConstructionOnAccount, DiraNum));
queryBuildDataSource.addSortField(fieldnum(OferKablanConstructionOnAccount, DiraNum), SortOrder::Ascending);
queryBuildRange = queryBuildDataSource.addRange(fieldnum(OferKablanConstructionOnAccount,ProjID));
queryBuildRange.value(Queryvalue(_projId));
queryBuildRange = queryBuildDataSource.addRange(fieldnum(OferKablanConstructionOnAccount,ProjID));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
// We need to change the standard method of the class
void performFormLookup()
{
FormStringControl callingStringControl;
FormIntControl callingIntControl;
FormInt64Control callingInt64Control;
FormDateControl callingDateControl;
;
if (!callingControl)
throw(error(Error::wrongUseOfFunction(funcname())));
switch (callingControl.handle())
{
case classnum(FormStringControl):
callingStringControl = callingControl;
callingStringControl.performFormLookup(this.formRun());
break;
case classnum(FormIntControl):
callingIntControl = callingControl;
callingIntControl.performFormLookup(this.formRun());
break;
case classnum(FormInt64Control):
callingInt64Control = callingControl;
callingInt64Control.performFormLookup(this.formRun());
break;
case classnum(FormDateControl):
callingDateControl = callingControl;
callingDateControl.performFormLookup(this.formRun());
break;
// 04/05/2017-BEGIN
case classnum(FormRealControl):
callingDateControl = callingControl;
callingDateControl.performFormLookup(this.formRun());
break;
// 04/05/2017-END
}
}
How works the auto Lookup
//By default if there is nothing in the group autoLookup, the lookup take
//all the fields of the key.
On a string Edit