Weitere Aktion auf Basis von Thema

  • Hallo,


    Ich möchte eine Regel erstellen, die auf Basis des Thema eine Aktion durchführt.


    Beispiel: Alle Elemente mit einem bestimmten Thema sollen den Status Erledigt erhalten.

    Könnte man erstmal natürlich in der Regel, die das Thema setzt ohne weiteres mit reinsetzen. Allerdings ist mir das zu unflexibel. Wenn weitere Themen kommen, die auf Erledigt gesetzt werden sollen, muss ich die Regel immer wieder anpassen, was diese am Ende unnötig komplex macht.


    Mein Gedanke dazu:

    Ich lege mir also eine neue Regel an, die nach der Themenvergabe ausgeführt wird und setze die entsprechenden Themen darin auf Erledigt.

    Über Regelknoten ist das einfach und schnell erledigt, aber auch hier ist mir das nicht flexibel genug, denn ich benötige für jedes Thema einen eigenen Regelknoten. Über reguläre Ausdrücke könnte man das in einem gewissen Grad auch noch in einem Regelknoten verwursten, aber das finde ich persönlich dann auch nichts so schick.


    Deshalb möchte ich das gerne über ein Script machen. Vom Prinzip habe ich mir das so gedacht, dass ich erstmal ein Array nutze, in dem die Themen enthalten sind.

    Gedacht nach diesem Schema ( Item.TopicName ist erfunden! ):

    Code
    1. completingThemes : array[0..1] of string = ('Thema1', 'Thema2');
    2. if Item.TopicName in completingThemes then
    3. begin
    4.     Item.State := isDone;
    5. end

    Leide fehlt mir an der Stelle Item.TopicName. Gefunden habe ich Item.TopicRef, aber das ist der Identifier (int) zu dem Thema. Ich könnte dann natürlich auf ein Integer-Array ausweichen, aber ich kenne die Identifier nicht und bei jedem Thema ausprobieren, was nach Erstellung eines Regelknoten im Quelltext steht ist keine besonders schöne Lösung.


    Dann habe ich noch weiter gedacht und TFbmDbQuery und TFbmDbResult gefunden und gedacht, ich könnte so die Namen zu den Topics auslesen. Habe ich aber auch nur gedacht ;)

    Denn ich finde in der Doku nirgendwo ein Beispiel für die DB-Komponenten. Geschweige denn eine Übersicht der DB Struktur. Somit kann ich gar keine sinnvolle Query aufbauen, womit das Thema auch wieder vom Tisch ist.


    Dann habe ich weiter gesucht nach einer vielleicht schon bestehenden Funktion, die den entsprechenden Topic-Bezeichner ausliest, aber auch nichts gefunden.


    Jetzt die Frage:

    Ist das Vorhaben in der Art möglich und habe ich was übersehen?


    danke

  • Hi Arne,

    es ist tatsächlich ganz einfach über den TopicCache an den Namen eines Themas heranzukommen:


    Code
    1. if (Item.TopicCache.GetNameByID(Item.TopicRef) in completingThemes then
    2. begin
    3. Item.State := isDone;
    4. end;

    Vielleicht wäre es auch eine Idee den Themenpfad abzufragen und Elemente immer dann zu erledigen, wenn diese ein Thema aus diesem Themenpfad zugewiesen haben? Dann musst du in der Regel gar nichts machen, sondern neue Themen nur unterhalb des gewünschten Themas (hier "Statusnachrichten") erstellen:



    Code
    1. if (AnsiContainsText(Item.TopicCache.GetPathByID(Item.TopicRef), 'Statusnachrichten >')) then
    2. begin
    3. Item.State := isDone;
    4. end;