Hi!
I have a problem with using OnLookUp Event Handler.
Here is Standard Code that form name is LedgerJournalTransDaily and field name is editReasonCode.(editReasonCode is not a field, is a method)
[Control("String")]
class editReasonCode
{
///
/// Displays a filtered version of the Reasons lookup form to the user based on the AccountType and the OffsetAccountType.
///
///
/// This method will be called when the user open the reason code lookup form.
///
public void lookup()
{
LedgerJournalACType offsetAccountType;
LedgerJournalACType accountType;
boolean useOffsetAccount;
useOffsetAccount = ledgerJournalTrans.parmOffsetLedgerDimension() ? true : false;
offsetAccountType = ledgerJournalTrans_ds.object(fieldNum(LedgerJournalTrans,OffsetAccountType)).getValue();
accountType = ledgerJournalTrans_ds.object(fieldNum(LedgerJournalTrans,AccountType)).getValue();
ReasonFormTable::reasonCodeLookup(this,offsetAccountType,accountType,true,useOffsetAccount);
}
}
And here is "ReasonFormTable::reasonCodeLookup(this,offsetAccountType,accountType,true,useOffsetAccount);" Code.
public static void reasonCodeLookup(FormControl _formControl,
LedgerJournalACType _offsetAccountType,
LedgerJournalACType _accountMainType,
boolean _useMainAccount = false,
boolean _useOffsetAccount = false,
LedgerJournalACType _accountType = LedgerJournalACType::Ledger,
boolean _useAccountType = false)
{
Query query = new Query();
QueryBuildDataSource dsReasonTable;
// Instantiate sysTableLookup object using table which will provide the visible fields
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(ReasonTable), _formControl);
// Create the query
dsReasonTable = query.addDataSource(tableNum(ReasonTable));
if(_useMainAccount)
{
ReasonFormTable::setAccountRange(_accountMainType, dsReasonTable);
}
if (_useOffsetAccount)
{
ReasonFormTable::setAccountRange(_offsetAccountType, dsReasonTable);
}
if (_useAccountType)
{
ReasonFormTable::setAccountRange(_accountType, dsReasonTable);
}
// Set the query to be used by the lookup form
sysTableLookup.parmQuery(query);
// Specify the fields to show in the form
sysTableLookup.addLookupfield(fieldNum(ReasonTable, Reason));
sysTableLookup.addLookupfield(fieldNum(ReasonTable, Description));
// Perform the lookup
sysTableLookup.performFormLookup();
}
And, I want to add a condition in LookUp logic.
So, I copy the eventHandler according to the editReasonCode field.
Here is my eventHandler Code.
[FormControlEventHandler(formControlStr(LedgerJournalTransDaily, editReasonCode), FormControlEventType::Lookup)]
public static void editReasonCode_OnLookup(FormControl sender, FormControlEventArgs e)
{
//FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
FormRun formRun = sender.formRun();
FormDataSource fds = formRun.dataSource(formDataSourceStr(LedgerJournalTransDaily, LedgerJournalTrans));
LedgerJournalTrans trans = fds.cursor();
LedgerJournalTable table = LedgerJournalTable::find(trans.JournalNum);
LedgerJournalName name = LedgerJournalName::find(table.JournalName);
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(ReasonTable), sender);
QueryBuildDataSource qdbs;
Query query;
Info("1");
qdbs = query.addDataSource(tableNum(ReasonTable));
if(name.SKEP_CarExpense == NoYes::Yes)
{
qdbs.addRange(fieldNum(ReasonTable,SKEP_RelatedToCarExpense)).value(queryValue(NoYes::Yes));
}
sysTableLookup.parmQuery(query);
sysTableLookup.addLookupfield(fieldNum(ReasonTable, Reason));
sysTableLookup.addLookupfield(fieldNum(ReasonTable, Description));
sysTableLookup.performFormLookup();
//ce.CancelSuperCall();
}
I think this is the correct code. But when debugging the code, It doesn't work.
I add a breakpoint in eventHandler Code. nevertheless, it can't.
Does Method field something different from field LookUp?
Plz, Help!