Champ ramené manquant au 2ème appel de initAction

Request description

Bonjour,

J’ai un comportement étrange au 2ème appel de mon initAction en cas de champ ramené.
Voici mon paramétrage

Code de mon initAction

if (action.getName().equals("createApp") || action.getName().equals("searchIRN"))
		{

			ObjectField f = action.getConfirmField(lang, COUNTRY_FIELDNAME);
			ObjectField org = action.getConfirmField(lang, ORG_FIELDNAME);
			ObjectField orgdom = action.getConfirmField(lang,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.getFieldValue("rciSubCouId"), sub.getFieldValue("rciSubScope"), true);
			}

			org.setRequired(false);
			orgdom.setRequired(false);
		}

Premier appel de l’action, j’ai bien mon champ Organization ramené

Si je lance l’action avec Confirm puis l’appelle une 2ème fois, le champ a disparu

Dans Network je vois que le champ est bien retourné par le initAction la première fois

Et pas la 2ème

Un CC permet de faire réapparaître le champ.

Avez-vous une idée de l’origine du problème ? Une piste d’analyse ?

Merci d’avance
Emmanuelle

Instance /health

[Platform]
Status=OK
Version=5.3.51
BuiltOn=2024-10-07 16:56
Git=5.3/de1f53c5bd692c1cfa059ca4357d106b320cad5d

Bonjour,

Une action front pouvant être appelée avec des champs variables (via une simple map champ/valeur donc sans Attributs d’action prédéfinis), un traitement avait été ajouté pour retirer les champs absents à chaque nouvel appel de l’action.

Peux-tu nous indiquer quels sont les paramètres envoyés dans le call ajax de l’action côté front ?
A mon avis, le champ est absent de la requête (si non renseigné) en front et du coup de back le retire à l’appel suivant.

Essaye de mettre l’organisation obligatoire pour voir si le champ disparait.

Si c’est ça le problème, il nous faudra corriger le front pour envoyer “vide”.

En attenant le correctif, tu pourras toujours mémoriser (au premier appel) et remettre l’attribut par code dans l’initAction via action.addConfirmField(lang, field) si absent.

D’accord en effet, on passe l’id mais pas le champ ramené lors du premier appel

image

Je vais appliquer le contournement que tu proposes, merci beaucoup.

[EDIT]
Le passage du champ en obligatoire ne règle pas le souci.
addConfirmField permet bien au champ d’apparaître, avec deux limites

  • le champ apparaît en fin de formulaire alors qu’il était en tête au premier appel
  • je suis obligée, je pense, d’utiliser un champ lié à un objet car la méthode demande un ObjectField (jusqu’ici j’avais créé des champs spécifiques à mon action)

En tout cas cela nous dépanne en attendant le correctif, ce n’est donc pas urgent.

Problème reproduit, le front optimise les données envoyées.
On va corriger pour ne pas retirer en back les “vrais” attributs d’action, mais bien ceux issus de l’ancienne API via Map.

Tu peux aussi insérer le champ directement dans la liste
action.getConfirmFields(lang)

private ObjectField myfield = null;
public void initAction(Action action) {
   // ...
   ObjectField f = action.getConfirmField(lang, "myField");
   if (f!=null)
      myfield = f;
   else if (myfield!=null) // insert at 2
      action.getConfirmFields(lang).add(2, myfield);
   // ...
}

Le pb est assez majeur pour qu’on relivre rapidement.

1 Like

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