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).
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) ?
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).