Tester la présence d'un champ sur un Member (getFieldValue)

Emilie Gryncajger · le 20/05/19 à 14:44

Bonjour tout le monde,

Dans le cadre d'un développement, je cherche à vérifier si le type de contenu membre possède un champ donné. Je me suis tournée vers la méthode getFieldValue (fieldName, lang, useDefault) qui me permet de récupérer la valeur d'un champ passé en paramètre et me renvoie NoSuchFieldException si le champ n'existe pas. Cela me va pas mal, sauf que je ne parviens à faire fonctionner cette méthode. 

ex : paramMember.getFieldValue("info", channel.getCurrentUserLang(),true);

>> cela fonctionne bien pour le champ info

mais ;

paramMember.getFieldValue("name",channel.getCurrentUserLang(),true);

paramMember.getFieldValue("email",channel.getCurrentUserLang(),true);

paramMember.getFieldValue("login",channel.getCurrentUserLang(),true);

>> cela me renvoie NoSuchFieldException

 

Ai-je mal compris l'appel à cette méthode ? 

Comment puis-je sinon tester plus simplement si un membre possède un champ en fonction d'un nom de champ passé en paramètre ? 

 

J'espère avoir été claire dans ma question.

Merci à vous pour vos éclaircissements,

 

P.S : je précise que je travaille sur une 9SP4

 

Bonne journée,

 

Emilie

13 pts
Olivier Jaquemet - le 21/05/19 à 15:27
Meilleure réponse

Bonjour,

Vous utilisez bien l'API, mais pour les Member les méthodes setFieldValue et getFieldValue ne supportent actuellement que le champ "info" (et uniquement pour les Member, les DBMember ne bénéficiant pas du champ info). 
J'ai saisi l'issue suivante pour faire évoluer l'API : JCMS-7387

En attendant, vous pouvez passer par la reflection, par exemple grace à la classe com.jalios.util.ReflectUtil :

  • Pour simuler le getter
    ReflectUtil.getFieldValue(mbr, ReflectUtil.getField(mbr.getClass(), fieldName));
    
  • Et pour le setter : 
    ReflectUtil.setFieldValue(mbr, ReflectUtil.getField(mbr.getClass(), fieldName), fieldValue);​

Cela fonctionnera sans problème pour tous les champs textes suivants : 

  • "login"
  • "name"
  • "firstName"
  • "salutation"
  • "organization"
  • "department"
  • "jobTitle"
  • "email"
  • "phone"
  • "mobile"
  • "street"
  • "photo"
  • "postalCode"
  • "poBox"
  • "locality"
9 pts
Emilie Gryncajger · le 21/05/19 à 16:16

Merci beaucoup Olivier, cela me dépanne bien !

1 pt