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);