And also, very often we'll have to customize the contents of the lookup, or filter them. We can do this by using the SysReferenceTableLookup class.
So go to your form's data source and find the reference field for which you want to perform the lookup. Override its lookupReference method.
The use of the SysReferenceTableLookup is very similar to the SysTableLookup: we construct a Query, add data sources and ranges to it, and then pass it to the SysReferenceTableLookup object, like the code below:
public Common lookupReference(FormReferenceControl _formReferenceControl) { SysReferenceTableLookup sysRefTableLookup; Query lookupQuery = new Query(); QueryBuildDataSource lookupQueryDataSource; // Construct the SysRefTableLookup object sysRefTableLookup = SysReferenceTableLookup::newParameters(tableNum(MyTable), _formReferenceControl) // Add the field list that will be displayed on the lookup form sysRefTableLookup.addLookupfield(fieldNum(MyTable, MyFirstField)); sysRefTableLookup.addLookupfield(fieldNum(MyTable, MySecondField)); // Construct the query's data source lookupQueryDataSource = lookupQuery.addDataSource(tableNum(MyTable)); // Add ranges to the query data source lookupQueryDataSource.addRange(fieldNum(MyTable, MyFirstField)).value(queryValue('Foo')); lookupQueryDataSource.addRange(fieldNum(MyTable, MySecondField)).value(queryNotValue('')); // Pass the query to the lookup object sysRefTableLookup.parmQuery(lookupQuery); return sysRefTableLookup.performFormLookup(); }
Unlike the SysTableLookup, the SysReferenceTableLookup returns an object of type Common which is the record the user selected on the lookup.
For this example I created the lookup logic directly on the form, but you could always create a lookup method directly on your table, and then make the control's lookup method call the table one. It's entirely up to you.
Just don't forget to validate the user input, because filtering the lookup does not stop the user from typing in a value on the control instead of selecting the record on the lookup. You could do it by overriding the control's validate method or directly on the table with the validateField method.
Good post! We are linking to this great post on our website.
ReplyDeleteKeep up the good writing.
My blog post :: cellulit na nogach
Thank you man
ReplyDeleteThanks!
ReplyDelete