Image du projet 'Agenda / Calendrier' téléversée
  1. Agenda / Calendrier
  2. AGENDA-28

DateHoraire vide affecté aux fiches lors enregistrement front

XMLWordImprimable

    • Icon: Bug Bug
    • Résolution: Résolu
    • Icon: Majeur Majeur
    • 2.01.00
    • 2.00.05
    • Aucune
    • Aucune
    • V6.1 Sprint final

      Bonjour,

      J'ai une fiche actualité en front, que je modifie et enregistre. Lors de l'enregistrement, des entrées DateHoraire et AgendaEvenement sont ajoutées en base de données avec que des valeurs nulles.

      A savoir qu'en front, le formulaire d'ajout d'une date agenda n'est pas proposé.

      Si je ré-enregistre la fiche, les anciennes entrées sont supprimées et remplacées par de nouvelles, toujours avec des valeurs nulles.

      Du coup, par la suite, je rencontre pas mal de NPE, notamment dans FormatDateHoraireAgendaUtil.formatDateHoraire qui n'aime pas les dates null.

      En back-office, l'enregistrement de la fiche n'entraîne pas l'ajout de ces entrées "vide". Par contre, les fiches qui contiennent ces entrées "vide" n'ont plus le plugin "agenda "visible" : un NPE s'est produit, l'affichage du formulaire de saisie dans l'onglet "plugins" ne se fait pas.

      En regardant le code.

      ControleurAgenda.java
      private int initDateHoraireFrontOffice(final Map<String, Object> infoBean, int nbDatehoraires) {
      		if (isSaisieFront(infoBean)) {
      			placerDateHoraireDansInfoBean(infoBean, new DateHoraireAgenda(), null);
      			nbDatehoraires++;
      		}
      		return nbDatehoraires;
      	}
      

      Ce code, appelé dans PreparerPrincipal(), initialise nbDatehoraires à 1.

      Puis on a :

      PreparerPrincipal()
      infoBean.put("AGENDAEVT_NB_ITEMS", nbDatehoraires);
      

      qui met cette valeur dans l'infoBean.

      J'ai maintenant le formulaire de saisie de la fiche en front. Je peux l'éditer et l'enregistrer. (sans le formulaire de saisie de datehoraire non dispo en front).

      Je passe alors dans traiterPrincipal() du plugin Agenda :

      ControleurAgenda.traiterPrincipal()
      @Override
      	public void traiterPrincipal(final Map<String, Object> infoBean, final FicheUniv ficheUniv, final Metatag meta) throws Exception {
      		if (isActive(ficheUniv.getClass().getName())) {
      			final ArrayList<DateHoraireAgenda> listeAgendaEvenement = new ArrayList<DateHoraireAgenda>();
      			final int nbdatehoraires = (Integer) infoBean.get("AGENDAEVT_NB_ITEMS");
      			for (int i = 0; i < nbdatehoraires; i++) {
      				final DateHoraireAgenda dateHoraireAgenda = construireDateHoraireDepuisInfoBean(infoBean, i, Boolean.TRUE, meta.getIdMetatag());
      				listeAgendaEvenement.add(dateHoraireAgenda);
      			}
      			ServiceAgenda.commiteListeDateHoraireAgenda(ContexteUtil.getContexteUniv(), listeAgendaEvenement, meta.getIdMetatag());
      		}
      	}
      

      qui construireDateHoraireDepuisInfoBean(...) à partir de valeurs nulles (car n'existant pas).

      Du coup, soit il ne faudrait pas avoir de nbdatehoraires = 1 quand y'en a pas. Soit il ne faudrait pas construireDateHoraireDepuisInfoBean(...) à partir de valeurs nulles. Ou une autre solution si vous avez un plan C.

            frederic.falcao Frederic FALCAO
            matthieu.marc@ensam.eu Matthieu Marc
            Votes:
            0 Voter pour ce ticket
            Gérer les observateurs:
            5 Démarre l'observation de ce ticket

              Création:
              Mise à jour:
              Résolue: