Bloc Code - Récuperer nom du Trigger dans le cas déclencheur = scenario

Bonsoir,
J’ai cherché (peut être mal) et pas trouvé dans les class du Core.

J’ai un scenario qui est déclenché par un autre scénario.

Quel serait le code pour récupérer le nom du scénario qui a déclenché le scénario courant.
Ce nom est bien indiqué dans le log du scénario mais comme dans ce cas la fonction :

$scenario->getRealTrigger() renvoi ...  'scenario'

je ne sais pas aller plus loin.

Merci d’avance

Salut

Il me semble qu il y a deja qlq sujets sur le forum avec cette meme question…
Et les reponses donnees (a l epoque?) c est que ca n etait pas possible d avoir cette info.
Une solution proposee etait de passer par des tags.

(Je suis pas certain d avoir vu une evol la dessus)

2 « J'aime »

Bonjour @tomitomas ,

Je te remercie pour ta réponse.

J’ai effectivement trouvé pas mal de posts concernant la question des Triggers de scenario mais j’avoue que les posts qui traitaient de ce sujet précis m’ont échappé.

La réponse ne me surprend pas car j’ai passé pas mal de temps à éplucher les class et functions du Core et je n’ai rien trouvé d’immédiat.
Par contre, je me dis que, comme l’information est donnée de base dans le log du scénario, il doit bien y avoir une solution. J’en déduit simplement qu’elle ne va pas être simple au niveau code.

Je vais donc continuer mes investigations mais si quelqu’un a une idée ou une piste pour simplifier ma recherche, je le remercie d’avance.

Bonne journée à tous.

Bonjour,
J’utilise ça dans un scénario:

$trigger = str_replace('#','',$scenario->getRealTrigger()); // récupération du trigger.
$scenario->setLog("  Trigger : $trigger");
$cmd = cmd::byId($trigger);
if (is_object($cmd)) { // si trigger est une commande.
  $scenario->setLog("  Cmd name : " .$cmd->getName());
  $scenario->setLog("  HumanName : " .$cmd->getHumanName());
  // $eqlogicId = $cmd->getEqLogic(); // Eqlogic de la cmd
  .....
}
else $scenario->setLog('ERREUR : Déclencheur inconnu !!!');

Résultat:

En relisant le pb je vois que je suis hors sujet. :innocent:

Bonjour @jpty ,

Merci quand même :wink:

Yapuka utiliser les tags :
Scenario appelant:

Scénario appelé:

$trigger = $scenario->getRealTrigger();
if($trigger == "scenario") {
  $tags = $scenario->getTags();
  $scenario->setLog("TagCaller : " .$tags['#caller#']);
}
else {
  $scenario->setLog("  Déclencheur: $trigger");
}

Le résultat dans le log du scenario Appelé:

1 « J'aime »

Pour aller un peu plus loin que mon post au dessus et respecter la demande initiale, dans le scénario appelant, il faut renseigner le tag avec l’ID du scénario:
image
Le scénario appelant va s’exécuter avec l’ID du scénario:
image
Le tag caller suivra les renommages des parties objet, équipement et scénario.

Pour la récup de l’appelant dans le scénario appelé:

$trigger = $scenario->getRealTrigger();
$tags = $scenario->getTags();
if($trigger == "scenario") {
  if(isset($tags['#caller#'])) {
    $tagCaller = $tags['#caller#'];
    if(substr($tagCaller,0,9) == '#scenario' && substr($tagCaller,-1) == '#') {
      $caller = scenario::byId(substr($tagCaller,9,-1));
      $scenario->setLog("Scenario Caller : " .$caller->getHumanName());
    }
    else $scenario->setLog("TagCaller : " .$tagCaller);
  }
  else $scenario->setLog("Tag #caller# not set.");
}
else $scenario->setLog("  Trigger: $trigger");

Le log de l’exécution:

5 « J'aime »

Très sympa cette méthode … et qui répond au besoin.
Un très grand merci pour ta réponse si bien documentée :pray:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.