Seite 1 von 1

In Rule eine Variable ändern innerhalb von (if)

Verfasst: 17. Nov 2022 15:44
von sonic
Hallo Community,

vielleicht verzettel ich mich aktuell. Ich möchte gerne eine bereits gefüllte Variable innerhalb eine IF Abfrage ändern.

Der Plan:
Es kommt ein Anruf an auf folgender Nummer 00001, dann soll diese Nummer durch einen String ersetzt werden.

Code: Alles auswählen

rule "Anruf Notification"
when
    Item M_Tel_Status changed to RINGING
then

    var incCall = M_Tel_EingehendAnruf.state as StringListType
    val callerNumber = incCall.getValue(1)
    var calledNumber = incCall.getValue(0)

    
    if (calledNumber === "00001") {
        var calledNumber = "Praxistelefon"
    }
    
    if (calledNumber === "00002") {
        var calledNumber = "Privattelefon"
    }
    

    var msg = "Anruf von " + callerNumber + " fuer " + calledNumber

    M_Persist_Notify.postUpdate(msg)
    sendBroadcastNotification(msg)
 
end
Die Regel funktioniert grundsätzlich, nur wird die Nummer angezeigt und nicht durch den String "Praxistelefon" oder "Privattelefon" ersetzt.

Ich freue mich auf Eure Hilfe und schonmal besten Dank
Grüße
Bernhard

Re: In Rule eine Variable ändern innerhalb von (if)

Verfasst: 17. Nov 2022 17:23
von peter-pan
Hast du den Vergleich mal mit zwei == versucht

Code: Alles auswählen

if (calledNumber == "00001") {

Re: In Rule eine Variable ändern innerhalb von (if)

Verfasst: 17. Nov 2022 19:56
von sonic
Ja habe ich. Die 3 = waren eher Verzweifelunt :-)

Re: In Rule eine Variable ändern innerhalb von (if)

Verfasst: 17. Nov 2022 21:31
von udo1toni
Punkt 1: Du darfst nicht das Schlüsselwort var voranstellen, das legt eine neue lokale Variable an, die allerdings nur innerhalb des if-Blocks gilt, also außerhalb schon wieder verworfen wird. Ich könnte mir gut vorstellen, dass hier ein Override stattfindet, das darf natürlich nicht sein.
Punkt 2: Bist Du sicher, dass es sich wirklich um einen String handelt? Um das tatsächlich sicherzustellen, wäre die Rule so sinnvoller:

Code: Alles auswählen

rule "Anruf Notification"
when
    Item M_Tel_Status changed to RINGING
then
    val incCall = M_Tel_EingehendAnruf.state as StringListType
    val callerNumber = incCall.getValue(1)
    var calledNumber = incCall.getValue(0).toString // String erzwingen

    switch(calledNumber) {
        case "00001" : calledNumber = "Praxistelefon"
        case "00002" : calledNumber = "Privattelefon"
    }
    val msg = "Anruf von " + callerNumber + " für " + calledNumber

    M_Persist_Notify.postUpdate(msg)
    sendBroadcastNotification(msg)
end
Das switch-Konstrukt spart hier nur wenig Code, ist aber etwas effizienter als die if-Anweisungen.

Re: In Rule eine Variable ändern innerhalb von (if)

Verfasst: 18. Nov 2022 07:52
von sonic
Guten Morgen.
DANKE udo1toni,

es funktioniert nicht nur, ich habe auch wieder was dazu gelernt. TOP.

Allen einen schönen Tag!