Nous utilisons une instance hébergée de Discourse et nous utilisons le plugin Automation fourni avec sa gamme de scripts et de déclencheurs. Cependant, nous rencontrons des problèmes pour recevoir des MP du script « Planifier un MP avec les résultats de l’explorateur de données ».
Il semble que le déclencheur d’automatisation fonctionne et que la requête de l’explorateur de données soit exécutée (cette requête fonctionne et produit des résultats lorsqu’elle est exécutée manuellement), mais nous ne recevons aucun MP par la suite. J’ai essayé avec moi-même comme destinataire et aussi avec le groupe « Admin », mais dans les deux cas, aucun MP n’est reçu.
Je ne suis pas sûr de manquer quelque chose d’évident ici, mais toute aide serait appréciée.
Après un peu plus d’investigation, je pense que cela pourrait être lié au type de requête que vous essayez d’exécuter. Je viens d’essayer avec une requête très simple et j’ai réussi à la faire fonctionner et à envoyer un message privé. Pourriez-vous partager votre requête ?
Merci de vous pencher sur ce problème.
La requête n’est pas totalement simple et ressemble à ceci :
WITH
ua AS (
SELECT target_topic_id, COUNT(id) FROM user_actions
WHERE action_type = 15
GROUP BY target_topic_id
)
SELECT
t.id,
t.title,
t.created_at,
t.last_posted_at,
t.views,
t.posts_count,
t.user_id,
t.last_post_user_id
FROM topics t
INNER JOIN users us ON us.id = t.user_id
LEFT JOIN ua ON ua.target_topic_id = t.id
WHERE t.deleted_at IS NULL
AND t.closed = false
AND t.archived = false
AND t.visible = true
AND ua.target_topic_id IS NULL
AND us.username_lower != 'system'
AND t.created_at > now() - INTERVAL '7' DAY
ORDER BY created_at DESC
Comme je le dis, elle s’exécute manuellement et produit des résultats.
Par manuel, entendez-vous le déclenchement de la requête à partir de l’explorateur de données ou le déclenchement du script à partir du plugin d’automatisation ?
Je pense que cela a quelque chose à voir avec la magie de style user_id que l’explorateur de données fait lorsqu’il les convertit des identifiants bruts en liens utilisables. Si j’exécute votre rapport tel quel, il génère une erreur comme vous le voyez, mais si je supprime t.user_id et t.last_post_user_id de la sélection, cela fonctionne.
Si je les convertis en noms d’utilisateur simples, cela semble également fonctionner correctement via l’automatisation :
WITH
ua AS (
SELECT target_topic_id, COUNT(id) FROM user_actions
WHERE action_type = 15
GROUP BY target_topic_id
)
SELECT
t.id,
t.title,
t.created_at,
t.last_posted_at,
t.views,
t.posts_count,
us.username,
u2.username
FROM topics t
INNER JOIN users us ON us.id = t.user_id
LEFT JOIN ua ON ua.target_topic_id = t.id
JOIN users u2 ON u2.id = t.last_post_user_id
WHERE t.deleted_at IS NULL
AND t.closed = false
AND t.archived = false
AND t.visible = true
AND ua.target_topic_id IS NULL
AND us.username_lower != 'system'
AND t.created_at > now() - INTERVAL '7' DAY
ORDER BY created_at DESC
Bien que nous ayons également contacté quelqu’un de plus compétent pour examiner cela plus en détail.
Cependant, séparément, je ne suis pas sûr que votre requête fasse ce que vous voulez. Est-ce lié à la solution, car je vois beaucoup de MP dans mes résultats ?
related = relations.dig(colrender[col_index].to_sym) if col_index < colrender.size
La condition if à la fin est incorrecte : colrender est censé être éparse, pas compact. Il contiendra des nulls si certaines, mais pas toutes, les colonnes fournissent des données de rendu supplémentaires.
La vérification correcte serait probablement unless colrender[col_index].nil?
De plus, ce code semble négliger les types de rendu url, reltime et html car ce ne sont pas des classes ActiveRecord.
Pour ma part, il semble que je ne parvienne pas à déclencher correctement ce script d’automatisation, quelle que soit la requête de l’explorateur de données. Par exemple :