Relance des alertes par email

Bonjour,
J’ai paramétré trois relances toutes les minutes (pour test) sur une alerte configuré sur une transition d’état. Le premier déclencheur d’alerte fonctionne correctement, mais pas les autres.
Paramétrage de l’alerte :

logs :

2021-09-22 15:50:00,294|SIMPLICITE|INFO||http://demo.simplicite.io:20128||ICORECM004|system|com.simplicite.util.CronJob|run||Execute job ObjectDynGC at 2021-09-22 15:50:00
2021-09-22 15:50:00,151|SIMPLICITE|INFO||http://demo.simplicite.io:20128||ICORECM005|system|com.simplicite.util.CronJob|run||Result of job deadlockTimestamp : 0 object(s) unlocked.#INFO
2021-09-22 15:50:00,149|SIMPLICITE|INFO||http://demo.simplicite.io:20128||ICORECM004|system|com.simplicite.util.CronJob|run||Execute job deadlockTimestamp at 2021-09-22 15:50:00
2021-09-22 15:50:00,096|SIMPLICITE|INFO||http://demo.simplicite.io:20128||INFO|system|com.simplicite.util.engine.CronManager|run||Event: Cron manager is sleeping for 0:04:59...
2021-09-22 15:50:00,096|SIMPLICITE|INFO||http://demo.simplicite.io:20128||INFO|system|com.simplicite.util.engine.CronManager|run||Event: Next cron job: deadlockTimestamp at Wed Sep 22 15:55:00 CEST 2021
2021-09-22 15:48:58,170|SIMPLICITE|INFO||http://demo.simplicite.io:20128||INFO|designer|com.simplicite.bpm.Alert|send||Evénement: ALERT:EVL_Eval_LackInfos_Resp. Email send: !!Manque informations !! Campagne ETI4 2021-09-30 - 
2021-09-22 

La relance n’est pas envoyée.

Merci pour votre aide,

Le délai entre 2 relances ne peut pas être inférieur au délai de la cron.
et elle n’a lieu que si les états n’ont pas changé entre temps.

D’après la cron c’est obligatoirement une heure entre chaque passage sinon ce serait un polling trop important d’aller chercher toutes les minutes s’il y a des états en retard.

image

Essayez avec 60 ou 120 minutes entre chaque relance.
Dans des cas d’usage normaux, on en fait 1 par jour pendant N jours.

Sinon il y a un hook getDeadlineDate dans l’objet métier qui permet de dire quand il faut faire la relance, par défaut c’est en fonction de la date de dernière mise à jour + délai de la relance paramétré, mais il y a des cas où on veut par exemple dire “une semaine avant une date d’échéance du dossier”.

1 Like

Bonjour,
malgré le fait d’ajouter une relance >60 min, cela ne fonctionne pas …
on dirait que l’alerte ne capte pas l’objet sur lequel il faut appliquer la relance, d’après les logs :

2021-10-22 14:13:09,070|SIMPLICITE|ERROR||http://demo.simplicite.io:20128||ECOREDB001|system|com.simplicite.util.engine.ProcessLoader|query||Error SQL query: select usr_email from m_user where row_id=''
    java.sql.SQLDataException: data exception: invalid character value for cast in statement [select usr_email from m_user where row_id='']
     at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
     at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
     at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
     at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
     at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:742)
     at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:742)
     at com.simplicite.util.engine.DBAccess.query(DBAccess.java:615)
     at com.simplicite.util.engine.DBAccess.query(DBAccess.java:413)
     at com.simplicite.util.engine.ProcessLoader.loadAlert(ProcessLoader.java:751)
     at com.simplicite.bpm.ProcessusDirect.loadAlert(ProcessusDirect.java:157)
     at com.simplicite.objects.System.BPMState.manageDeadlineState(BPMState.java:103)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.base/java.lang.reflect.Method.invoke(Method.java:568)
     at com.simplicite.util.engine.ObjectManager.invokeActionSync(ObjectManager.java:4151)
     at com.simplicite.util.engine.ObjectDirect.invokeAction(ObjectDirect.java:658)
     at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:2080)
     at com.simplicite.util.ScriptedObjectDB.invokeAction(ScriptedObjectDB.java:888)
     at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:2048)
     at com.simplicite.objects.System.CronTable.forceExecute(CronTable.java:65)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.base/java.lang.reflect.Method.invoke(Method.java:568)
     at com.simplicite.util.engine.ObjectManager.invokeActionSync(ObjectManager.java:4151)
     at com.simplicite.util.engine.ObjectDirect.invokeAction(ObjectDirect.java:658)
     at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:2080)
     at com.simplicite.util.ScriptedObjectDB.invokeAction(ScriptedObjectDB.java:888)
     at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:2048)
     at com.simplicite.webapp.tools.JSONServletTool.action(JSONServletTool.java:1849)
     at com.simplicite.webapp.ObjectJson.action(ObjectJson.java:678)
     at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:643)
     at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:89)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

[Platform]
Status=OK
Version=5.1.10
BuiltOn=2021-10-21 00:59

comment sont paramétrés les destinataires de votre alerte ?

Si le nom du champ dans la requête SQL est correct, visiblement l’instance “alert_xxx”, qui sert à l’envoi de d’alerte de votre objet, n’a effectivement pas le record en mémoire (remplacé par rien).

On va inverser certains traitements qui avaient été optimisés car le prepareSQL qui remplace les host values arrive sûrement trop tôt dans le processus.

Une façon de forcer le chargement en mémoire en attendant le correctif est d’implémenter le hook getDeadlineDate qui sert à donner la date d’expiration métier (par défaut, c’est la date dernière mise à jour update_dt + le délai du timeout du statut) :

public Date getDeadlineDate(String rowId, String state, String update_dt, int timeout) {
	// Force a select to prepareSQL
	select(rowId); // or selectWithoutFilters(rowId, false) 
	// default update_dt + timeout
	return super.getDeadlineDate(rowId, state, update_dt, timeout);
}