AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

Ein Thema von fisipjm · begonnen am 17. Okt 2022 · letzter Beitrag vom 18. Okt 2022
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.174 Beiträge
 
Delphi 12 Athens
 
#1

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 17. Okt 2022, 16:17
Die Anforderung ist für mich etwas unklar formuliert, ich weiss jetzt nicht ob das dynamisch je nach Datenbank-Feldinhalt sein soll,
oder nicht.

Falls es nur um einen dynamischen Aufruf geht, welchen Du je nach Anforderung im Aufruf anpassen möchtest,
dann könntest Du auch sowas wie einen "Builder" einsetzen um die SubTasks jeweils in anonymen Prozeduren zu halten.
Delphi-Quellcode:
...

LMyTask := MyTask_Builder
.Conf_MainTask(
    procedure
    begin
       A();
    end )
.Conf_SubTaskBefore(
    procedure
    begin
       B();
    end )
.Conf_SubTaskAfter(
    procedure
    begin
       C();
    end );

LMyTask.Execute;

...
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#2

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 07:31
Die Anforderung ist für mich etwas unklar formuliert,...
[/DELPHI]
Hast absolut recht. Ich versuchs nochmal. Die Proceduren existieren schon.

Beispiel:

Delphi-Quellcode:
procedure a;
begin
...
end;

procedure b;
begin
...
end;

procedure c;
begin
...
end;

procedure d;
begin
...
end;

procedure e;
begin
...
end;
Alle Prozeduren erledigen eigenständig ihre Aufgabe und sind auch in sich geschlossen. Es kann allerdings sein, dass z.B. Prozedur a zwingend, vor Prozedur b laufen muss. Oder wenn man es nochmal anders ausdrücken möchte, dass Prozedur b zwingend nach Prozedur a laufen muss. Das hat keinerlei technische Gründe. Das Programm würde auch ohne auf einen Fehler zu laufen einfach nur Prozedur A oder nur Prozedur B ausführen. Das würde einfach nur zu logischen Fehlern in den Daten führen. Da sich diese Anforderungen während der Benutzung der Anwendung ändern können, möchte ich das gerne dynamisch zusammen setzen können. Müsste ja mit RTTI gehen, dass ich aus den Strings in der Datenbank die Prozeduren raus fische und die dann entsprechend dran hänge. Mein Frage wäre jetzt nur, ob ich die vorhandenen Prozeduren "stöpselfähig" machen kann. In meiner Vorstellung sowas:


Delphi-Quellcode:
procedure a (Runbefore: array of Tproc; Runafter: array of Tproc);
begin
for Tproc in Runbefore do
Tproc.run;
...
for Tproc in Runafter do
Tproc.run;
end;
Ich hoffe, ich konnte mich ein bissel klarer ausdrücken
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
689 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 07:44
Für mich macht es dann aber meinen Sinn, das im Code zu machen, weil wenn isch etwas ändert, musst Du den Code ändern und eventuell neu ausliefern. Da ist es vllt. besser, man steuert es über die DB. Vllt mit einem Feld Pre-Task mit der Id des Tasks, der vorher laufen soll. Sind es 2 Tasks vorher, dann hat einer einfach auch einen Pre-Task...
Und auf diese weise, wenn Du man was ändern willst, dann einfach in der DB den Aufruf ändern
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#4

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 08:34
Für mich macht es dann aber meinen Sinn, das im Code zu machen, weil wenn isch etwas ändert, musst Du den Code ändern und eventuell neu ausliefern. Da ist es vllt. besser, man steuert es über die DB. Vllt mit einem Feld Pre-Task mit der Id des Tasks, der vorher laufen soll. Sind es 2 Tasks vorher, dann hat einer einfach auch einen Pre-Task...
Und auf diese weise, wenn Du man was ändern willst, dann einfach in der DB den Aufruf ändern
Ich meinte, das wäre das, was ich in meinem Post zuvor beschrieben hätte?

Ich würde das halt auch gern im Code abbilden, nicht nur in der Datenbank. Sehe jetzt nicht, warum ich bei dem Anonymen Prozeduren Aufruf den Code neu Compilieren müsste? Wenn man das ganze nämlich noch auf die Spitze treibt, und zum Beispiel die einzelnen Funktionen als BPL ausliefert, dann hat man ein schönes Plugin-System, dem ich neue Funktionen hinzufügen und alte wegnehmen kann, ohne dass ich jedes Mal die Hauptanwendung neu ausliefern muss. Das wäre so zu sagen der LongTime Plan dazu
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#5

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 08:54
Da sich diese Anforderungen während der Benutzung der Anwendung ändern können, möchte ich das gerne dynamisch zusammen setzen können. Müsste ja mit RTTI gehen, dass ich aus den Strings in der Datenbank die Prozeduren raus fische und die dann entsprechend dran hänge.
Könntest du hierfür noch ein konkretes Beispiel geben?
Also, was steht in der Datenbank und was soll damit passieren?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#6

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 09:10
Da sich diese Anforderungen während der Benutzung der Anwendung ändern können, möchte ich das gerne dynamisch zusammen setzen können. Müsste ja mit RTTI gehen, dass ich aus den Strings in der Datenbank die Prozeduren rausfische und die dann entsprechend dran hänge.
Könntest du hierfür noch ein konkretes Beispiel geben?
Also, was steht in der Datenbank und was soll damit passieren?
Moin,

Noch steht in der Datenbank
1. Zeile - Task 1
2. Zeile - Task 2
3. Zeile - Task 3
usw.*...

Ich hätte es zukünftig gerne so:
Tabelle 1 (Sichtbar für Otto normal Bediener)
1. Zeile - Bundle 1

Andere Tabelle (Zugriff von Benutzern mit Ahnung vom Ablauf)
BundleName = Bubndle 1
PreTask = Task 1;Task x ...
MainTask = Task 2
PostTask = Task 3;Task x ...

Andere Tabelle (irgendwann mal halbautomatisch gefüllt) zur Verfügung stehende Tasks
1. Zeile - Task 1
2. Zeile - Task 2
3. Zeile - Task 3


Diese Struktur hatte ich gedacht mit den Anonymen Prozeduren abbilden zu können. Also im Prinzip das Bundle
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 09:15
Und "Task x" steht dann für eine der Prozeduren a, b, c,...?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#8

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 09:54
Und "Task x" steht dann für eine der Prozeduren a, b, c,...?
Genau, alle Prozeduren, die angehängt werden sollen, existieren bereits im Code. Sollten aber in beliebiger Anzahl dran gehängt werden können.
Also Pro bzw. Post Prozedur kann auch leer sein oder eben 10 Prozeduren enthalten, deshalb im Code das
Code:
Array of TProc
Ich habe absolut keinen Peil, ob das funktionieren kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#9

AW: Frage zu Anonymen Prozeduren (TProc) und verwendung als Bauskasten

  Alt 18. Okt 2022, 10:00
Wenn der TaskManager dafür nichts bietet, dann machen es die Task eben selber


TaskA kann auch TaskB/SeineProc mitgegeben werden, welchen Diesen an seinem Ende startet/übergibt.

oder es gibt global Events, wo TaskA am Ende mit SetEvent reagiert und TaskB hat das WaitFor (für den Fall, dass er zu früh kommt).
bzw. es muß nicht global sein, aber Beide müssen ihr Event kennen und B gibt es dann am Ende frei.

oder ...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Okt 2022 um 10:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz