Es geht aber, ist aber nicht gaaaanz so einfach.
basierend auf den Grundlagen eines Programmaufbaues, die ich hier: viewtopic.php?f=26&t=49806 mal beschreiben hatte, lässt sich ein Programm so darstellen:
ich muss also, wenn ich die Verzögerung ändern möchte, folgendes kennen:
1. Den Programmnamen. (ok, das war das einfachste)
2. In welcher Rule (welchem Bedingungsblock) steht die SingleDestination, die ich verändern will
3. An welcher Stelle steht die Singledestination im DestinationBlock.
Hieraus erkennt man schon, es ist nicht ganz trivial, daran rumzumachen. Zugriff erfolgt über den Programmnamen, damit geht man der sich ändernden IDs bein Editieren erfolgreich aus dem Weg.
Aber nun kommt die Einschränkung:
Ich muss Rule und Singledestination numerischh angeben. Also änder ich da rum, in dem ich über der SingleDestination eine SingleDestination lösche, so ändert sich die nummer derjenigen, die ich ansprechen möchte. folglich würde ein Zugriff von einem externen Programm die falsche Singledestination packen. Das direkte angeben einer IseID wäre auch nicht zielführend, wird das programm mal leicht verändert (ohne die o.g. Punkte zu verletzen), so würden sich auch die ISE-IDs ändern.
DIESEN ABSCHNITT IMMER IM HINTERKOPF BEHALTEN
Wenn aber ein Programm an sich steht, man in der Programmbeschreibung hinterlegt hat, das ein Programm xyz die SDest mit der nummer R1SD1 verändert, lässt sich dieses beherrschen.
Mit einem externen Programm wie dem SDV lässt sich die Reaktion und das Ändern der Objecte natürlich auch schneller und effektiver beobachten und nachvollziehen als über webUI oder Scripte.
Wie funktioniert das nun:
In einem Programm, in dem ich in einem anderen Programm die verzögert um umschrieben möchte, folgenden Code hinzufügen und anpassen:
Code: Alles auswählen
!- Verzögerung setzen einer Programm SingleDestination
!- Black in Februar 2019 -
!-----------------------------------------------------
!- Parameter
!- Name des Programmes hier angeben (ID_PROGRAMS).Get("IchBineinNeuesProgramm")
!- ruleNr: Die Bedingung, in der die SDest verändert wird (wird von oben gezählz, erste Rule hat Nummer 1
!- Sdestnr: Nummer der SingleDestination, erste hat Nummer 1
!- Delay: verzögerung in Sekunden, 0 oder kleiner = keine verzögerung (sofort)
object oPRG= dom.GetObject (ID_PROGRAMS).Get("IchBineinNeuesProgramm");
integer ruleNr=2;
integer SdstNr=1;
integer delay=5;
! ------------------------------
!- ab hier nix mehr ändern
object oSDEST;
if (oPRG) {
object oRule= oPRG.Rule ();
while (oRule && (ruleNr>1)){
ruleNr=ruleNr-1;
oRule= oRule.RuleSubRule ();
}
if (oRule && (ruleNr==1)) {
object oDST= oRule.RuleDestination ();
if (oDST) {
if ((SdstNr<= oDST.DestSingleDestinations().Count ()) && (SdstNr>=1)) {
oSDEST= oDST.DestSingleDestination (SdstNr-1);
} else { WriteLine ("Ungültige SingleDestinationNummer");}
} else { WriteLine ("Keine Destination angegeben"); }
} else { WriteLine ("Ungültige Rulenummer");}
}
if (oSDEST) {
if (oSDEST.Type() == OT_SINGLEDESTINATION) {
if (delay<=0) {
oSDEST.DestinationValueParamType ( ivtEmpty);
} else {
oSDEST.DestinationValueParamType ( ivtDelay);
oSDEST.DestinationValueParam ( system.Date ("%F").ToTime ()+ delay );
}}
}
die RuleNummer und die SingleDestinationNummer und die Verzögerungszeit eintragen.
das wars.
Black