Champs non enregistré au passage d'étape d'un processus métier

Request description

Bonjour, j’ai un comportement non-voulu sur un processus métier.

Steps to reproduce

Lorsque je suis sur la 1ere activité, je peux renseigner 4 attributs.

Pareil pour la 2nd activité avec une mutitude de champs à renseigner.

Cependant lorsque j’arrive dans la 3e activité qui est celle de la synthèse( activité 1 + 2) ,2 attributs de la 1ere activité ne sont pas enregistré ( "Produit ou service " et “type”). Et les autres attributs lié à d’autres activité le sont bien.

Le seul moyen d’avoir ses 2 champs bien enregistrer est de les reconfigurer en synthèse (activité 3) ou bien :

 -de l'activité 1 
 -aller vers la activité 2, 
 -faire précédent vers l'activité 1
 -sélectionner les champs lié à ses 2 attributs
 -refaire suivant pour aller dans la 2  
 -suivant encore dans la 3 

à ce moment là, cela marche les 2 attributs de la 1er activité sont bien dans la 3e

Auriez-vous une idée d’ou pourrait venir ce problème et pouvoir le régler pour que tous soit pris en compte dès le 1er passage ?

Technical information

Instance /health
Platform]
Status=OK
Version=6.1.2
BuiltOn=2024-08-05 20:47
Git=6.1/467048f75ed27520b8cf7eca0ba57eeb2e0e1a0f
Encoding=UTF-8
EndpointIP=100.88.202.116
EndpointURL=http://lbc-77449-app-f4787f7fc-tcr56:8080
TimeZone=Europe/Paris
SystemDate=2024-09-03 14:44:13
Simplicité logs
---paste the content of the **relevant** server-side logs---
Browser logs
---paste content of the **relevant** browser-side logs---
Other relevant information

----E.g. type of deployment, browser vendor and version, etc.----

Bonjour,

Comment valorisez vous les données de synthèse ?
avec l’accesseur [MyStep1.Data.myfield1] ou via un objet métier persistant de l’étape 1 ?

Sans le paramétrage complet de vos activités, il est difficile de savoir pourquoi les champs ne sont pas présents à la fin.

Dans un screen-flow les données de chaque activités sont en mémoire. Si la syntaxe [stepname(.stepindex).groupname.dataname] ne fonctionne pas dans votre cas :

  • Vous pouvez aussi les récupérer dans le hook postValidate de chaque étape, le contexte contient les valeurs courantes
  • ou les re-forcer par la hook preLock de la dernière activité, il est possible d’accéder à la première activité et lire ses données.

Par exemple :

@Override
public Message preLock(ActivityFile context) {
	String step = context.getActivity().getStep();
	// Last summary activity
	if ("MyStep3".equals(step)) {
		// read data from 1st activity
		Activity a = getActivity("MyStep1"); // definition de l'activité MyStep1
		ActivityFile af = getContext(a, null); // instance de cette activité traversée (aid = null dans un screenflow)
		String value = af.getDataValue("Data", "myField1"); // ou groupe "Field" si c'est un formulaire d'objet
		// Set summary values
		context.setDataFile("Data", "mySummaryField1", value);	
		// ...
	}
	return null;
}

Si les données en mémoire sont fausses c’est que vos activités sont mal isolées = utilise les mêmes champs ou objets.

Dans une activité de type Condition avec template, le groupe de données est “Data”, si c’est une Création d'objet, c’est le groupe “Field” qui contient les champs.

1 Like

Bonjour Francois, merci pour ce retour rapide. J’ai affectué quelques tests avant de pouvoir répondre à tout.

Le paramétrage se fais avec un objet persistant à l’étape 1,

c’est la même données d’activités sur chaque étape et via le code je mets en visible ou pas des zones d’attributs.

J’ai ajouté une Etape Introduction avec le meme objet que les suivant en persistant dans le prelock via cette activité et le problème est réglé.

Toute les donnés d’attribut persisté ou expresions calculé sont enregistrés.

Cela ne marchait pas initialement car les champs posant problèmes initialement sont des expressions calculés qui en fonction du champs selectionée par l’utilisateur lance une methode dans l’objet principal qui fais une requete sql pour recuperer une valeur, ensuite cette valeur est set dans la table d’association, qui est ensuite utilisé pour afficher ce qu’il y a dans le champs.

Toute cette logique étant dans le object LegalText qui doit obligatoirement être créer pour pouvoir effectuer toute ses opérations.
J’ai essayé de mettre ses opérations dans un initCreate mais vu que l’objet n’est pas créer, pas de creation dans la table d’association car LegalTextrowid = 0 et lorsque la methode est appelé apres la creation les attributs concernés étaient vides…

En fesant ce petit détour de d’abord creer un Object LegalText d’abord dans l’intro, les expresions calculé et la logique dans la table d’association sont bien effectué,
existerait-il un moyen de faire autrement ? ( sans passer par un étape de creation par l’intro ? )

Merci encore pour ses informations et ses retours.

Pas sûr de vous comprendre, mais il est tout à fait possible de pré-créer l’objet par code avant son affichage en mise à jour du coup.

  • L’activité 1 peut être une activité de création en back non affichée (dialogue utilisateur = non) dont le code devra créer votre objet X (au preValidate de l’étape par exemple, il faudra setter tous les champs via context.setDataFile)
  • L’activité 2 est alors activité de mise à jour de X (dialogue utilisateur = oui), il faudra lui spécifier le row_id du groupe “Field” pour afficher X :
@Override
public Message preLock(ActivityFile context) {
	String step = context.getActivity().getStep();
	// Step 2 = Update the object created at step 1
	if ("MyStep2".equals(step)) {
		ActivityFile af = getContext(getActivity("MyStep1"));
		String rowId = af.getDataValue("Field", "row_id");
		// Force the row_id to be opened
		context.setDataFile("Field", "row_id", rowId);	
	}
	return null;
}

Bonjour Francois, merci pour ses retours rapides.

Petite question concernant cette approche au niveau de l’approche simplicité ( j’ai compris l’approche code sur le prelock). Au niveau de mes transition d’activité je dois donc faire ce scénario

—Begin-Activité2-3-4-Fin— ?

Ce scénario de transition d’activité est sans mettre l’activité 1,ou devrais-je bien quand même la mettre dans mes transitions d’activités ?

J’ai voulu tester l’approche rapidement avec l’activité 1 (Begin-1-2-3-4-End) en dialogueUtilisateur(No), le process ne se lance pas car le dialogue utilisauter à non, je n’ai donc pour le moment laisser avec une intro :slight_smile:
,j’ai aussi essayé le scénario sans l’activité 1 en transition et juste avec la donnée d’activité de la 1 dans l’étape2 de l’objet mais même problème sur certains attributs.

Tout est possible.
Vous pouvez effectivement vous passer de l’activité 1.
Dans ce cas, il faut pré-créer l’objet nécessaire dans le preLock (avant ouverture) de l’activité 2 qui devra être de type Mise à jour (et pas création) à la place d’aller chercher le rowId de l’activité 1.

Exemple :

@Override
public Message preLock(ActivityFile context) {
	String step = context.getActivity().getStep();
	if ("MyStep2".equals(step)) {
		// pre-create the object before update at step 2
		ObjectDB o = getGrant().getTmpObject("MyObject1");
		try {
			o.resetValues(true, ObjectField.DEFAULT_ROW_ID);
			o.setFieldValue("myField1", "...");
			// ...
			o.getTool().validateAndSave();
		}
		catch (Exception e) {
			AppLog.error("error", e, null);
			return Message...
		}
		// Force the row_id to be opened at step 2
		context.setDataFile("Field", "row_id", o.getRowId());	
	}
	return null;
}
1 Like

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.