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

DateHoraire vide affecté aux fiches lors enregistrement front

    XMLWordImprimable

Informations

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

    Description

      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.

      Pièces jointes

        Liens des tickets

          Activité

            Personnes

              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

              Dates

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