[Gelöst] Trigger dynamisch starten

22. Februar 2008 15:06

Hi,
ich habe ein Problem:

Eine Tabelle "Aufgabe" besteht aus mehrere Datensatz:
No. Beschreibung
1. Aufgabe 1
2. Aufgabe 2
.
.

In der Tabelle habe ich mehrere Trigger mit der Funktionsname wie Aufgabenr. angelegt.

In der Form habe ich ein Knopf eingeblendet. Wobei der Knopf dient um der Trigger je nach Aufgabenr. auszuführen.

Die Frage ist wie kann ich den Trigger aufrufen? Ist es überhaupt möglich Funktion aufrufen mit dynamische Trigger?
z.B. Datensatz mit No. 1 führt Trigger "1"
Datensatz mit No. 5 führt Trigger "5"

Vielen Dank im voraus.[B]
Zuletzt geändert von navsyst am 26. Februar 2008 16:32, insgesamt 2-mal geändert.

22. Februar 2008 15:54

Spontan fällt mir folgende Lösung ein:
Code:
CASE "No." OF
  '1': MeineFunktion1();
  '2': MeineFunktion2();
  // [...]
  '9': MeineFunktion9();
END;

22. Februar 2008 16:03

Danke Timo für die schnelle Antwort.

Das ist schon eine gute Ansatz.

Aber ich bin zu faul:) Ich denke dass meisten Programmier auch faul sind d.h. ständig nach minimale Aufwand suchen um optimale Ergebnis zu erreichen.

Kann man mit Schleife oder Array die Funktionsnr. beeinflussen?
Sonst muss ich ja 200 Case-Zeilen vorbereiten!!
Ok. Mit Copy-Paste sollte es kein Problem sein. Aber vielleicht gibt es noch paar geheime Tips von euch.

22. Februar 2008 16:06

Leider gibt es keine Möglichkeit, wirklich dynamisch eine bestimmte Funktion aufzurufen.
Dir bleibt also nichts anderes übrig, als per Copy&Paste diese gigantische CASE-Struktur aufzubauen.
Kleiner Trost: Du brauchst es ja nur ein einziges mal durchführen ;-)

22. Februar 2008 16:20

Um solche Sachen zu machen benutze ich oft Excel um mir die Zeilen zusammensetzen zu lassen. Und kopiere sie dann in den Navision-Code.

25. Februar 2008 14:15

neoroot hat geschrieben:Um solche Sachen zu machen benutze ich oft Excel um mir die Zeilen zusammensetzen zu lassen. Und kopiere sie dann in den Navision-Code.


Danke neo! Das passt gerade gut zu meinem Aufgabe :)
Mit Verketten funktioniert das prima.

Nun habe ich noch ein Problem:
Gibt es da die Möglichkeit zu prüfen ob Funktion bzw. Trigger vorhanden ist oder nicht?
Weil zu jeden Datensatz habe ich nicht unbedingt eine Funktion dafür.
Wenn ich blind so vorbereite wie:
Code:
CASE "No." OF
  '1': MeineFunktion1();
  '2': MeineFunktion2();
  // [...]
  '9': MeineFunktion9();
END;

dann knallt es wenn ich keine Trigger MeineFunktion2 habe.

Danke im voraus für jede Hilfe.

26. Februar 2008 15:58

navsyst hat geschrieben:Nun habe ich noch ein Problem:
Gibt es da die Möglichkeit zu prüfen ob Funktion bzw. Trigger vorhanden ist oder nicht?


Hi,

einfach kompilieren, dann schreit er schon wenn er eine Funktion nicht findet. :lol:

Gruesse
feri

26. Februar 2008 16:07

feri hat geschrieben:einfach kompilieren, dann schreit er schon wenn er eine Funktion nicht findet. :lol:

Gruesse
feri


:-( Ich will nicht dass er schreit..

Hinter einen Knopf tue ich folgende code:
Code:
CASE "No." OF
  'IT000001' : IT000001;
  'IT000002' : IT000002;
  'IT000003' : IT000003;
  'IT000004' : IT000004;
  'IT000005' : IT000005;
  .
  .
  'IT001500' : IT001500;
END;


Die Funktionstrigger soll nur nach Bedarf vorhanden sein.

26. Februar 2008 16:07

feri hat geschrieben:einfach kompilieren, dann schreit er schon wenn er eine Funktion nicht findet. :lol:
Ist zwar sicherlich nicht die "sauberste" bzw. eleganteste Methode, aber die schnellste, zuverlässigste und effizienteste 8-)

Diesen Trick verwende ich auch, um ungenutzte Variablen loszuwerden.
Variable ausschneiden (damit ich sie notfalls einfach wieder einfügen kann) und per F11 kompilieren.
Meckert Navision nicht, dann auf zur nächsten Variablen.

26. Februar 2008 16:23

Ich habe folgende code wieder in Excel simulieren
Code:
    PROCEDURE IT000001@1000000018();
    BEGIN
    END;

    PROCEDURE IT000002@1000000019();
    BEGIN
    END;

    PROCEDURE IT000003@1000000020();
    BEGIN
    END;


und hinterter in der Text-Objekte hinzugefügt.

Nicht elegant aber erstmal ok so.. :oops: