Seite 1 von 1

[gelöst] Für jeden Error eine Message ausgeben

Verfasst: 21. Dezember 2012 16:47
von mpetersen
HI,

ich hab folgendes Problem:

Ich habe in einem Trigger eine Programmierung gemacht, die einen Lagerplatz in mehreren Tabellen per VALIDATE ändern soll. Sollte es dabei einen Error geben, soll die Verarbeitung aber nicht abbrechen, sondern es soll eine MESSAGE ausgegeben werden und zwar jedes Mal, wenn ein Error auftritt.
Meine Programmierung sieht wie folgt aus:

OnValidate wird folgendes ausgeführt:
Code:
IF (xRec.Default <> Default) AND Default THEN BEGIN
  ChangeBinCode("Item No.","Variant Code","Location Code","Bin Code");
END;


Danach folgt die Funktion ChangeBinCode:

Code:
SalesLine.RESET;
SalesLine.SETRANGE(Type,SalesLine.Type::Item);
SalesLine.SETRANGE("No.",ItemNo);
SalesLine.SETRANGE("Variant Code",Variant);
SalesLine.SETFILTER("Location Code",'%1|''''',Location);
IF SalesLine.FINDFIRST THEN BEGIN
  REPEAT
    ChangeBin.SetSalesLine(SalesLine);
    IF NOT ChangeBin.RUN THEN
      MESSAGE(Text50000,SalesLine."Document Type",SalesLine."Document No.",SalesLine."Line No.");
  UNTIL SalesLine.NEXT = 0;
END;

PurchLine.RESET;
PurchLine.SETRANGE(Type,PurchLine.Type::Item);
PurchLine.SETRANGE("No.",ItemNo);
PurchLine.SETRANGE("Variant Code",Variant);
PurchLine.SETFILTER("Location Code",'%1|''''',Location);
IF PurchLine.FINDFIRST THEN BEGIN
  REPEAT
    ChangeBin.SetPurchLine(PurchLine);
    IF NOT ChangeBin.RUN THEN
      MESSAGE(Text50000,PurchLine."Document Type",PurchLine."Document No.",PurchLine."Line No.");
  UNTIL PurchLine.NEXT = 0;
END;


Als Beispiel mal die Verarbeitung, wenn sie über Sales Line und Purchase Line läuft.

Das Problem ist aber, sobald er auf mehrere Errors stößt, bekomme ich trotzdem immer nur eine Message angezeigt, obwohl ich mehrere haben wollte.

Hat jemand eine Idee, was ich machen muss?

Re: Für jeden Error eine Message ausgeben

Verfasst: 21. Dezember 2012 17:03
von Natalie
Ich bin mir nicht 100%ig sicher, was genau nun das Phänomen auslöst, aber zwei Dinge würde ich in jedem Fall machen:

1) nach jedem REPEAT zunächst die Codeunit intialisieren: CLEAR(ChangeBin)
2) Ersetze MESSAGE durch CONFIRM. Nur dann wird die Meldung ausgegeben, sobald sie auftritt. MESSAGE wartet ab, bis die gesamte Transaktion vorbei ist und holt dann quasi nach.

Re: Für jeden Error eine Message ausgeben

Verfasst: 28. Dezember 2012 09:06
von mpetersen
Hi,

danke für deine Antwort, hat jedoch beides nicht geholfen.
Hab jetzt einen anderen Weg gewählt, und zwar anstatt jedes mal eine Message auszugeben, schreibe ich die Informationen in eine temporäre Tabelle weg und lasse nach meiner Verarbeitung ein Repeat until über diese laufen und lass da für jeden Datensatz eine Message ausgeben.
So funktionierte es.