eqLogic => byTags?

Bonjour à tous,

Avant de me lancer dans un scénario avec bloc code.

Qqun connaitrait t’il une commande API qui permetterai de sortir les équipements avec un tags particulier ?
ex : eqLogic::bytags($montag) qui correspondrait au champs présent dans les équipements

:grin:

Hello
Non mise à part récupérer tous les eqLogic (::all())), pour chacun récupérer les tags (:: getTags()) et faire un matching avec le(s) tags de ton choix… je crois qu’il y a pas d’autres solutions.
Pour ma culture comment utilises tu ces tags sur les équipements ?
@chris94440

1 « J'aime »

Salut,

Il me semble qu’un eqlogic::searchByString(‹ string ›) (une fonction dans cette idée) doit fonctionner avec les tags.

1 « J'aime »

C’est exactement ça!!!

$aEq=eqLogic::searchByString('testTags');
foreach($aEq as $eq) {
  	$scenario->setLog('EQ name : ' . $eq->getName());
}

@chris94440

2 « J'aime »

@chris94440,
Comme je n’ai jamais réussit à ajouter des catégories. Aujourd’hui je l’utilise pour la coloration des tuiles en fonction du tags.

Mais là je voudrais récupérer des valeurs avec une boucle présente dans des cmd mais qui ne sont présentent que dans des équipements tagés.
Pour éviter de faire une boucle sur l’ensemble des commandes ;).

1 « J'aime »

Merci pour vos retours @chris94440 et @Salvialf , je teste ça dès que je rentre du boulot :slight_smile:

D’après le code il faut faire attention car cette fonction recherche dans pas mal d’attributs …

  • name
  • logicalId
  • eqType_name
  • comment
  • tags
$sql = 'SELECT ' . DB::buildField(__CLASS__) . '
		FROM eqLogic
		WHERE name LIKE :search or logicalId LIKE :search or eqType_name LIKE :search or comment LIKE :search or tags LIKE :search';
1 « J'aime »

Du coup, j’ai peut être intérêt à faire une nouvelle fonction perso, avec une requête sql plus ciblé sur le tag.

Je vais creuser voir :wink: encore merci pour l’alerte.

Pour résumer :
J’ai pu completer la class userFonction avec les éléments suivant, pour faire une fonction searchByTags.

class userFunction {
	const UIDDELIMITER = '__';
	protected $tags;
	protected $name;
	private static $_templateArray = array();

	/*public static function plop($_arg1 = '') {
		return 'Argument 1 : ' . $_arg1;
	}*/

	private static function cast($_inputs) {
		if (is_object($_inputs) && class_exists($_inputs->getEqType_name())) {
			$return = cast($_inputs, $_inputs->getEqType_name());
			if (method_exists($return, 'decrypt')) {
				$return->decrypt();
			}
			return $return;
		}
		if (is_array($_inputs)) {
			$return = array();
			foreach ($_inputs as $input) {
				$return[] = self::cast($input);
			}
			return $return;
		}
		return $_inputs;
	}

	public function getEqType_name() {
		return $this->eqType_name;
	}
	
	public function getName() {
		return $this->name;
	}

	public static function searchByTags($_search) {
		$values = array(
			'search' => '%' . $_search . '%'
		);
		$sql = 'SELECT ' . DB::buildField(__CLASS__) . '
		FROM eqLogic
		WHERE tags LIKE :search';
		return self::cast(DB::Prepare($sql, $values, DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, __CLASS__));
	}

}

Avec le report des fonctions : cast, getEqType_name et getName, puisqu’elle ne sont pas présentes dans core.inc.php.

Ensuite j’ai développer un bloc code dans un scénario récurrent (cron => 15 9-17 * * 1-5) qui chercher dans des équipements du plugin stockexchange

//$mySearch=eqLogic::searchByString('Bourse');
$mySearch = userFunction::searchByTags('Bourse');
//$nbS=count($meSearch);
//$scenario->setLog($nbS, 0);
$globale = 0;
foreach($mySearch as $eq) {
  $equip = $eq->getName();//Recuperation des nom eqLogic
  $comd = cmd::byString('#[MesTests]['.$equip.'][Symbole]#')->execCmd();//Recuperation de la valeur dans la commande Symbole de eqLogic
  $cota = cmd::byString('#[MesTests]['.$equip.'][Prix]#')->execCmd();//Recuperation de la commande Symbole
  $qte = cmd::byString('#[MesTests]['.$comd.'][Qte]#')->execCmd();//Recuperation de la commande Symbole
  $pris2revient = cmd::byString('#[MesTests]['.$comd.'][PrixDeRevient]#')->execCmd();
  $valo = $qte * $cota;
  $plusValue = ($cota-$pris2revient) * $qte;
  cmd::byString('#[MesTests]['.$comd.'][Valorisation]#')->event($valo);
  $scenario->setLog('EQ name : '.$equip.' table : '.$table.' CMD name : '.$comd.' Qte : '.$qte.' Achat : '.$pris2revient.' ValoJ : '.$cota.' +Value : '.$plusValue);
  $globale = $globale + $plusValue;
};
$myVar = $scenario->setData('maPlusValue', $globale);
$scenario->setLog('Totale +/- Value : '.$globale);

Que j’ai pu coupler avec des virtuels alimentés eux même par un google sheet depuis un autre bloc code dans un autre scénario.

$api = "https://sheet2api.com/v1/MyKeyApi/actions";
$json = file_get_contents($api);
$jsonData = json_decode($json,true);
//$nb = count($jsonData);
//$scenario->setlog('Pouet : '.$jsonData[1]['Qt'].' : '.$nb);
foreach ($jsonData as $index => $data) {
  cmd::byString('#[MesTests]['.$data[Code].'][Valeurs]#')->event($data[Valeurs]);
  $scenario->setlog($data[Valeurs]);
  cmd::byString('#[MesTests]['.$data[Code].'][CodeValeur]#')->event($data[Code]);
  $scenario->setlog($data[Code]);
  cmd::byString('#[MesTests]['.$data[Code].'][Qte]#')->event($data[Qt]);
  $scenario->setlog($data[Qt]);
  cmd::byString('#[MesTests]['.$data[Code].'][PrixDeRevient]#')->event($data[PrixDeRevient]);
  $scenario->setlog($data[PrixDeRevient]);
  };

En dernier lieu je pousse le résulat final dans un variable, pour l’afficher sur le dasboard ou lametric :slight_smile: ]

Donc un grand merci pour votre aide. Ainsi qu’a @Mips pour son plugin (Même si les API appelé ne sont pas toujours très à jour. Peut aller voir d’autre ailleurs )

Pour aller plus loin, je vais chercher :

  • la possibilité de variabiliser l’objet parent (ici [‹ MesTest ›]) pour me permettre de changer mes équipements de place sans revinir sur le code.
  • trouver comment rafraichir les équipements depuis le code. Afin de consulter des dernières cotation.
  • Vérifier via le code si l’équipement existe pour prévenir de bug en cas de changement.

En espérant que cela inspire d’autre :wink:

3 « J'aime »