Recherche base exemple pour commencer ORDA

Bonjour

Je souhaite me mettre au nouveau mode de programmation ORDA

pouvez vous me dire ou trouver une base exemple en ORDA ou quelqu’un peut’l me passer une petite base en ORDA sous 17R6 Mac

merci pour votre aide mais c’est un vrai chalenge pour moi d’aborder ce nouveau concept

Bonjour,

Bienvenue dans ORDA.

Pour commencer avec ORDA, je vous conseille de regarder les principaux concepts --> https://doc.4d.com/4Dv17/4D/17.3/ORDA.200-4639696.fe.html

Ensuite, il y a eu toute une série de publications sur le blog lors de la sortie de la V17.

Chaque publication est accompagnée d’une base d’exemple.

Voici les principales:

https://blog.4d.com/create-update-and-delete-data-with-orda/

https://blog.4d.com/query-your-database-with-an-object-oriented-approach/

https://blog.4d.com/going-back-and-forth-between-current-selection-to-orda/

https://blog.4d.com/locking-entities-with-orda/

https://blog.4d.com/working-with-orda-optimistic-locking/

https://blog.4d.com/compute-statistics-on-entity-selection/

https://blog.4d.com/orda-work-with-objects-and-collections/

https://blog.4d.com/handle-entities-in-an-entity-selection/

https://blog.4d.com/logical-operations-on-entity-selections/

Ensuite, tout dépend de ce que vous souhaitez faire avec ORDA.

Je reste, bien sûr, à votre disposition.

: Bernard DORET

…/…
merci pour votre aide mais c’est un vrai chalenge pour moi d’aborder
ce nouveau concept

He bien c’est peu de le dire, c’est un chalenge pour beaucoup de bases. :roll:

Mais y’a pas photo, les bases démo, un début, ok. Mais au minima une formation en complément pour une mise en œuvre définitive et efficace.

Un petit passage chez http://www.caveconseil.fr.*
S’ils sont aussi sympas qu’à Marseille, tu auras des conseils et beaucoup de ressources ** pour tes nuits blanches. :sunglasses:

Bon code.
A+

*l’abus d’alcool est dangereux pour la santé.
** mais que l’abus.

Re Bonjour,

Il y aussi une série de 4 épisodes montrant l’évolution d’une base de généalogie en ORDA:

https://blog.4d.com/orda-genealogy-episode-one/

https://blog.4d.com/orda-genealogy-episode-two/

https://blog.4d.com/orda-genealogy-episode-three/

https://blog.4d.com/orda-genealogy-episode-four-by-request/

Bonjour Marie-Sophie

Bonjour Eric

Merci pour vos réponses, mais je ne suis pas plus avancer, je lis les différents post sur blog.4d mais je ne comprends pas comment construire une nouvelle base. par contre ils me serviront pour progresser.

J’ai appris à developper avec la version V3 une version que les plus jeunes( j’ai 76ans) n’ont pas connu mais ma base je l’ai refaire plusieurs fois pour arriver à la V17R6 elle me donne satisfaction mais intellectuellement je veux passer à ORDA

une petite base exemple ORDA me permettra d’évoluer.

Eric
concernant Cave conseil ils sont très sympa et ils ont une belle collection (hihi) de whisky japonais (à consommer avec modération mais délectation.

merci pour m’aider à démarrer

Cordialement

: Bernard DORET

une petite base exemple ORDA me permettra d’évoluer.

Tu crées, pour commencer, une base de zéro avec une table et tu importes un quelconque fichier texte exporté d’une de tes bases existantes.

Les noms des tables et champs conformes, bien sûr.

Là, tu créées ta première méthode de recherche

Je pense qu’il y a confusion on ne PASSE pas à ORDA, on utilise ORDA.

Si vous avez déjà une base existante, il est inutile, voir contre productif, de vouloir tout réécrire en ORDA, vous pouvez continuer à utiliser votre base tout en commençant par utiliser dans vos améliorations/nouveaux développements de l’ORDA par petite touche.

Il y a des cas très précis où l’utilisation d’ORDA s’impose d’elle-même tellement elle apporte de simplicité de mise en œuvre. L’exemple c’est la recherche au sein d’une même table dans un même process.

Ex : un client me demande de récupérer un N° de commande dans un devis autre que celui que je suis en train de faire. Pour faire cela en 4D Classic c’est la prise de tête assurée ; en ORDA, une ligne de code et cela répond parfaitement au besoin !!! (Magique !)

Merci pour vos réponses je vais commencer par utiliser ORDA en créant une base nouvelle

Tres Cordialement

Bernard

Bonjour Marie-Sophie

J’ai bien étudié et compris la base généalogie avec les MotherID, FatherID, et PartnerID.
J’ai essayé de construire dans cet esprit une nouvelle base de gestion budget familial

avec comme champs
ID
Naure dépense ( nourriture , EDf , essence, téléphone etc)
Date dépense
Mode de paiement (CB, Virement, cheque)
N° Cheque
Montant Dépense
Imputation Budget ( vacances, voiture, distraction, etc)
Commercant

Je veux pouvoir faire des statistiques avec en rupture sur Imputation

J’ai imaginé faire un lien ImputationID vers ID
et CommercantID vers ID

Suis je sur la bonne piste Merci de bien vouloir m’ aider
Cordialement
Bernard

Bonjour,

Vous pourriez avoir 2 tables:

  • 1 table Depenses (avec plusieurs champs dont “montant”)
  • 1 table Imputation (avec un seul champ “valeur” et une clé primaire)

Dans la table Imputation, il y aurait un enregistrement par valeur possible (vacances, voiture, …)

Il y aurait un lien “aller” de Depenses vers Imputation si une dépense possède une seule imputation
Nom du lien: imputation

Avec ORDA, vous pourrez faire ce genre de requête:

// Lecture des dépenses “vacances” dans la table Depenses
$depenses:=ds.Depenses.query(“imputation.valeur=:1”;“vacances”)

//Somme des dépenses “vacances”
C_REAL($montantTotal)
$montantTotal:= $depenses.sum(“montant”)

Vous pouvez aussi externaliser les commerçants dans une autre table (comme Imputation).

Qu’en pensez-vous ?

: Eric JUHEL

He bien c’est peu de le dire, c’est un chalenge pour beaucoup de
bases. Rolling Eyes
En effet, c’est un sacré challenge !
On peut migrer progressivement comme le dit Manuel, mais… ça n’est pas si simple.
J’ai fait un shell avec beaucoup de génériques pour afficher des formulaires liste, de saisie ou de dialogues, avec de nombreuses fonctions.
J’ai commencé il y a une bonne vingtaine d’années et, si elles apparaissent lourdingues vues d’aujourd’hui, elles sont robustes et m’ont rendu service en me permettant d’ajouter de nouvelles fonctions assez rapidement.

Aujourd’hui, je voudrais utiliser progressivement les nouvelles technologies :

  • l’objet est ce qui m’a été le plus facile
  • la transition des plugins vers les remplaçants a été très laborieuse ; un exemple parmi d’autres, l’absence de menus complets et homogène a été plus qu’un frein…
  • je comprends ORDA et j’en ai introduit quelques bouts mais la documentation, quoique nombreuse, est très dispersée : NT, Tips, Blog, doc,… on ne sait plus où donner de la tête !
    par exemple, je suis en train d’explorer le HDI_EntitySelectionInListbox et je n’arrive pas à trouver comment sont remplies les propriétés Form.meta.noMeeting et Form.meta.hasMeeting ; no et has sont des mots-clés suivis du nom de la table ???

Bon courage à mon homonyme !

Bonjour,

Pour le HDI HDI_EntitySelectionInListbox:

Form (https://doc.4d.com/4Dv17R6/4D/17-R6/Form.301-4311703.fe.html) est un objet contenant les données du formulaire courant.

Dans la méthode formulaire du formulaire HDI2, lors de de l’évènement “Sur chargement”, on initialise dans cet objet un objet meta (Form.meta).
noMeeting et hasMeeting (eux mêmes des objets) sont des propriétés de l’objet Form.meta:

Form.meta:=New object()
Form.meta.noMeeting:=New object()
Form.meta.hasMeeting:=New object()

Sur la page 5 du formulaire HDI2, la listbox contenant les events possède une propriété “Expression meta info” (dans le thème Texte) qui contient l’expression:
Choose(This.meetings.length=0;Form.meta.noMeeting;Form.meta.hasMeeting)

Les boutons “Set blue” et “Set red” permettent d’initialiser l’objet Form.meta.noMeeting avec une propriété “fill” (RGB color bleu ou rouge).

Form.eventList:=Form.eventList permet de relancer l’affichage de la listbox et donc de déclencher l’évènement “Sur affichage corps”.
Ainsi pour chaque ligne de la listbox, l’expression Choose(This.meetings.length=0;Form.meta.noMeeting;Form.meta.hasMeeting) est évaluée et permet de colorer en bleu ou rouge les events sans meetings.

Le fonctionnement de “Expression meta info” est documenté ici --> https://doc.4d.com/4Dv17R6/4D/17-R6/Proprietes-specifiques-des-List-box.300-4354813.fr.html (thème Texte)

Vous ne comprenez pas car tout bêtement jusqu’à present 4D ne permettait pas de trouver des elements dans ses propres listBox… :twisted: (Demande mainte fois évoquée sur ce Forum, On a ainsi des méthodes, des formules, des tableaux qui ne ressortent JAMAIS en utilisant un chercher dans développement !!! :frowning:

: Marie-Sophie LANDRIEU

Pour le HDI HDI_EntitySelectionInListbox:

Form.meta.hasMeeting:=New object()

Merci Marie-Sophie, tout ça j’ai compris et mis en pratique dans ma propre base ; l’information éclairante est à partir d’ici :

: Marie-Sophie LANDRIEU

Sur la page 5 … (thème Texte)
Mais surtout

: Manuel PIQUET

Vous ne comprenez pas car tout bêtement jusqu’à present 4D ne
permettait pas de trouver des elements dans ses propres listBox…
Maléfique (Demande mainte fois évoquée sur ce Forum, On a ainsi des
méthodes, des formules, des tableaux qui ne ressortent JAMAIS en
utilisant un chercher dans développement !!! Sad
parce qu’évidemment j’ai fait la recherche … qui ne donnait rien !

Ce cas illustre la difficulté d’avoir de multiples bases de démo illustrant un tout petit bout du problème, ayant chacune sa structure, sa logique, son nommage.

: Bernard ESCAICH

Ce cas illustre la difficulté d’avoir de multiples bases de démo
illustrant un tout petit bout du problème, ayant chacune sa
structure, sa logique, son nommage.

Cela serait déjà moins problématique si on pouvait trouver l’information par soit même. Le fait que la recherche ne fonctionne pas comme elle le devrait rajoute une difficulté supplémentaire et de la confusion inutile car lorsqu’on fait de l’introspection de son code (pire si c’est quelqu’un d’autre qui fait cette introspection) on peut se faire avoir en pensant qu’une variable ou une méthode ou un tableau n’est plus utilisé, alors qu’il est bien présent partout dans des listbox !!!

Bonjour Marie-Sophie
merci de m’aider

Voici comment je commence à restructurer ma base que j’ai commencé en V4

[]32385537;“Your comment here…”[/]

le lien (rouge) le nom du lien aller est Imputation
le lien retour est Depense

ai-je bien compris ?

je pense continuer en faisant les liens de Commerçants et de Mode de paiement

A te lire

Tres Cordialement

Bernard

Hello,
ça me paraît bien, mais pour la lisibilité du code ORDA à venir, je te suggère d’adopter des règles de nommage qui t’éviteront de confondre table, champs et relations. Par exemple tu peux opter pour des noms de table en majuscules et des noms de champs en minuscules ; pour les relations je me tais, ça va encore rallumer https://forums.4d.com/Post/FR/27654409/2/27668853#27654410la guerre de 100 ans> :wink:

Moyen Paiement : je ne sais plus si l’espace dans un nom de table passe en ORDA, en SQL c’est sûr que non.

Bonjour,

Moi aussi ça me paraît bien.

Effectivement, on a plutôt l’habitude de travailler avec des noms de champs en minuscules.

Je pense que le champ Imputation en rose ne sert à rien.

Pour le nom du champ “Imputation Budget” avec un espace, vous pouvez le faire mais vous serez gêné si vous voulez utiliser la notation à point.

Voici quelques lignes de code pour créer un premier record dans Depenses et Imputations

C_OBJECT($imputation;$depense;$status)

$imputation:=ds.Imputations.new() // Création d’une nouvelle entity Imputations
// Comme il y a un espace dans le nom du champ, vous êtes obligé d’utilier les crochets
// Si vous mettez à la place un champ imputationBudget vous pouvez faire:
// $imputation.imputationBudget:=“imputation”
//
$imputation[“Imputation Budget”]:=“imputation”
$status:=$imputation.save() // Sauvegarde en base de l’entity

// Vérifier que $status.success = True

$depense:=ds.Depenses.new() // Création d’une nouvelle entity Depenses
$depense.Designation:=“designation”
$depense.imputation:=$imputation //Mise en place du lien aller
$status:=$depense.save()

// Vérifier que $status.success = True

Merci Marie-Sophie

je vais mettre le nom des tables en majuscule sans espace
les champs en minuscule sans espace aussi

Merci Arnaud pour mon mal de crâne suite au nommage des liens qui si j’ai bien compris sont des entité pour l’aller et entités pour le retour

je ne sais pas si je peux faire ceci

table IMPUTATION lien aller imputation et retour imputations

j’aurai plutôt tendance à mettre aimputation et rimputation

Concernant les liens j’ai un lien qui part de ID de la Table DEPENSE vers ID de la table IMPUTATION

mais il me faut aussi un lien vers COMMERCANT, MODEPAIEMENT et BUDGET

il me faut des ID secondaires ? car me ne peux pas repartir de ID de la table DEPENSE

Encore merci pour les conseils cela m’encourage de me mettre à ce nouveau concept.

Très Cordialement.

Bernard

Bonjour,

Oui, les liens aller sont une entité et les liens retour une entity selection (entités).

Comme nom de lien, je vous suggère:
lien aller = imputation
lien retour = depenses

Cela facilite la compréhension du code si le lien correspond à une notion métier parlante.

Pour les clés étrangères, vous pouvez créer sur la table Dépenses des IDs imputationID, modePaiementID, commercantID et faire le lien vers les primary keys des autres tables.