Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
SaskuAc
wobei ich nicht glaube, das Leute, die keine Erfahrung mit HR haben, hier wohl eher nicht drauf gehen. ( der Titel ist dann schon recht spezifisch .. ^^ )a-dead-trousers hat geschrieben:Das ist jetzt nur als Vorwarnung zu verstehen.
Leider kann ich dir bei deinem konkreten Problem in HR keine Tipps geben.
Ich hoffe aber du weißt, was du hier gerade losgetreten hast.
Die Diskussionen die hier im Forum immer wieder ausbrechen zum Thema OO oder klassisch prozedural können ganze Bibliotheken füllen.
Öhhhhm..... Bitte was?cgreiner hat geschrieben:c) objekt-orientiert, auch als Funktionsbaustein
klappt nicht:ralf.wenzel hat geschrieben:Am Postfach kann es nicht liegen - "Ordner ist zu 6% voll (6 von 100 Nachrichten gespeichert)"
Ralf
Hallo Wolfgang,wreichelt hat geschrieben:Hallo,
den aktuellen Plan gibt es hier:
https://www.bundesfinanzministerium.de/ ... -2019.html
hab sowas schon mal in COBOL gemacht.
Gruß Wolfgang
Ja, weil die Anwendungen immer komplexer und anspruchsvoller werden. Der Batch-Input ist halt nicht mehr gefragt und ab einer gewissen Komplexität lohnt sich das. Außerdem muss man das zunehmend in OO geschriebene Coding der SAP verstehen können, wozu (oft auch massive) OO-Kenntnisse erforderlich sind. Ich hatte aber auch schon Fälle, wo ich gefragt wurde, ob ich auch "ABAP-Null-Null" kann. Ohne Witz. Das sind dann Leute, die haben was gesehen und wollen das auch.cgreiner hat geschrieben:Auf keinen Fall wollte ich eine Diskussion über konventionelle und objekt-orientierte Programmierung anstoßen, glaubt man aber den Anzeigen und Personalvermittler in SAP-Umfeld sind hauptsächlich OO-Entwickler gefragt, weil jeder auf den Zug aufspringen will.
Das ist eben die Frage, ob es performant ist, denn mit solch eierlegender Wollmilchsauklasse liest Du - genau wie die SAP mit ihren Funktionsbausteinen - in aller Regel deutlich mehr Daten als die, die Du im jeweiligen Kontext gerade brauchst. Ich sehe den Nutzen, bin aber vorsichtig mit dem extremen Jubel. Ein SELECT ist schnell programmiert, auch nicht lang, ohne Studium eines Methodeninterfaces gut verständlich und liest dann genau das, was Du im jeweiligen Kontext brauchst.saskuac hat geschrieben:Jetzt können wir aber alles was zu einem Mitarbeiter, einem OM-Objekt, einem EREC-Objekt, usw. gehört, innerhalb einer Zeile abbilden und es ist auch noch performant!
Ich gebe dir zwar recht, dass ein select schnell programmiert und performanter ist. Vorausgesetzt man programmiert den richtig. Und man macht davor noch eine Berechtigungsprüfung .. Nun haben wir einen haufen Entwickler welche das nicht machen. Da wird vergessen im select aufs Datum einzugrenzen und machen danach einen loop über die interne Tabelle und prüfen dort dann aufs datum. Das macht es einerseits unnötig kompliziert und gleichzeitig wird dann die performance erheblich schlechter.DeathAndPain hat geschrieben:Das ist eben die Frage, ob es performant ist, denn mit solch eierlegender Wollmilchsauklasse liest Du - genau wie die SAP mit ihren Funktionsbausteinen - in aller Regel deutlich mehr Daten als die, die Du im jeweiligen Kontext gerade brauchst. Ich sehe den Nutzen, bin aber vorsichtig mit dem extremen Jubel. Ein SELECT ist schnell programmiert, auch nicht lang, ohne Studium eines Methodeninterfaces gut verständlich und liest dann genau das, was Du im jeweiligen Kontext brauchst.saskuac hat geschrieben:Jetzt können wir aber alles was zu einem Mitarbeiter, einem OM-Objekt, einem EREC-Objekt, usw. gehört, innerhalb einer Zeile abbilden und es ist auch noch performant!
Fragt sich nur, was der Vorteil ist. Mit einem SELECT kann man nämlich auch punktgenau selektieren , und einen einzelnen Befehl (nämlich SELECT) in ein Konstrukt zu kapseln, dessen größter Vorteil es ist, (im günstigsten Fall) das zu können, was der eine Befehl auch kann, finde ich eine äußerst zweifelhafte Entscheidung.Ralf hat geschrieben:Ein SELECT ist schnell programmiert, eine generische Persistenzschicht ist etwas mehr Arbeit, ist aber wiederverwendbar und kann punktgenau selektieren, wenn man weiß, wie man sowas macht.
Wenn Du Deine Datenzugriffe nicht vernünftig programmierst, dann ist Dein Code so oder so Mist. Ich gebe Dir recht, dass man in dem Bereich sehr häufig Schlamperei sieht. Aber ich behaupte, Schlamperei bekommt man mit einem Methodenaufruf auch hin. (Das halte ich für einen der verbreitetsten Trugschlüsse unter OO-Apologeten, dass OO für besseren Code sorgen würde, indem es die Leute dazu zwingt, sauberer zu arbeiten. Ich halte eher das Gegenteil für zutreffend, denn wenn man mit den OO-Konstrukten schlampig umgeht, dann hat ein anderer hinterher noch viel weniger eine Chance, da durchzusehen, als wenn man dasselbe mit herkömmlicher prozeduraler Programmierung macht.)SaskuAc hat geschrieben:Ich gebe dir zwar recht, dass ein select schnell programmiert und performanter ist. Vorausgesetzt man programmiert den richtig.
Tatsächlich braucht man die in sehr vielen Fällen nicht wirklich, weil die gelesenen Daten nach meiner Erfahrung in den meisten Fällen nicht berechtigungskritisch sind. Und das sage ich als jemand, der (wie Du) im HCM unterwegs ist, wo Berechtigungen generell eine große Rolle spielen.SaskuAc hat geschrieben:Und man macht davor noch eine Berechtigungsprüfung ..
Das grundsätzliche Problem, das Du Dir damit einhandelst, ist, dass jemand, der den Code liest, verstehen muss, was Deine Klasse macht. Ggf. muss er sich in die Doku Deiner Klasse einlesen oder gar in den Quelltext schauen, wie genau Deine Datumsparameter zu interpretieren sind etc. Das ist eben die Sache mit Methoden: Sie sind eine Form von selbstprogrammierten Befehlen, was bedeutet, dass niemand sie kennt, obwohl er ABAP kann. Noch schlimmer wird es, wenn da ein Bug drin ist, denn dann weißt Du nie genau, ob das wirklich ein Bug ist oder ob Du nur das Sollverhalten der Methode nicht richtig verstanden hast. Bei ABAP-Befehlen stellt sich diese Frage so gut wie gar nicht; da kennst Du das Sollverhalten ganz genau.SaskuAc hat geschrieben:Aber allgemein haben wir die Klasse schon so programmiert, dass die performance sehr gut ist und nur das selektiert was man braucht. ( wie gesagt, wir haben eine Herscharr an Klassen entwickelt - damit man nirgends zu viele Daten selektiert, welche nicht gebraucht werden. )
Code: Alles auswählen.
SELECT WERKS BTRTL INTO TABLE M FROM PA0001
WHERE PERNR IN S_PERNR
AND SUBTY = SPACE
AND OBJPS = SPACE
AND SPRPS = SPACE
AND ENDDA >= SY-DATUM
AND BEGDA <= SY-DATUM.
Und dann bekommst Du komische Werte, weil die Daten auf der Datenbank sich inzwischen verändert haben und Deine Klasse aus ihrem veralteten Puffer liefert. Gewiß wirst Du für solche Fälle irgendeine Form von Refresh-Methode vorgesehen haben, aber da steigt doch sofort wieder die Komplexität, und man muss wissen, wie die Pufferung der Klasse genau arbeitet, und wehe, das, was Du über das Sollverhalten der Klassenpufferung zu wissen glaubst, deckt sich nicht zu 100% mit dem, was sie tatsächlich macht.Das schöne ist, die Klassen puffern einwandfrei, heißt, wenn man einmal einen Datensatz gelesen hat, greift die Klasse danach nicht mehr auf die Datenbank zu, sondern puffert alles intern - was dann sogar wieder schneller ist als der direkte Select.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Romaniac
Welchen Teil von "generische Persistenzschicht" hast du nicht verstanden? Es geht nicht darum, jeden einzelnen SELECT zu kapseln, sondern generisch einen SELECT für alle DB-Zugriffe bereitzustellen. Und die Methode, die schließlich den SELECT macht, in einer Unterklasse gegen ein IMPORT FROM DATABASE zu redefinieren, um über dieselbe Persistenzschicht Cluster-Tabellen zu lesen.DeathAndPain hat geschrieben:Fragt sich nur, was der Vorteil ist. Mit einem SELECT kann man nämlich auch punktgenau selektieren , und einen einzelnen Befehl (nämlich SELECT) in ein Konstrukt zu kapseln, dessen größter Vorteil es ist, (im günstigsten Fall) das zu können, was der eine Befehl auch kann, finde ich eine äußerst zweifelhafte Entscheidung.Ralf hat geschrieben:Ein SELECT ist schnell programmiert, eine generische Persistenzschicht ist etwas mehr Arbeit, ist aber wiederverwendbar und kann punktgenau selektieren, wenn man weiß, wie man sowas macht.
Die sind mit dem, womit ich gerade arbeite, nicht im Ansatz vergleichbar.DeathAndPain hat geschrieben:Schau Dir doch die Krücken an, die die SAP da liefert.
Wer hat hier was von "statisch" geschrieben?DeathAndPain hat geschrieben:ob ich einen FB oder eine statische Klasse aufrufe