web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

No record found.

News and Announcements icon
Community site session details

Community site session details

Session Id :

(Human Readable) Text Filters in Dynamics NAV

Nareshwar Raju Vaneshwar Profile Picture Nareshwar Raju Vane... 5,596

 

This is a follow-up post of the previous post about user-based filters and Flowfields. Check it down here:

User-wise filtering in any Master Tables on Dynamics NAV.

What is really interesting is the Text Management (41) Codeunit, you can pass pretty much human readable text on the filtration box of any screen of Dynamics NAV.

The text filters supported are: ‘ME’,’USER’,’COMPANY’, ‘MYCUSTOMERS’,’MYITEMS’, ‘MYVENDORS’.


*****
MakeTextFilter(VAR TextFilterText : Text) : Integer
*****
Position := 1;
Length := STRLEN(TextFilterText);
ReadCharacter(' ',TextFilterText,Position,Length);
IF FindText(PartOfText,TextFilterText,Position,Length) THEN
  CASE PartOfText OF
    COPYSTR('ME',1,STRLEN(PartOfText)),COPYSTR(MeText,1,STRLEN(PartOfText)):
      BEGIN
        Position := Position + STRLEN(PartOfText);
        TextFilterText := USERID;
      END;
    COPYSTR('USER',1,STRLEN(PartOfText)),COPYSTR(UserText,1,STRLEN(PartOfText)):
      BEGIN
        Position := Position + STRLEN(PartOfText);
        TextFilterText := USERID;
      END;
    COPYSTR('COMPANY',1,STRLEN(PartOfText)),COPYSTR(CompanyText,1,STRLEN(PartOfText)):
      BEGIN
        Position := Position + STRLEN(PartOfText);
        TextFilterText := COMPANYNAME;
      END;
    COPYSTR('MYCUSTOMERS',1,STRLEN(PartOfText)),COPYSTR(MyCustomersText,1,STRLEN(PartOfText)):
      BEGIN
        Position := Position + STRLEN(PartOfText);
        GetMyFilterText(TextFilterText,DATABASE::"My Customer");
      END;
    COPYSTR('MYITEMS',1,STRLEN(PartOfText)),COPYSTR(MyItemsText,1,STRLEN(PartOfText)):
      BEGIN
        Position := Position + STRLEN(PartOfText);
        GetMyFilterText(TextFilterText,DATABASE::"My Item");
      END;
    COPYSTR('MYVENDORS',1,STRLEN(PartOfText)),COPYSTR(MyVendorsText,1,STRLEN(PartOfText)):
      BEGIN
        Position := Position + STRLEN(PartOfText);
        GetMyFilterText(TextFilterText,DATABASE::"My Vendor");
      END;
    ELSE
      EXIT(Position);
  END;
EXIT(0);

Also, the same concept can be applied to the date filters.


*****
LOCAL MakeDateFilter2(VAR OK : Boolean;VAR Date1 : Date;VAR Date2 : Date;DateFilterText : Text[1024]) : Integer
*****
IF EVALUATE(DateFormula,DateFilterText) THEN BEGIN
  RemainderOfText := DateFilterText;
  DateFilterText := '';
END ELSE BEGIN
  Position := STRPOS(DateFilterText,'+');
  IF Position = 0 THEN
    Position := STRPOS(DateFilterText,'-');

  IF Position > 0 THEN BEGIN
    RemainderOfText := DELCHR(COPYSTR(DateFilterText,Position));
    IF EVALUATE(DateFormula,RemainderOfText) THEN
      DateFilterText := DELCHR(COPYSTR(DateFilterText,1,Position - 1))
    ELSE
      RemainderOfText := '';
  END;
END;

Position := 1;
Length := STRLEN(DateFilterText);
FindText(PartOfText,DateFilterText,Position,Length);

IF PartOfText <> '' THEN
  CASE PartOfText OF
    COPYSTR('PERIOD',1,STRLEN(PartOfText)),COPYSTR(PeriodText,1,STRLEN(PartOfText)):
      OK := FindPeriod(Date1,Date2,FALSE,DateFilterText,PartOfText,Position,Length);
    COPYSTR('YEAR',1,STRLEN(PartOfText)),COPYSTR(YearText,1,STRLEN(PartOfText)):
      OK := FindPeriod(Date1,Date2,TRUE,DateFilterText,PartOfText,Position,Length);
    COPYSTR('TODAY',1,STRLEN(PartOfText)),COPYSTR(TodayText,1,STRLEN(PartOfText)):
      OK := FindDate(TODAY,Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('WORKDATE',1,STRLEN(PartOfText)),COPYSTR(WorkdateText,1,STRLEN(PartOfText)):
      OK := FindDate(WORKDATE,Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('NOW',1,STRLEN(PartOfText)),COPYSTR(NowText,1,STRLEN(PartOfText)):
      OK := FindDate(DT2DATE(CURRENTDATETIME),Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('YESTERDAY',1,STRLEN(PartOfText)),COPYSTR(YesterdayText,1,STRLEN(PartOfText)):
      OK := FindDate(CALCDATE('<-1D>'),Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('TOMORROW',1,STRLEN(PartOfText)),COPYSTR(TomorrowText,1,STRLEN(PartOfText)):
      OK := FindDate(CALCDATE('<1D>'),Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('WEEK',1,STRLEN(PartOfText)),COPYSTR(WeekText,1,STRLEN(PartOfText)):
      OK := FindDates('<-CW>','<CW>',Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('MONTH',1,STRLEN(PartOfText)),COPYSTR(MonthText,1,STRLEN(PartOfText)):
      OK := FindDates('<-CM>','<CM>',Date1,Date2,DateFilterText,PartOfText,Position,Length);
    COPYSTR('QUARTER',1,STRLEN(PartOfText)),COPYSTR(QuarterText,1,STRLEN(PartOfText)):
      OK := FindDates('<-CQ>','<CQ>',Date1,Date2,DateFilterText,PartOfText,Position,Length);
  END
ELSE
  IF (DateFilterText <> '') AND EVALUATE(Date1,DateFilterText) THEN BEGIN
    Date2 := Date1;
    OK := TRUE;
    Position := 0;
  END ELSE
    IF RemainderOfText <> '' THEN BEGIN
      Date1 := TODAY;
      Date2 := Date1;
      OK := TRUE;
      Position := 0;
    END ELSE
      OK := FALSE;

IF OK AND (RemainderOfText <> '') THEN BEGIN
  Date1 := CALCDATE(DateFormula,Date1);
  Date2 := CALCDATE(DateFormula,Date2);
END;
EXIT(Position);

The date filters supported are: ‘PERIOD’, ‘YEAR’, ‘TODAY’, ‘WORKDATE’, ‘NOW’, ‘YESTERDAY’, ‘TOMORROW’, ‘WEEK’, ‘MONTH’, ‘QUARTER’.


 



This was originally posted here.

Comments

*This post is locked for comments