Filters are conditional expressions contained within the parentheses following the Dataset or Record Set name. Multiple filter conditions may be specified by separating each filter expression with a comma (,). All filter conditions separated by commas must be TRUE for a record to be included, which makes the comma an implicit AND operator (see Logical Operators) in this context only.
MyRecordSet := Person(per_last_name >= 'T', per_last_name < 'U');
// MyRecordSet contains people whose last name begins with "T"
// the comma is an implicit AND while also functioning as
// an expression separator (implicit parentheses)
MyRecordSet := Person(per_last_name >= 'T' AND per_last_name < 'U');
// exactly the same logical expression as above
RateGE7trds := Trades(trd_rate >= '7');
ValidTrades := Trades(NOT rmsTrade.Mortgage AND
NOT rmsTrade.HasNarrative(rmsTrade.snClosed));Boolean definitions should be used as recordset filters for maximum flexibility, readability and re-usability instead of hard-coding in a Record Set definition. For example, use:
IsRevolv := trades.trd_type = 'R'
OR (~ValidType(trades.trd_type)
AND trades.trd_acct[1] IN ['4','5','6']);
isBank := trades.trd_ind_code IN SetBankIndCodes;
IsBankCard := IsBank AND IsRevolv;
WithinDate(INTEGER1 months) := ValidDate(trades.trd_drpt) AND
trades.trd_drpt_mos <= months;
BankCardTrades := trades(isBankCard AND WithinDate(6));instead of:
BankCardTrades := trades(trades.trd_ind_code IN SetBankIndCodes,
(trades.trd_type = 'R' OR
(~ValidType(trades.trd_type) AND
trades.trd_acct[1] IN ['4', '5', '6'])),
ValidDate(trades.trd_drpt),
trades.trd_drpt_mos <= 6);Commas used to separate filter conditions in a recordset filter definition act as both an implicit AND operation and a set of parentheses around the individual filters being separated. This results in a tighter binding than if AND is used instead of a comma without parentheses. For example, the filter expression in this definition::
BankMortTrades := trades(isBankCard OR isMortgage, isOpen);
is evaluated as if it were written:
(isBankCard OR isMortgage) AND isOpen
and not as:
isBankCard OR isMortgage AND isOpen