Disparition d'une image

Bonjour,

J’ai un logo (attribut de type Image) au niveau d’un objet A.

J’ai une action dans un autre objet B qui, entre autres, vient récupérer ce logo, mais qui ne fais pas de mis à jour sur l’objet A.

Au premier lancement de cette action, le logo est bien récupéré, mais au deuxième lancement, ce logo disparaît de l’objet A et surtout physiquement :

Avant le 2ième lancement :

Après le 2ième lancement :

Sachant que le record qui contient le logo dans l’objet A, n’est modifié à aucun moment (le « modifié le » reste le même)
timestamp

Auriez-vous une idée, une piste, où est ce que je dois chercher pour trouver à quel moment et pourquoi l’image est supprimée physiquement ?

Merci d’avance pour votre aide.

Abed.

Bonjour,

De quelle manière ? vous passez par un getField().getDocument(), ou vous accédez à l’objet/table DocumentSystem/m_document ?

Faites une requete SQL directement sur la table pour voir si le logo est supprimé ou a changé de row_id :

select * from m_document where dbd_path like 'ImmoLegalEntity%LOGO%'

D’après ce que vous décrivez, il n’y a aucune raison que ce document ait été supprimé physiquement.
La UI peut avoir un filtre sur l’instance si vous avez codé un filtre sur le row_id de l’instance Main de DocumentSystem par exemple (ou forcé une search spec).

Merci @françois,

La suppression est bien physique :

J’ai trouvé d’où vient mon pb, en fait, quand je lance l’action dans B, je récupère le document depuis le record X de l’objet A et je stock son Id dans un record Y de l’objet de B.

var doc = A.getField("legEntityLogo").getDocument(rent.getGrant());			
var Gest_Soc_Logo = doc.getId();
B.setFieldValue("avisEcheancegestLogo" ,Gest_Soc_Logo);

Or, quand je relance l’action, je fais un annule et remplace du record Y crée dans B, et donc la suppression de ce record entraine la suppression du document physiquement, puisque c’est le même Id dans les 2 records X et Y.

Je pense qu’il ne faut pas utiliser le même document (même Id) mais qu’il faut le dupliquer dans le record Y de l’objet B pour qu’il ait un nouveau Id, mais je ne sais pas comment faire.

Ou bien, il y a t’il un moyen de supprimer le record Y de B, sans que cela supprime physiquement le document (qui est aussi utiliser dans A) ?

Merci d’avance pour votre aide.

Abed

Bonjour,

Ok tout s’explique alors. Un document lié à un champ est bien à voir comme une composition (agrégation forte) de l’enregistrement d’origine, même s’il est stocké dans une table à part. Simplicité considère qu’un document non relié à son attribut d’objet est un lien mort et le supprime.

Votre cas de gestion est donc à concevoir comme une copie du document dans votre objet B :

var doc = A.getField("legEntityLogo").getDocument(rent.getGrant());
if (doc!=null && B.select(id)) {
  var data = doc.getBytes(true);
  var copy = new DocumentDB("0", doc.getName(), data, "B", "avisEcheancegestLogo", b.getRowId());
  B.getField("avisEcheancegestLogo").setDocument(copy);
  B.save();
}

Si le fichier est énorme, il faudra préférer utiliser le constructeur qui manipule un InputStream plutôt qu’un byte array en mémoire (data).

Merci @Francois, ça marche nickel.