Je créé un objet métier temporaire qui contiendra les informations de mon objet métier, tout cela pour essayer de récuperer le nom de cette classe mère
Mon objet temporaire à bien les informations de mon objet, cependant il ne reconnait pas l’existance du champ “code héritier de”, existe-t-il une méthode qui permet de récupérer ce champ ou bien il faut passer par d’autres moyens ?
Il y a confusion entre l’objet et les metadonnées de l’objet = les attributs de l’objet système ObjectInternal ne sont bien entendu pas accessible depuis votre objet BCSISubFinalityLov
Mais bon, de manière générale vous ne devriez jamais avoir à utiliser les objets système de la plateforme.
En fait je ne comprend pas le besoin qui se cache derrière votre demande…
Mon intention était de récupérer le nom de l’objet père (ici ce qui est présent dans dans "obo_extend_id.obj_name) afin de pouvoir avoir les traductions que celui-ci possède et partage avec l’objet fils (ici BCSISubFinalityLov) en passant par les object field translate
Si il existe un autre moyen de faire celà, je suis tout ouïe
Votre objet fils hérite de tout ce qui est paramétré au niveau de l’objet père (notamment les attributs et leurs traductions)
Il n’y a donc aucune raison d’aller fouiller dans les objets système pour ça.
Cela doit allumer un voyant “warning”=> si vous pensez devoir utiliser des objets système il y a 99% de chances pour que ça ne soit pas la bonne approche.
Les utilisateurs ont la possibilité de changer la langue de certains objets présent dans le projet, ces traductions sont présentes dans la traduction d’attribut d’objet, cependant certains de ces objets ont des attributs venant d’un objet père que je n’ai pas pu récupérer
Votre besoin est quelque chose auquel je n’ai jamais été confronté…
Pour être sûr de bien comprendre vous voulez, au sein d’une session utilisateur, pouvoir afficher les traductions d’un objet et de ses attributs dans une langue ou une autre à la demande, c’est ça ?
Comment avez vu envisagé la bascule entre langue, par une action avec paramètre ?
En tout état de cause pour y répondre il faut passer par les APIs Java “bas niveau” de Simplicité (CoreCache, etc), certainement pas en allant manipuler directement des objets système.
Exactement, un utilisateur a la possibilité de choisir une des langues disponible dans la liste de choix possible puis valider ce choix, puis en clquant sur le bouton de validation, l’objet se recharge avec la langue choisie
Pour le coup je me trompe peut-être en essayant d’aller vers les objets systemes mais du coup quelle serait la méthode adaptée afin de récupérer la traduction d’un attribut d’objet, que l’attribut soit dans l’objet père ou bien dans l’objet fils ?
Ok la langue est un attribut de l’objet; en fonction de la valeur de cet attribut les libellés s’affichent dans la la,gue sélectionné c’est ça ?
J’essaie de bien comprendre le besoin pour voir quelle(s) APIs “bas niveau” il faudra utiliser. En effet au niveau du core cache Simplicité on a les traductions dans toutes les langues mais dans la session on ne récupère que les traductions dans la langue du user. En tout cas réinventer ce que fait déjà l’object loader en tapant sur les objets systèmes n’est clairement pas la bonne approche.
La langue n’est pas un attribut de l’objet, quand l’utilisateur entre dans un objet, il peut soit laisser la langue par défaut, soit choisir une langue dans une liste afin de l’appliquer sur l’objet où il travail
Les langues font parti de la liste de langue que l’on a créé pour les traductions
par exemple:
L’utilisateur a le droit d’alterner dans l’objet BCSIAppPerson, l’attribut usr_login en Français, en Anglais ou bien dans une langue qu’on appelle le BIM
Pour cela j’ai besoin de savoir comment avoir la traduction d’un attribut d’objet, que l’attribut soit dans l’objet actuel ou bien dans l’objet père, ou le cas échéant, récupérer juste le nom de l’objet père qui se trouve dans “code héritier de”
De ce que je vois la langue est bien un attribut de votre objet… Merci de clarifier.
Pour le reste ne restez pas bloqué sur votre approche où vous essayez de refaire - en moins bien - ce que fait déjà l’object loader. Ici la solution c’est, je pense, juste de recharger la définition de l’objet dans la langue du record sur lequel on se trouve. Je suis en train de regarder comment faire (mais je voudrais être sûr de la réponse à ma question sur le fait que la langue est bien, comme je le pense, un des attributs de votre objet)
De manière générale quand vous sollicitez notre support il vaut mieux nous exprimer votre besoin plutôt que poser une question fermée sur un point de détail d’une solution qui n’est peut être pas du tout la bonne approche.
Pour le coup, la langue est un champ que l’on avait pas créer nous même mais utiliser ce qui était existant dans Simplicité, si Simplicité considère ce champ comme un attribut d’objet, dans ce cas, oui c’est un attribut d’objet
Bon OK cet attribut est un des attributs de votre objet, peu importe que ça soit un attribut déjà existant ou paramétré spécifiquement pour votre objet, là n’est pas le débat…
public class AppObject1 extends ObjectDB {
private static final long serialVersionUID = 1L;
private void reload(String lang) {
Grant g = getGrant();
String l = g.getLang(); // Keep user's language
g.setLang(lang); // Force user's language to object record's language
setData(null); // Flush object's data
load(g); // Reload object's definition
g.setLang(l); // Restore user's language
}
@Override
public void initList(ObjectDB parent) {
ObjectFieldSearch[] filters = getFilters(); // Keep filters
reload(getGrant().getLang());
setFilters(filters); // Restore filters
}
@Override
public void initCreate() {
reload(getGrant().getLang());
}
@Override
public void initCopy() {
initCreate();
}
@Override
public void initUpdate() {
String lang = getFieldValue("appObj1Lang");
if (Tool.isEmpty(lang))
lang = getGrant().getLang();
String rowId = getRowId(); // Keep current record's row ID
reload(lang);
select(rowId); // Re-select record
}
}
SI je comprend bien votre code, vous changez temporairement la langue de la session le temps d’afficher l’objet, n’existe-il pas une méthode plus simple qui permettrait de recupérer la traduction d’un attribut si on lui donne le nom de l’attribut et une langue en paramètre ?
Mon approche qui consiste à recharger la définition de l’objet dans la langue du record ouvert en update (et d’utiliser la langue du user dans les autres cas) est clairement la bonne approche.
Vous avez une vision beaucoup trop restrictive de votre besoin: les “traductions” c’est pas uniquement les libellés des attributs c’est aussi la traduction de l’objet, les traductions des zones d’attributs, les différentes aides (aide globale, contextuelles, aides d’attributs, tooltips, placeholders, etc.):
Bien entendu il serait possible d’optimiser mon code pour ne recharger la définition que si la langue du record ouvert n’est pas la langue du record précédement ouvert. etc. Je peux améliorer mon code pour cela si vous ne voyez pas comment faire.