Lien virtuel qui n'est plus appelé

Bonjour,

Je rencontre un cas aux limites étrange.
J’ai une liste d’objets Flow sur lesquel j’ai configuré un lien virtuel.

Quand j’affiche un de ces Flow mon lien virtuel fonctionne correctement.

Mais si j’affiche tour à tour plusieurs de ces Flow (je clique sur l’un, puis reviens sur la liste, puis clique sur un autre … une dizaine de fois environ) le lien virtuel n’est plus appelé. L’onglet Subflows data m’affiche la totalité des données et je vois dans les log SQL que la requête du lien virtuel n’apparaît plus.

Il faut que je vide le cache pour que le calcul se remette en place.

Voici la requête du lien

t.row_id in (select data.rci_fludata_data_id from rci_flow parent

left join rci_flow child on (parent.row_id = child.rci_flow_parent_flow_id)

left join rci_flo_dat data on (data.rci_flodat_flo_id= child.row_id)

where parent.row_id = [row_id])

/health
Version=4.0.P25
BuiltOn=2021-08-31 22:38 (revision 97272cb9362c8966378105679b80fa488568a5e1)

Merci d’avance pour votre aide !
Emmanuelle

Bonjour,

Aucune raison que la search-spec disparaisse toute seule. Il doit y avoir un mode opératoire qui permet de reproduire votre cas. Avez vous du code qui accède à la foreign-key virtuelle ? qui vide le cache partiel de l’objet ?

Vous pouvez forcer le filtre du lien sur votre champ virtuel à chaque recherche par code du style :

@Override
public void preSearch() {
  if (getParentObject()!=null 
  && getParentObject().getName().equals("Flow...") 
  && !Tool.isEmpty(getParentObject().getRowId())) {
     getField("virtualFK").setRefSearchSpec(
       "t.row_id in ( ...where parent.row_id=" + getParentObject().getRowId() + ")");
  }
}

Bonjour et merci pour ce retour !

Non je n’ai aucun code qui touche à cette clé, ni qui vide le cache de l’objet. C’est vraiment bizarre.

Je vais tester le code, merci !

Emmanuelle

Merci de confirmer que le contournement fonctionne par code.

Par contre cela n’explique pas la cause de la perte de cette search-spec sur la FK.
Simplicité accède au setRefSearchSpec dans 2 cas après avoir chargé la définition de l’objet :

  1. lors d’un select pour retirer ce filtre temporairement du search, il le remet ensuite sur l’objet dans un block synchronised et finally, donc à priori pas de concurrence d’accès possible.

  2. lors d’un init de l’objet en contexte de liste fille, sur le lien basé sur une FK row_metaobject_id (Field de type Object), donc rien à voir si votre relation est un lien virtuel (pas un Field de type Object).

Pour moi vous êtes dans un cas de concurrence d’accès 1).
Votre version date un peu, et je crois qu’un fix récent traitait d’un problème de concurrence d’accès sur les pillbox des listes filles, c’est peut être la même chose.

@Emmanuelle

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