Récupération des données de la base

4.0
Récupération des données de la base
0.0 0
Tags: #<Tag:0x00007f6828540af0>

#1

Bonjour,

Pourriez-vous me donner svp un exemple de script dans lequel on récupère (via requête sql ou autre méthode) et affiche ligne par ligne l’ensemble des données d’un objet?

Merci d’avance

Arnaud


#2

Il y a plusieurs manières pour “requêter” des données Simplicité
Quel est votre besoin ?


#3

j’aimerai éditer un document PDF dans lequel je récupère tous les enregistrements d’un objet dans un tableau.
je n’arrive pas à récupérer les enregistrements de mon objet


#4

Copiez-collez le code que vous avez écrit pour que je comprenne mieux ce que vous faites


#5

En attendant votre réponse sachez que pour “publier” des données Simplicité (à partir d’un objet en itérant éventuellement sur les objets liés) il existe le mécanisme des template de publication.

Dans la démo il y a un exemple parlant qui génère du HTML imprimable (ce qui est infiniment plus simple que faire du PDF - qui nécessite toujours d’écrire du code au Km - et qui en général répond très bien aux besoins d’impression/publication):

Au niveau founisseur il y a un bouton de publication “Catalog”:


Il publie les données des fournisseurs et des produits (par fournisseur):

C’est configuré en tant que template de publication HTML:


Avec le template suivant:

Le 1er niveau de begin/end boucle sur les items sélectionné de la liste, le 2ème niveau sur les produits du fournisseur considéré.

Je n’ai pas bien compris quel est votre besoin mais je vous suggère de regarder de ce coté.


#6

D’autres exemples de publication dans le doc suivant: https://www.simplicite.io/resources/documentation/01-core/publication-examples.md


#7

Et sinon pour faire un search coté serveur et itérer sur les résultats vous avez des exemples dans ce document: https://www.simplicite.io/resources/documentation/01-core/basic-code-examples.md (au § “Searching”)


#8

Merci pour vos différentes solutions

J’ai envisagé d’utiliser les template de publication en m’appuyant sur le cas traité dans la démo. Mais dans la demo le catalogue de produits ne pouvait s’enregistrer qu’en “.htm”, c’est pour cela que j’ai plutôt opté sur l’édition d’un document PDF.
Je faisais ma recherche en utilisant des requêtes SQL, mais je n’arrivais pas à récupérer le résultat sous forme de tableau associatif.
Mais en utilisant le search côté serveur, j’ai bien le résultat voulu.

Merci encore


#9

Dans Simplicité il faut éviter de faire du SQL dans 99,99% des cas. Passer par les APIs serveur et/ou client permet de bien passer par toutes les couches logiques, ce qui veut dire respecter les règles de gestion et le habilitations (en faisant du SQL direct on zappe toute l’intelligence métier du paramétrage, il y a bien qques cas tordus où ça peut être nécessaire mais en général si on se retrouve contraint à faire du SQL c’est qu’il y a un pb de conception)


#10

PS: dans la démo il y un exemple de publication PDF (sur les commandes)


#11

Sauf que dans cette exemple, on ne récupère qu’une seule occurrence de l’objet


#12

Une publication porte soit sur une liste d’items soit sur un item.

Dans le cas d’une liste d’items explicitement sélectionnés il faut itérer en utilisant le this.getSelectedIds()

Dans la démo, sur l’objet DemoContact il y a un exemple de publication Excel (methode printExcel) qui boucle ainsi sur les items sélectionnés ou sur tous les items qui matchent le filtre courant si aucun item n’est sélectionné:

(...)
	var ids = this.getSelectedIds();
	if (ids && ids.size()>0) {
		for (var k = 0; k < ids.size(); k++)
			if (this.select(ids.get(k)))
				rows.add(this.getValues());
	} else
		rows = this.search(false);
(...)

Dans le cas d’un item individuel on est dans le cas du PDF des commandes la demo on utilise directement le record courant.

Et dans les 2 cas rien n’empêche de faire aussi des simples searchs sur d’autres objets


#13

Par contre, j’ai l’impression qu’on ne peut pas faire de search() sur des objets liés en y appliquant certaines conditions (le rôle du WHERE en SQL) comme :
Récupérer la liste des bâtiments qui appartiennent à une personne précise par exemple ou
La liste des ordinateurs de marque DELL


#14

Mais si bien sûr, c’est à ça que servent les filtres (voir l’exemple dans https://www.simplicite.io/resources/documentation/01-core/basic-code-examples.md)


#15

Oui c’est ce que j’essaie de faire depuis un moment, mais je n’ai pas le résultat voulu, je regarde encore


#16
// this est ici DemoSupplier
var prd = this.getGrant().getTmpObject("DemoProduct"); // on récupère l'instance temporaire de products
prd.resetFilters(); // On vide les éventuels filtres déjà positionnés
prd.setFieldFilter("demoPrdSupId", this.getRowId()); // On filtre sur la foreign key
var rows = prd.search(false);
(...)

#17

çà fonctionne, merci