j’ai un scenario pour activer un scenario passé en paramètre dans un tag:
ce tag « scenario » contient un nom sous la forme : [Alarmes][Maison][Alarme_Fuite_eau]
dans le code comment retrouver l’objet scenario pour pouvoir l’activer?
$scenario = $tags['#scenario#'] // récupère le nom du scenario
$scenari = ????? // passer tu texte a l'objet ?
$scenari->setIsActive(1); //active le scénario
$scenari->save();
me renvoi:
La commande n’a pas pu être trouvée : [Alarmes][Maison][Alarme_Fuite_eau] => [Alarmes][Maison][Alarme_Fuite_eau]
J’ai essayé en passant le tag au format #[Alarmes][Maison][Alarme_Fuite_eau]# et le tag est recupéré comme #scenario56#.
mais un $scenari = scenario::byID($tags[‹ #scenario# ›]) ne renvoi pas le scenario
Ok je viens de capter que tu as déjà essayé à priori. Ça tourne autour de ça normalement, j’ai pas l’occasion de tester là. Peut-être utiliser un toHumanReadable…
Ou ça alors si tu récupère un id au lieu du nom au final?
Par contre si j’appelle le scenario avec le tag=#[Alarmes][Maison][Alarme_Fuite_eau]# (avec # avant et après)
le log du scenario appelé indique:
[SCENARIO] Start : Lancement provoque par le scenario : [Test][Aucun][test_ena_scenario]. Tags : {"#scenario#":"#scenario56#"}
par contre dans ce cas je n’arrive pas a transformer le tag #scenario56# en object scenario utilisable
De mémoire la fonction du core enlève les dièses et le terme scenario pour ne récupérer que l’id donc ça devrait fonctionner avec le byId il me semble
Edit: Je viens de vérifier et c’est dans la fonction ByString que le remplacement est effectué. C’est donc bien la même chose : scenario::byString('#scenario56#') retourne bien l’objet scénario portant l’id 56.
Ok cela marche avec une chaîne en dur. En sauvegardant le scenario, la ligne est remplacée par scenario::byString(‹ #[Alarmes][Maison][Alarme_Fuite_eau]# ›);
mais scenario::byString(‹ # ›.$tags[‹ #scenario# ›].‹ # ›); ou scenario::byString($tags[‹ #scenario# ›]); ne fonctionnent pas…
Par principe j’utiliserai dans le scénario « appelant » le tag suivant : scenario=#[Alarmes][Maison][Alarme_Fuite_eau]#
et ainsi dans le scenario « appelé » : $scenari = scenario::byString($tags['#scenario#']);
Ceci, car si tu modifie le nom du scenario « appelé » par : Alarme_Fuite_eau_2 par exemple, sa aura effet de modifier aussi automatiquement dans le code du scénario « appelant », sans le besoin d’intervenir dans le code.
[2021-11-28 21:59:59][SCENARIO] Start : Lancement provoque par le scenario : [Test][Aucun][test_ena_scenario]. Tags : {"#scenario#":"#scenario56#"}
[2021-11-28 21:59:59][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-11-28 21:59:59][SCENARIO] Exécution d'un bloc code
[2021-11-28 21:59:59][SCENARIO] La commande n'a pas pu être trouvée : =>
[2021-11-28 21:59:59][SCENARIO] Fin correcte du scénario
$tags = $scenario->getTags(); //récupère la liste des tags
$scenari = scenario::byString($tags['#scenario#']);
$scenario->setLog($scenario->getName().": scenari:" . $scenari->getName());