[Gelöst]Codeunit und procedure

28. Mai 2024 18:13

Immer bei lernen , habe folgende code geschrieben:

Code:
codeunit 50112 CodeunitEsempio03
{
    Access = Public;
    Subtype = Normal;

    procedure DisplayName(Name: Text[20]): Record Customer
    var
        Customer: record Customer;
    begin
        Customer.SetFilter(Name, '@' + Name + '*');
        Customer.FindFirst();
        exit(Customer);
    end;

}

page 50112 PageCodeunitEsempio03
{
    PageType = Card;
    ApplicationArea = All;
    UsageCategory = Administration;
    Caption = 'Search for Name';
   
    layout
    {
        area(Content)
        {
            group(Input)
            {
                Caption = 'Search for Name';
                field(Name; Name)
                {
                    ApplicationArea = All;
                    Caption = 'Name';
                    ToolTip = 'Enter the Name you want to find';
                   
                }
            }
        }
    }
   
    actions
    {
        area(Processing)
        {
            action(Level)
            {
                ApplicationArea = All;
                Caption = 'Find your Name';
                RunObject = codeunit CodeunitEsempio03;
                trigger OnAction()               
                var
                    InsertName: codeunit CodeunitEsempio03;
                begin
                    InsertName.DisplayName(Name);
                end;               
            }
        }
    }
   
    var
        Name: Text[20];
}


Meine Idee war es, dem Benutzer die Möglichkeit zu geben, einen Namen in die PAGE einzugeben, um ihn in der Kundendatenbank zu suchen, aber beim Eingeben des Namens wird nichts gefunden.
VScode zeigt keine Fehler an.

Ich habe einen ähnlichen Code geschrieben, aber mit einer Ganzzahl anstelle eines Textes als Variable, und der Code funktioniert.

Code:
codeunit 50111 LevelCodeunit02
{
    Access = Public;
    Subtype = Normal;

    procedure DisplayALevel(Number: Integer)
   
    begin
        case Number of
        1..10:
            Message('With ' + Format(Number) +' your Level is A');
        11..20:
            Message('With ' + Format(Number) +' your Level is B');
        21..30:
            Message('With ' + Format(Number) +' your Level is C');
    else
        Message('Unknown Level');
    end;
end;

}

page 50111 LevelPage02
{
    PageType = Card;
    ApplicationArea = All;
    UsageCategory = Administration;
    Caption = 'Level Page 2';
   
    layout
    {
        area(Content)
        {
            group(Input)
            {
                Caption = 'Number Selection';
                field(Number; Number)
                {
                    ApplicationArea = All;
                    Caption = 'Number';
                    ToolTip = 'Enter your Number';
                   
                }
            }
        }
    }
   
    actions
    {
        area(Processing)
        {
            action(Level)
            {
                ApplicationArea = All;
                Caption = 'Find your Level';
                RunObject = codeunit LevelCodeunit02;
                trigger OnAction()                 
                var
                    InsertNumber: codeunit LevelCodeunit02;
                begin
                    InsertNumber.DisplayALevel(Number);
                end;

               
               
            }
        }
    }
   
    var
        Number: Integer;
}


Vielen Dank im Voraus an diejenigen, die mir eine Erklärung geben können.
Zuletzt geändert von TheBugDeveloper am 29. Mai 2024 16:48, insgesamt 1-mal geändert.

Re: Codeunit und procedure

28. Mai 2024 19:27

Mal abgesehen von der Sinnhaftigkeit der Aktion - ich nehme an du willst nur Programmierung ausprobieren - du filterst ja nur auf Name* also muss der Anfang des Namens stimmen - Absicht? Aber der Fehler liegt daran dass du den Record Customer zurückgibst, mit dem aber dann nix machst. Sinnvoller wäre es wohl die Debitornummer zurückzugeben und in der Page Action z. B. Message(InsertName.DisplayName(Name));

Re: Codeunit und procedure

28. Mai 2024 20:00

Ja, natürlich, es war nur zum Ausprobieren; der geschriebene Code hat keinen praktischen Sinn.
Jetzt hast du mich aber auf den Fehler hingewiesen... die abgerufenen Daten werden nirgendwo verwendet, weil ich keine Nachricht (oder irgendeine Verwendung) generiert habe.

Probiere zu korregieren und gebe dir Bescheid.

Danke

Re: Codeunit und procedure

29. Mai 2024 00:31

Ich habe die Procedure so geändert

Code:
 procedure DisplayName(Name: Text[20]): Record Customer
    var
        Customer: record Customer;
    begin
       
        Customer.SetFilter(Name, '@' + Name + '*');
        if (Customer.FindFirst()) then
            Message('The Name is: ' + Format(Name))
        else
            Message('The Name is not found');
        exit(Customer);
                   
    end;


und natürlich hat funktioniert.

Jetzt wollte ich etwas Nützlicheres schreiben: nämlich die Eingabe der CustomerNumber in die PAGE, damit dieser Wert in der Datenbank gesucht wird und der Name des Kunden zurückgegeben wird.
Code:
codeunit 50113 CodeunitEsempio04
{
    Access = Public;
    Subtype = Normal;

    procedure DisplayName(CustomerNumber: Code[20]): Record Customer
    var
        Customer: record Customer;
    begin
       
        //Customer.SetFilter("No.");
        if (Customer."No." = CustomerNumber) then
            Message('The Customer Name is: ' + Format(Customer.Name))
        else
            Message('Customer not found');
        exit(Customer);
                   
    end;
 

}

page 50113 PageCodeunitEsempio04
{
    PageType = Card;
    ApplicationArea = All;
    UsageCategory = Administration;
    Caption = 'Search for Name 2';
   
    layout
    {
        area(Content)
        {
            group(Input)
            {
                Caption = 'Search for Name';
                field(CustomerNumber; CustomerNumber)
                {
                    ApplicationArea = All;
                    Caption = 'Number';
                    ToolTip = 'Enter the Customer Number';
                   
                }
            }
        }
    }
   
    actions
    {
        area(Processing)
        {
            action(Level)
            {
                ApplicationArea = All;
                Caption = 'Find your Name';
                RunObject = codeunit CodeunitEsempio04;
                trigger OnAction()                 
                var
                    InsertNumber: codeunit CodeunitEsempio04;
                begin
                    InsertNumber.DisplayName(CustomerNumber);
                end;               
            }
        }
    }
   
    var
        CustomerNumber: Code[20];
}

Aber ich mache etwas falsch (ich glaube, ich versuche etwas zu machen, das über meine aktuellen Kenntnisse hinausgeht).

Re: Codeunit und procedure

29. Mai 2024 09:51

In der Codeunit/Procedure müsstest du ja noch die Debitoren filtern, also z. B.:
Customer.SetFilter("No.",CustomerNumber);
if Customer.FindFirst() then
Message('gefunden')
else
Message('nicht gefunden');

Re: [Gelöst]Codeunit und procedure

29. Mai 2024 16:48

Vielen Dank