Creazione di elenchi di Gestione ruolo utente

Completato

Quando si sviluppa un nuovo Gestione ruolo utente, è possibile usare i relativi elenchi per presentare alle persone i dati che possono usare quotidianamente. Nell'elenco Clienti personali gli utenti possono accedere ai clienti con i quali collaborano di frequente.

Screenshot dell'elenco Clienti personali.

Molti di questi elenchi Elementi personali sono disponibili nell'applicazione. A seconda delle personalizzazioni, si potrebbe voler presentare all'utente elenchi diversi.

Per usare un elenco di Gestione ruolo utente, è necessaria anche una tabella per l'archiviazione dei dati. Il frammento di codice seguente mostra una tabella Cliente personale di esempio, usata per l'elenco Clienti personali. Quando aggiunge un cliente all'elenco, l'utente riceverà i dettagli del cliente e sarà possibile impostare i campi corrispondenti tramite la procedura SetCustomerFields.

table 9150 "My Customer"
{
    fields
    {
        field(1; "User ID"; Code[50])
        {
            TableRelation = User."User Name";
        }
        field(2; "Customer No."; Code[20])
        {
            NotBlank = true;
            TableRelation = Customer;

            trigger OnValidate()
            begin
                SetCustomerFields();
            end;
        }
        field(3; Name; Text[100])
        {
            Editable = false;
        }
        field(4; "Phone No."; Text[30])
        {
            Editable = false;
        }
        field(5; "Balance (LCY)"; Decimal)
        {
            CalcFormula = Sum ("Detailed Cust. Ledg. Entry"."Amount (LCY)" 
                          where("Customer No." = field("Customer No.")));
            Editable = false;
            FieldClass = FlowField;
        }
    }

    keys
    {
        key(Key1; "User ID", "Customer No.")
        {
            Clustered = true;
        }
        ...
    }

    procedure SetCustomerFields()
    var
        Customer: Record Customer;
    begin
        if Customer.Get("Customer No.") then begin
            Name := Customer.Name;
            "Phone No." := Customer."Phone No.";
        end;
    end;
}

La chiave primaria è una chiave combinata con i campi ID utente e Nr. cliente. Pertanto, più utenti possono selezionare lo stesso cliente preferito nei propri elenchi. Anche la pagina corrispondente è semplice da creare. Nel frammento che segue, i campi Name e Phone No. vengono confrontati ogni volta con il record corrente nel database. Se il campo Name o Phone No. del record del cliente è cambiato, viene aggiornato nella tabella My Customer. Nel trigger OnOpenPage il set di dati viene filtrato per mostrare solo i record per l'utente corrente.

page 9150 "My Customers"
{
    PageType = ListPart;
    SourceTable = "My Customer";

    layout
    {
        area(content)
        {
            repeater(Control1)
            {
                field("Customer No."; "Customer No.")
                {
                    trigger OnValidate()
                    begin
                        SyncFieldsWithCustomer();
                    end;
                }
                field(Name; Name)
                {
                }
                field("Phone No."; "Phone No.")
                {
                }
                field("Balance (LCY)"; "Balance (LCY)")
                {
                }
            }
        }
    }

    actions
    {
        area(processing)
        {
            action(Open)
            {
                RunObject = Page "Customer Card";
                RunPageLink = "No." = field("Customer No.");
                RunPageMode = View;
                RunPageView = Sorting("No.");
            }
        }
    }

    trigger OnAfterGetRecord()
    begin
        SyncFieldsWithCustomer();
    end;

    trigger OnNewRecord(BelowxRec: Boolean)
    begin
        Clear(Customer);
    end;

    trigger OnOpenPage()
    begin
        SetRange("User ID", UserId());
    end;

    var
        Customer: Record Customer;

    local procedure SyncFieldsWithCustomer()
    var
        MyCustomer: Record "My Customer";
    begin
        Clear(Customer);

        if Customer.Get("Customer No.") then
            if (Name <> Customer.Name) or 
               ("Phone No." <> Customer."Phone No.") then begin
                Name := Customer.Name;
                "Phone No." := Customer."Phone No.";
                if MyCustomer.Get("User ID", "Customer No.") then
                    Modify();
            end;
    end;
}