Bonjour,
J’utilise les champs de modèle personnalisés de attrs.
Tout fonctionne bien quand on se limite à utiliser ces champs directement via le modèle parent.
Mais le mapping ne fonctionne pas lorsque l’on souhaite accéder à ces champs via une relation.
Exemple:
Champs personnalisés sur Product:
- custom1
- custom2
Ce qui fonctionne
model=« com.axelor.apps.base.db.Product »
- Requette JPQL dans les domain des vues
self.custom1 = … and self.custom2 like …
- Champ dans une grid ou un formulaire
<field name="attrs.custom1" width="80"/>
Ce qui ne fonctionne pas
model=« com.axelor.apps.production.db.ManufOrder »
- Requette JPQL dans les domain des vues
self.product.code like … and self.product.attrs.custom1 = …
(on peut contourner le problème avec jsonb_extract_path_text(self.product.attrs,‹ custom1 ›) = …
- Champ dans une grid ou un formulaire
<field name="product.attrs.custom1" width="80"/>
Pour les JPQL on corrige en modifiant JsonFunctio.java si l’on utilise attrs dans la chemin du champ
@Override
public String toString() {
String _attrs = attribute;
String _field = field;
if(_attrs.contains("attrs.")) {
_attrs = _attrs.replace("attrs.", "");
_field = _field + ".attrs";
}
final StringBuilder builder =
new StringBuilder()
.append("json_extract_")
.append(type)
.append("(")
.append("self.")
.append(_field);
for (String item : _attrs.split("\\.")) {
builder.append(", ").append("'").append(item).append("'");
}
return builder.append(")").toString();
}
}
Je n’ai pas réussi contourner le problème simplement dans les vues, si on permet au Selector de prendre en compte le champ Query.java ligne 732
if (json != null && json.isJson()) {
this.names.add(func.getField() + "." + func.getAttribute());
selects.add(func.toString());
} else if (json != null && json.isReference()) {
this.names.add(func.getField() + "." + func.getAttribute());
selects.add(func.toString());
}
c’est au niveau du code JS que cela coince… widget.slickgrid.js ligne 432
"json": function(field, value) {
if (!value || !field.jsonFields || field.jsonFields.length === 0) return "";
Je ne suis donc pas allé plus avant…
Pensez-vous prendre en charge ces cas d’utilisation des champs personnalisés dans les futures versions de l’ADK?