Codeunit 9150 My Records Filter Sub., source in 29

Source29

src/Layers/W1/BaseApp/RoleCenters/MyRecordsFilterSub.Codeunit.al95 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.RoleCenters;

using Microsoft.Inventory.Item;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
using System.Text;

codeunit 9150 "My Records Filter Sub."
{

    trigger OnRun()
    begin
    end;

    var
        MyCustomersTxt: Label 'MYCUSTOMERS', Comment = 'Must be uppercase';
        MyItemsTxt: Label 'MYITEMS', Comment = 'Must be uppercase';
        MyVendorsTxt: Label 'MYVENDORS', Comment = 'Must be uppercase';
        OverflowMsg: Label 'The filter contains more than 2000 numbers and has been truncated.';

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Filter Tokens", 'OnResolveTextFilterToken', '', false, false)]
    local procedure DoOnResolveTextFilterToken(TextToken: Text; var TextFilter: Text; var Handled: Boolean)
    begin
        case TextToken of
            CopyStr('MYCUSTOMERS', 1, StrLen(TextToken)), CopyStr(MyCustomersTxt, 1, StrLen(TextToken)):
                begin
                    GetMyFilterText(TextFilter, DATABASE::"My Customer");
                    Handled := true;
                end;
            CopyStr('MYITEMS', 1, StrLen(TextToken)), CopyStr(MyItemsTxt, 1, StrLen(TextToken)):
                begin
                    GetMyFilterText(TextFilter, DATABASE::"My Item");
                    Handled := true;
                end;
            CopyStr('MYVENDORS', 1, StrLen(TextToken)), CopyStr(MyVendorsTxt, 1, StrLen(TextToken)):
                begin
                    GetMyFilterText(TextFilter, DATABASE::"My Vendor");
                    Handled := true;
                end;
        end;
    end;

    procedure GetMyFilterText(var TextFilterText: Text; MyTableNo: Integer)
    var
        RecRef: RecordRef;
        FieldRef: FieldRef;
        NoOfValues: Integer;
        IsHandled: Boolean;
        IsMyTable: Boolean;
    begin
        IsHandled := false;
        IsMyTable := MyTableNo in [DATABASE::"My Customer", DATABASE::"My Vendor", DATABASE::"My Item"];
        OnBeforeGetMyFilterText(TextFilterText, MyTableNo, IsMyTable, IsHandled);
        if IsHandled then
            exit;

        if not IsMyTable then
            exit;

        TextFilterText := '';
        NoOfValues := 0;
        RecRef.Open(MyTableNo);
        FieldRef := RecRef.Field(1);
        FieldRef.SetRange(UserId);
        if RecRef.Find('-') then
            repeat
                FieldRef := RecRef.Field(2);
                AddToFilter(TextFilterText, Format(FieldRef.Value));
                NoOfValues += 1;
            until (RecRef.Next() = 0) or (NoOfValues > 2000);
        RecRef.Close();

        if NoOfValues > 2000 then
            Message(OverflowMsg);
    end;

    local procedure AddToFilter(var FilterString: Text; MyNo: Code[20])
    begin
        if FilterString = '' then
            FilterString := MyNo
        else
            FilterString += '|' + MyNo;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetMyFilterText(var TextFilterText: Text; MyTableNo: Integer; var IsMyTable: Boolean; var IsHandled: Boolean)
    begin
    end;
}