This week I got a question from one of my book readers about how to convert a SETSELECTIONFILTER to a SETFILTER command.
This is something that is implemented in the standard product on a few list pages. The Customer List page (22) is one of them.
The code is handled in codeunit 46, SelectionFilterManagement
This is the code:
RecRef.OPEN(TempRecRef.NUMBER); TempRecRefCount := TempRecRef.COUNT; IF TempRecRefCount > 0 THEN BEGIN TempRecRef.FIND('-'); WHILE TempRecRefCount > 0 DO BEGIN TempRecRefCount := TempRecRefCount - 1; RecRef.SETPOSITION(TempRecRef.GETPOSITION); RecRef.FIND; FieldRef := RecRef.FIELD(SelectionFieldID); FirstRecRef := FORMAT(FieldRef.VALUE); LastRecRef := FirstRecRef; More := TempRecRefCount > 0; WHILE More DO IF RecRef.NEXT = 0 THEN More := FALSE ELSE BEGIN SavePos := TempRecRef.GETPOSITION; TempRecRef.SETPOSITION(RecRef.GETPOSITION); IF NOT TempRecRef.FIND THEN BEGIN More := FALSE; TempRecRef.SETPOSITION(SavePos); END ELSE BEGIN FieldRef := RecRef.FIELD(SelectionFieldID); LastRecRef := FORMAT(FieldRef.VALUE); TempRecRefCount := TempRecRefCount - 1; IF TempRecRefCount = 0 THEN More := FALSE; END; END; IF SelectionFilter <> '' THEN SelectionFilter := SelectionFilter + '|'; IF FirstRecRef = LastRecRef THEN SelectionFilter := SelectionFilter + AddQuotes(FirstRecRef) ELSE SelectionFilter := SelectionFilter + AddQuotes(FirstRecRef) + '..' + AddQuotes(LastRecRef); IF TempRecRefCount > 0 THEN TempRecRef.NEXT; END; EXIT(SelectionFilter); END;
In older versions than 2013, this code is on the page/form object.
Enjoy!
It is also used on the G/L Account List, and is very useful when creating Account Schedules. It enables the user to simply highlight the accounts required for each line.
LikeLike