initAction pour les transitions avec action et champs de confirmation en row+form

Request description

Bonjour,

Depuis le patch 5.3.37 nous constatons deux régressions sur les Actions :

  • sur les actions visibles en List (rowId = null), le confirmUI n’est plus appelé : au lieu d’avoir le formulaire avec les attributs d’action, nous avons directement l’écran confirmation par défaut sans les champs.

image

Si nous passons cette action en Row au lieu de List, nous avons bien l’écran avec nos attributs d’action.
image

  • sur les actions visibles en Row il semble que le initAction soit maintenant appelé après l’affichage des attributs d’action ; or nous initialisons certains de ces attributs dans le initAction, ils apparaissent donc vides

Au 2ème appel

Quelques miettes d’analyse que j’ai glanées dans le bundle ui : il semble qu’on ne rentre pas dans la fonction Init en affichage Row.
Et je vois que cette méthode a changé entre les deux patchs, est-ce que ça pourrait expliquer qu’on entre dans initAction après l’écran de confirmation ?

La fonction init avant le patch 37

        function init(item) {
            obj.action(a.name, {
                init: true,
                values: item.data || item
            }).then(r=>{
                a.fields = r.fields;
                view.form.confirm(a, obj).then(run).catch(()=>{}
                );
            }
            );
        }

La fonction init après le patch

function init(item) {
            obj.action(a.name, {
                init: true,
                values: item.data || item
            }).then(r=>{
                a.fields = r.fields;
                a.confirmUI = r.confirmUI;
                view.form.confirm(a, obj, run).catch(()=>{
                    if (a.reloadOnCancel) {
                        ui.reloadForm(a.container);
                        delete a.reloadOnCancel;
                    }
                }
                );
            }
            );
        }

Vous serait-il possible de nous proposer un contournement à appliquer en attendant un correctif définitif ? Car ce problème nous bloque dans la dernière ligne droite d’un projet :slight_smile:

Merci d’avance pour votre aide
Emmanuelle

Technical information

Instance /health
[Platform]
Status=OK
Version=5.3.37
BuiltOn=2024-05-03 13:49

Le cas d’une action de liste a déjà été détecté dans un forum privé
et le patch sera livré en 5.3.38.

Cela fait suite à ton post de double appel à l’initAction, on a revu la mécanique pour n’appeler l’initAction qu’au click sur l’action, et le cas d’une liste a été oublié.

Par contre au niveau row, on va retester car ça ne me dit rien.

1 Like

Oui je pensais que ça pouvait venir de ce patch en effet. Qui a d’ailleurs largement amélioré nos performances à l’affichage.

Si je peux donner plus d’informations sur le 2ème point n’hésite pas.

L’initAction et la recopie front des metadata de l’action fonctionne sur une ligne suite au correctif.
Par contre, les valeurs à confirmer d’une action de ligne n’avait jamais été valorisées, on l’a rajouté.

C’est bizarre car ça fonctionnait correctement chez nous avant le patch pour les actions de ligne.
As-tu une idée de la date de livraison ? Sinon une possibilité de contournement à mettre en place chez nous aujourd’hui pour débloquer l’équipe de test ?

Merci d’avance

Nous allons pousser les révision 5.3.38 et 6.0.11 d’ici la fin de la semaine

1 Like

Oui je parle d’un autre sujet, les champs de l’objet à confirmer en lecture n’étaient pas valorisés depuis la création de cette fonctionnalité. Par contre les champs en saisie sont bien présents.

Tout fonctionnait bien en 5.3.36, il faut y revenir en attendant.
L’optimisation du “double appels” a été faite rapidement pour ton projet pour un autre besoin toujours aussi urgent.

Il va falloir réfléchir à 2 fois avant de nous demander des choses trop rapidement, car 1 patch sur 2 devient un correctif du précédent car trop partiellement analysé, nous n’avons jamais le temps de faire une phase de test/pre-release d’1 mois entre chaque patch.

Après installation de la 5.3.38, le problème des attributs d’action est résolu sur les actions en Liste mais

  • nous avons toujours un ObjectFieldList non initialisé au premier appel de l’action en Row
  • le problème des attributs d’action reste présent sur les actions de transition d’état

Nous sommes revenus en 5.3.36 et n’avons plus ces problèmes, ce n’est donc pas urgent. Nous installerons la prochaine release stabilisée.

Là ça dépend peut-être du code de l’initAction.
Peux tu nous expliquer comment l’ENUM est chargé dynamiquement / bout de code ? pour qu’on puisse reproduire.

On va regarder car les transitions ne passent pas par le même tuyau : c’est un save sur l’objet qui modifie le statut (avec les données éventuelles de l’action), et pas un call de l’action. Il y a donc surement une différence de traitement quelque part qu’on va essayer d’aligner.

Ca se produit sur les lignes uniquement ou aussi sur le formulaire ?
Comment tu récupères les données de l’action dans ce contexte pre/post Validate/Save ?

Voici le code de mon initAction

ObjectField f = action.getConfirmField(lang, COUNTRY_FIELDNAME);
ObjectField org = action.getConfirmField(lang, ORG_FIELDNAME);
ObjectField orgdom = action.getConfirmField(ORG_DOMNAME_FIELDNAME);
			
ObjectDB sub = getGrant().getTmpObject("RciSubsidiary");
sub.resetFilters();
sub.getField("rciSubScope").setOrder(1);
			
List<String[]> subList = sub.search();
			
f.getList().getItems().clear();
for (int i = 0 ; i < subList.size() ; i++)
{	
	sub.setValues(subList.get(i));
	f.getList().putItem(sub.getRowId(), sub.getFieldValue("rciSubScope"), true);
}

Je l’ai implémenté suite à ce ticket https://community.simplicite.io/t/association-via-attribut-daction/6378

Pour la transition, j’ai le souci en ligne et en formulaire, et je ne l’ai pas sur la 5.3.36.
Je récupère la valeur dans le preAlert mais le problème est avant car je n’ai pas le champ dans la popup de confirmation.

Action a = this.getStatusField().getStateTransitionAction("RCIAPPRECORDSTATUS-TOREVIEW");
if (a!=null) 
{
	ObjectField f = a.getConfirmField(getGrant().getLang(), "rciAppValidationComment");
	String value = f.getValue();
					
	if (value.isEmpty()) value = "NA";
	String content = alert.getContent(getGrant().getLang());
	content = content.replace("[COMMENTS]", value);
	alert.setContent(getGrant().getLang(),content);
			
}

Dans cette version l’initAction était appelé dès l’ouverture du formulaire.
Puis rappelé au click de certaines actions.

Dans les versions suivantes, il est appelé uniquement si on utilise l’action, pour corriger ton problème de double appels et pour optimiser les traitements dans le cas général.

On va investiguer tes 2 sujets d’action avec attributs :

  • de rechargement dynamique d’ENUM
  • et de transition d’état en ligne et en formulaire
1 Like
  1. Une liste dynamique se recharge correctement, exemple sur la démo :

le champ demoPrdType2 est une copie de demoPrdType et attaché à l’action DEMO_INCSTOCK

@Override
public void initAction(Action action) {
	if ("DEMO_INCSTOCK".equals(action.getName())) {
		// ...
		ObjectField f = action.getConfirmField("demoPrdType2");
		f.getList().getItems().clear();
		f.getList().putItem("code1", Tool.randomString(10), true);
		f.getList().putItem("code2", "value 2", true);
		f.getList().putItem("code3", "value 3", true);
	}
}

A chaque action (form / row), on a bien sur sa confirmation une liste de 3 éléments dont le premier qui change de libellé de façon aléatoire.

  1. initAction sur une transition d’état avec action de confirmation avec attributs

L’appel du hook n’était pas implémenté dans ce cas, ce sera livré dans la prochaine version 5.3.39.

1 Like

Pour le 1., on a contourné en utilisant une liste fixe donc ça ne nous pose plus de problème.
Par curiosité j’ai continué l’analyse, dans Network je vois qu’au premier appel j’ai un ObjectFieldList vide dans la Réponse, et au deuxième appel j’ai bien mes valeurs.
Pourtant initAction est appelé même dans le premier appel.

> 2024-05-29 14:46:11,670|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DEBUG|system|com.simplicite.webapp.servlets.ui.JSONServlet|service||Event: Scheme : [https]
> Port : [443]
> Hostname : [ear-trn.k8s-stage.grouperci.com]
> Context path : []
> Request URI : [/ui/json/obj]
> Request URL : [https://ear-trn.k8s-stage.grouperci.com/ui/json/obj]
> Query string : [action=createApp&object=RciPRA&inst=home_ajax_RciPRA_3&_init=true&_=5_3_38_20240529144551&_ajaxkey=AdLKdsyVKB8NMItWgtSr&_tabid=iFsdw]
> Full URL : [https://ear-trn.k8s-stage.grouperci.com/ui/json/obj?action=createApp&object=RciPRA&inst=home_ajax_RciPRA_3&_init=true&_=5_3_38_20240529144551&_ajaxkey=AdLKdsyVKB8NMItWgtSr&_tabid=iFsdw]
> Base URL : [https://ear-trn.k8s-stage.grouperci.com]
> Method : [POST]
> Request encoding : [null]
> Request content type : [multipart/form-data; boundary=----WebKitFormBoundaryGsPPUQAvMxj2RnIE]
> Request content length : [1905]
> Remote address : [10.42.217.169]
> Remote host : [10.42.217.169]
> Authentication type : [null]
> User login : [designer]
> Session : [34B0C935C0AFB387504B1C41EDD8E8EF]
> Cookies :
> 	rxVisitor = [1712839521761BPI6IS6M2JDCVKQH65DM4H80DTGR5RFM]
> 	dtCookie = [v_4_srv_51_sn_939AE447C2B7591F3E96F7902C02481D_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1_app-3Ab75294b74de25c6d_1_app-3A882521fb28e70aa2_1_rcs-3Acss_0]
> 	dtSa = [-]
> 	rxvt = [1716909275923|1716907475671]
> 	dtPC = [51$307475647_802h1vTGPHAGLGFRPLHUHJLAREKKAFRERCCUVB-0e0]
> 	JSESSIONID = [34B0C935C0AFB387504B1C41EDD8E8EF]
> Headers :
> 	accept = [*/*]
> 	accept-encoding = [gzip, deflate, br, zstd]
> 	accept-language = [en,fr;q=0.9,fr-FR;q=0.8,en-US;q=0.7]
> 	connection = [close]
> 	content-length = [1905]
> 	content-type = [multipart/form-data; boundary=----WebKitFormBoundaryGsPPUQAvMxj2RnIE]
> 	cookie = [rxVisitor=1712839521761BPI6IS6M2JDCVKQH65DM4H80DTGR5RFM; dtCookie=v_4_srv_51_sn_939AE447C2B7591F3E96F7902C02481D_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1_app-3Ab75294b74de25c6d_1_app-3A882521fb28e70aa2_1_rcs-3Acss_0; dtSa=-; rxvt=1716909275923|1716907475671; dtPC=51$307475647_802h1vTGPHAGLGFRPLHUHJLAREKKAFRERCCUVB-0e0; JSESSIONID=34B0C935C0AFB387504B1C41EDD8E8EF]
> 	host = [ear-trn.k8s-stage.grouperci.com]
> 	origin = [https://ear-trn.k8s-stage.grouperci.com]
> 	referer = [https://ear-trn.k8s-stage.grouperci.com/ui]
> 	sec-ch-ua = ["Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"]
> 	sec-ch-ua-mobile = [?0]
> 	sec-ch-ua-platform = ["Windows"]
> 	sec-fetch-dest = [empty]
> 	sec-fetch-mode = [cors]
> 	sec-fetch-site = [same-origin]
> 	user-agent = [Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36]
> 	x-forwarded-for = [10.253.85.24]
> 	x-forwarded-host = [ear-trn.k8s-stage.grouperci.com]
> 	x-forwarded-port = [443]
> 	x-forwarded-proto = [https]
> 	x-real-ip = [10.253.85.24]
> 	x-requested-with = [XMLHttpRequest]
> Parameters :
> 	_[0] = [5_3_38_20240529144551]
> 	_ajaxkey[0] = [AdLKdsyVKB8NMItWgtSr]
> 	_init[0] = [true]
> 	_tabid[0] = [iFsdw]
> 	action[0] = [createApp]
> 	inst[0] = [home_ajax_RciPRA_3]
> 	object[0] = [RciPRA]
> 
> 2024-05-29 14:46:11,670|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DEBUG|system|com.simplicite.webapp.tools.ServletTool|setHTTPHeaders||Event: [REQUEST] method POST on /ui/json/obj from 10.253.85.24 with session 34B0C935C0AFB387504B1C41EDD8E8EF, [RESPONSE]  MIME type: application/json; charset=UTF-8 max age: 0 seconds
> 2024-05-29 14:46:11,671|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DEBUG|designer|com.simplicite.util.engine.CoreCache|instantiateObject||Event: Instanciated implementation com.simplicite.objects.RCIB.RciPRA for object RciPRA
> 2024-05-29 14:46:11,673|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DCOREDB001|system|com.simplicite.util.engine.GrantManager|query||SQL query: select d.dbd_name, d.dbd_path, d.dbd_size, d.dbd_vers, d.dbd_mime, d.dbd_resp_id, d.dbd_index_id, o.obj_name, f.fld_name, d.dbd_row_id, d.updated_dt from m_document d left outer join m_object o on (d.dbd_object_id=o.row_id) left outer join m_field f on (d.dbd_field_id=f.row_id) where d.row_id=178470
> 2024-05-29 14:46:11,675|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DCOREDB001|system|com.simplicite.util.engine.GrantManager|query||SQL query: select din_name from m_docindex where row_id=7
> 2024-05-29 14:46:11,676|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DEBUG|designer|com.simplicite.util.engine.CoreCache|instantiateObject||Event: Instanciated implementation com.simplicite.objects.RCIB.RciSubsidiary for object RciSubsidiary
> 2024-05-29 14:46:11,679|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DCOREDB001|system|com.simplicite.util.engine.GrantManager|query||SQL query: select d.dbd_name, d.dbd_path, d.dbd_size, d.dbd_vers, d.dbd_mime, d.dbd_resp_id, d.dbd_index_id, o.obj_name, f.fld_name, d.dbd_row_id, d.updated_dt from m_document d left outer join m_object o on (d.dbd_object_id=o.row_id) left outer join m_field f on (d.dbd_field_id=f.row_id) where d.row_id=177149
> 2024-05-29 14:46:11,681|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DCOREDB001|system|com.simplicite.util.engine.GrantManager|query||SQL query: select din_name from m_docindex where row_id=7
> 2024-05-29 14:46:11,682|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DCOREDB001|system|com.simplicite.util.engine.ObjectManager|query||SQL query: jdbc/simplicite: select t.row_id, t.rci_sub_headcount, t.rci_sub_name, t.rci_sub_description, t.rci_sub_majortechnologies, t.rci_sub_comments, t.rci_sub_cioname, t.rci_sub_cou_id, t_rciSubCouId.cty_code2, t_rciSubCouId.cty_name, t_rciSubCouId.iso_cty_ctygrp_id, t_isoCtyCtygrpId.iso_ctygrp_code, t.rci_sub_flag, t.rci_sub_bce_dataflows_model_id, t_rciSubBceDataflowsModelId.mod_name, t.rci_sub_org_dataflows_model_id, t_rciSubOrgDataflowsModelId.mod_name, t.rci_sub_fct_dataflows_model_id, t_rciSubFctDataflowsModelId.mod_name, t.rci_sub_scope, t.rci_field_is_archived, t.created_dt, t.created_by, t.updated_dt, t.updated_by from rci_subsidiary t left outer join iso_country t_rciSubCouId on (t.rci_sub_cou_id=t_rciSubCouId.row_id) left outer join iso_country_grouping t_isoCtyCtygrpId on (t_rciSubCouId.iso_cty_ctygrp_id=t_isoCtyCtygrpId.row_id) left outer join m_model t_rciSubBceDataflowsModelId on (t.rci_sub_bce_dataflows_model_id=t_rciSubBceDataflowsModelId.row_id) left outer join m_model t_rciSubOrgDataflowsModelId on (t.rci_sub_org_dataflows_model_id=t_rciSubOrgDataflowsModelId.row_id) left outer join m_model t_rciSubFctDataflowsModelId on (t.rci_sub_fct_dataflows_model_id=t_rciSubFctDataflowsModelId.row_id)  order by t.rci_sub_scope asc, t.row_id asc
> 2024-05-29 14:46:11,686|SIMPLICITE|INFO||http://simplicite-trn-5768d8f76f-q7rfl:8080||INFO|designer|com.simplicite.objects.RCIB.RciPRA|EFE initaction : ||Event: 0
> 2024-05-29 14:46:11,686|SIMPLICITE|INFO||http://simplicite-trn-5768d8f76f-q7rfl:8080||INFO|designer|com.simplicite.objects.RCIB.RciPRA|EFE initaction : ||Event: {"name":"RCICOUNTRIES","items":[]}
> 2024-05-29 14:46:11,687|SIMPLICITE|INFO||http://simplicite-trn-5768d8f76f-q7rfl:8080||INFO|designer|com.simplicite.objects.RCIB.RciPRA|EFE initaction2 : ||Event: 69
> 2024-05-29 14:46:11,687|SIMPLICITE|INFO||http://simplicite-trn-5768d8f76f-q7rfl:8080||INFO|designer|com.simplicite.objects.RCIB.RciPRA|EFE initaction2 : ||Event: {"name":"RCICOUNTRIES","items":[{"code":"58","readonly":false,"value":"AE","enabled":true},{"code":"25","readonly":false,"value":"AM","enabled":true},{"code":"2","readonly":false,"value":"AR","enabled":true},{"code":"3","readonly":false,"value":"AT","enabled":true},{"code":"26","readonly":false,"value":"AU","enabled":true},{"code":"27","readonly":false,"value":"AZ","enabled":true},{"code":"4","readonly":false,"value":"BE","enabled":true},{"code":"28","readonly":false,"value":"BG","enabled":true},{"code":"53","readonly":false,"value":"BH","enabled":true},{"code":"65","readonly":false,"value":"BL","enabled":true},{"code":"5","readonly":false,"value":"BR","enabled":true},{"code":"21","readonly":false,"value":"CH","enabled":true},{"code":"29","readonly":false,"value":"CN","enabled":true},{"code":"30","readonly":false,"value":"CO","enabled":true},{"code":"69","readonly":false,"value":"CORP","enabled":true},{"code":"7","readonly":false,"value":"CZ","enabled":true},{"code":"1","readonly":false,"value":"DE","enabled":true},{"code":"8","readonly":false,"value":"DK","enabled":true},{"code":"24","readonly":false,"value":"DZ","enabled":true},{"code":"32","readonly":false,"value":"EE","enabled":true},{"code":"9","readonly":false,"value":"ES","enabled":true},{"code":"33","readonly":false,"value":"FI","enabled":true},{"code":"10","readonly":false,"value":"FR","enabled":true},{"code":"23","readonly":false,"value":"GB","enabled":true},{"code":"34","readonly":false,"value":"GE","enabled":true},{"code":"59","readonly":false,"value":"GP","enabled":true},{"code":"35","readonly":false,"value":"GR","enabled":true},{"code":"61","readonly":false,"value":"GY","enabled":true},{"code":"52","readonly":false,"value":"HK","enabled":true},{"code":"31","readonly":false,"value":"HR","enabled":true},{"code":"36","readonly":false,"value":"HU","enabled":true},{"code":"38","readonly":false,"value":"ID","enabled":true},{"code":"11","readonly":false,"value":"IE","enabled":true},{"code":"39","readonly":false,"value":"IL","enabled":true},{"code":"37","readonly":false,"value":"IN","enabled":true},{"code":"12","readonly":false,"value":"IT","enabled":true},{"code":"40","readonly":false,"value":"JP","enabled":true},{"code":"6","readonly":false,"value":"KR","enabled":true},{"code":"54","readonly":false,"value":"KW","enabled":true},{"code":"41","readonly":false,"value":"KZ","enabled":true},{"code":"42","readonly":false,"value":"LT","enabled":true},{"code":"43","readonly":false,"value":"LU","enabled":true},{"code":"51","readonly":false,"value":"LV","enabled":true},{"code":"50","readonly":false,"value":"MA","enabled":true},{"code":"66","readonly":false,"value":"MF","enabled":true},{"code":"60","readonly":false,"value":"MQ","enabled":true},{"code":"45","readonly":false,"value":"MT","enabled":true},{"code":"44","readonly":false,"value":"MY","enabled":true},{"code":"46","readonly":false,"value":"NC","enabled":true},{"code":"14","readonly":false,"value":"NL","enabled":true},{"code":"13","readonly":false,"value":"NO","enabled":true},{"code":"55","readonly":false,"value":"OM","enabled":true},{"code":"68","readonly":false,"value":"PF","enabled":true},{"code":"15","readonly":false,"value":"PL","enabled":true},{"code":"64","readonly":false,"value":"PM","enabled":true},{"code":"16","readonly":false,"value":"PT","enabled":true},{"code":"56","readonly":false,"value":"QA","enabled":true},{"code":"62","readonly":false,"value":"RE","enabled":true},{"code":"17","readonly":false,"value":"RO","enabled":true},{"code":"18","readonly":false,"value":"RU","enabled":true},{"code":"57","readonly":false,"value":"SA","enabled":true},{"code":"20","readonly":false,"value":"SE","enabled":true},{"code":"47","readonly":false,"value":"SG","enabled":true},{"code":"19","readonly":false,"value":"SI","enabled":true},{"code":"48","readonly":false,"value":"SK","enabled":true},{"code":"22","readonly":false,"value":"TR","enabled":true},{"code":"49","readonly":false,"value":"UA","enabled":true},{"code":"67","readonly":false,"value":"WF","enabled":true},{"code":"63","readonly":false,"value":"YT","enabled":true}]}
> 2024-05-29 14:46:11,688|SIMPLICITE|DEBUG||http://simplicite-trn-5768d8f76f-q7rfl:8080||DEBUG|system|com.simplicite.webapp.tools.ServletTool|setHTTPHeaders||Event: [REQUEST] method POST on /ui/json/obj from 10.253.85.24 with session 34B0C935C0AFB387504B1C41EDD8E8EF, [RESPONSE]  MIME type: application/json max age: -1 seconds

Y aurait-il un paramétrage chez nous pouvant justifier que la Response au Call de mon action soit constituée avant passage dans le initAction ?
J’ai mis des sleep() au début du initAction et dans Network je vois que la date de dernière modification de la Response (15:37:55) est antérieure au passage dans initAction (15:38:05).

Merci d’ouvrir un ticket par sujet.
L’initAction a subit beaucoup de changement et nous traitons que les versions à jour.

Ce ticket concerne l’évolution livrée vendredi dernier pour que l’initAction soit appelé sur les actions de transition d’états, donc avant ouverture du popup des attributs donc qui attend la réponse (ton navigateur n’est pas à l’heure ou tu ne regardes pas les bons flux).