Informationen
Wiederholende Funktionalitäten sollten in der Regel immer ausgelagert werden, während selbstständige und themenfremde Funktionalitäten von Fall zu Fall zu entscheiden sind. Durch das Auslagern von Code ist dieser gut wiederverendbar, lesbar und wartbar. Zudem lässt sich so Zeit bei Änderungen einsparen.
Beispiel für wiederholende Funktionalitäten
Falsch:
Width - OnValidate() Volume := Width * Height * Length; Height - OnValidate() Volume := Width * Height * Length; Length - OnValidate() Volume := Width * Height * Length;
Richtig:
Width - OnValidate() CalculateVolume; Height - OnValidate() CalculateVolume; Length - OnValidate() CalculateVolume; CalculateVolume(); Volume := Width * Height * Length;
Beispiel für selbstständige Funktionalitäten
Falsch:
PostDocument(VAR Rec : Record "Sales Header")
// SalesLines filtern
SalesLine.SETRANGE("Document Type",SalesHeader."Document Type");
SalesLine.SETRANGE("Document No.",SalesHeader."No.");
// SalesLines prüfen
SalesLine.FINDSET;
REPEAT
IF SalesLine.Type <> SalesLine.Type::" " THEN BEGIN
SalesLine.TESTFIELD("No.");
[...] //tausende weitere Tests
SalesLine.TESTFIELD(Quantity);
END;
UNTIL SalesLine.NEXT = 0;
// SalesHeader prüfen
SalesHeader.TESTFIELD("External Document No.");
[...] //tausende weitere Tests
SalesHeader.TESTFIELD("Sell-to Customer No.");
// SalesHeader freigeben
SalesHeader.Status := SalesHeader.Status::Released;
SalesHeader.MODIFY;
// Buchen
SalesPost.SETMODE(TRUE);
SalesPost.RUN(SalesHeader);
Richtig:
PostDocument(VAR Rec : Record "Sales Header") CheckDocument(Rec); ReleaseDocument(Rec); PostDocument(Rec);
Beispiel für themenfremde Funktionalitäten
Falsch:
ReleaseSalesHeader(VAR Rec : Record "Sales Header")
[...]
// Erstelle EDI Dokument
EDIDocument.INIT;
EDIDocument."No. Series" := EDISetup."Order Nos.";
EDIDocument."No." := NoSeriesMgt.GetNextNo2(
EDIDocument."No. Series",
'',
'',
0D);
EDIDocument.INSERT(TRUE);
EDIDocument."Description" :=
FORMAT(SalesHeader."Document Type") + " " +
SalesHeader."No.";
[...]
EDIDocument.MODIFY(TRUE);
SalesLine.FINDSET;
REPEAT
EDIDocumentLine.INIT;
[...]
EDIDocumentLine.INSERT;
[...]
EDIDocumentLine.MODIFY;
UNTIL SalesLine.NEXT = 0;
// EDI Dokument freigeben
EDIDocument.TESTFIELD(Description);
[...]
EDIDocument.Status := EDIDocument.Status::Released;
EDIDocument.MODIFY;
// EDI Dokument versenden/für FTP-Versand abspeichern
EDIDocument.SaveToFile('C:\EDI\Outbound');
Richtig:
ReleaseSalesHeader(VAR Rec : Record "Sales Header") [...] EDIDocNo := EDIMgt.CreateOrderFromSalesDoc(Rec); EDIMgt.CheckAndRelease(EDIDocNo); EIDMgt.Send(EDIDocNo);