Récupération attribut Document type "multi-documents en liste"

Bonjour,

Lorsque j’ajoute une pièce jointe à un champ de type Document “simple”, ce dernier est de type int dans la BDD et alimenté par le row_id de la table m_document où est stocké le path du document. (champ “lad_test_image” dans les images ci-dessous).

En revanche, dans le cas d’un champ de type Document avec comme Multi-documents en liste comme valeur de la propriété Présentation (qui est le cas qui m’intéresse au final) lorsque j’ajoute une ou des pièce(s) jointe(s), la valeur du champ en base est vide ! (champ “lad_justificatifs_piece_jointe” dans les images ci-dessous). Le path est bien présent dans la table m_document mais le row_id de cette table n’est pas présent dans la table lad_justificatifs. Comment est fait la jointure par Simplicite dans ce cas de figure ?

screenshot_table_justificatifs

Pourtant à l’affichage, tout est ok. Donc je ne sais pas comment Simplicite fait pour opérer la jointure entre les tables lad_justificatifs et m_document pour récupérer le path du bon document.

screenshot_ihm_justificatifs

La finalité est de récupérer le(s) path(s) de l’attribut type Document “Multi-documents en liste”.

En vous remerciant.

Cordialement

Bruno

Bonjour,

En V5 dans le cas du multi-docs, il n’est plus possible d’avoir des références croisées dans la colonne du document, mono-document par construction.

Pour accéder aux documents, Simplicité fait la jointure avec les 3 colonnes : objet métier (dbd_object_id) + attribut de type document (dbd_field_id) + id du record (dbd_row_id)

L’objet java DocumentDB a évolué pour gérer le cas document simple ou multiples pour assurer une compatibilité ascendante des interfaces.

Pour y accéder par code dans un hooks de l’objet par exemple, il faut passer par l’accesseur getField("myDocField").getDocuments(obj, rowId); pour aller récupérer les meta-data dans la base de données :

// This DocumentDB contains many documents
DocumentDB multiDocs = getField("myMultiDocsField").getDocuments(this, getRowId());
// Get the list of documents
List<DocumentDB> docs = multiDocs!=null ? multiDocs.getDocuments() : null;
for (int i=0; docs!=null && i<docs.size(); i++) {
	// Single document
	DocumentDB doc = docs.get(i);
	// Absolute path in DOC_DIR + relative path
	String path = Platform.getDocDir() + "/" + doc.getPath();
	// ...
}

Pour les documents multiples déjà chargés dans le formulaire, il n’est pas nécessaire de requêter la base, on y accède ainsi :

DocumentdB multiDocs = getField("myMultiDocsField").getDocument();
List<DocumentDB> docs = multiDocs!=null ? multiDocs.getDocuments() : null;
// ...

https://docs.simplicite.io/documentation/01-core/documents-code-examples.md

Bonjour François,

Merci pour votre réponse rapide. Je vais tester avec ce que vous me recommandez.

Cdt,

Bruno

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.