Création d'enregistrements avec ORDA

Je suis à la recherche de bonnes pratiques avant de mettre en oeuvre la création d’enregistrements en formulaire de saisie avec ORDA :

  • l’utilisation du formulaire Dialogue est acquise pour bénéficier de Form
  • la question porte sur la création de variables pour les propriétés de l’entité ; la base exemple Genealogy4 présente un exemple où on utilise
    <code 4D>
    $form:=Form.people[$id].toObject()
    DIALOG([PEOPLE];“FormInput”;$form)
    CLOSE WINDOW($win)
    Form.people[$id].fromObject($form).save()

</code 4D>
A quoi sert cet aller et retour par un objet ?
J’ai fait un essai en affectant les propriétés de l’entité aux variables du formulaire et ça fonctionne.
Quelle est la méthode conseillée ?

entity.toObject( ) présente une capacité de filtration : cela peut-il être intéressant pour générer des formulaires ?
Ce n’est pas mon cas, actuellement en tous cas.

Bernard,
First, I hope the translation of this is good…

I think the point of the .toObject() and .fromObject() is to create an object you can pass in $form that allows you to add other objects such as a button, listbox, etc. Otherwise you could do:

<code 4D>
$form_o:=ds.MyTable.new()
DIALOG(“inputForm”;$form_o)
If(OK=1)
$form_o.save()
End if
</code 4D>

On “inputForm” you could include whatever fields you like. However, you could not add anything else that used Form. This may or may not be useful.

I prefer to use a subform for the ‘input form’. This way I use the ‘parent form’ for other things. Perhaps showing some choice lists? Or providing look up functions? For example:

<code 4D>
$form_o:=New object
$form_o.subform_o:=ds.MyTable.new()
$form_o.btn_save:=false

DIALOG(“inputForm”;$form_o)

If($form_o.btn_save=True)
$form_o.subform_o.save()
End if
</code 4D>

This is much more flexible. You create an input/edit form for [MyTable] and load it into the subform. Set the subform as an object type and its data source as Form.subform_o. This populates the subform instance of Form with Form.subform_o.

The benefit of this design is the input form (used as the subform) is very simple. You can manage all the complicated validation, error checking, lookups, etc. on the parent form, if you like. You could also save the record with the parent form and, of course, create more than one new record.

This is a great way to create a data browser too - a listbox on the parent form can show an entity selection list. When you click on one of them the selected entity can appear in the same detail subform from above. This allows creating a sophisticated display which required dozens of lines of code in classic 4D and can be done with zero code in ORDA. It’s really quite remarkable.

Hi,

I agree with Kirk’s explanation.

But I am doubtful with

Form.people[$id].fromObject($form).save() since Form.people[$id] is a reload.

Thanks Kirk for this long answer.

: Kirk BROOKS

I think the point of the .toObject() and .fromObject() is to create
an object you can pass in $form that allows you to add other objects
such as a button, listbox, etc.

On “inputForm” you could include whatever fields you like. However,
you could not add anything else that used Form. This may or may not
be useful.

You are right to point this ; I Missed that.

: Kirk BROOKS

I prefer to use a subform for the ‘input form’. This way I use the
‘parent form’ for other things. Perhaps showing some choice lists?
I already made that but I am trying several solutions in parallel, including this one.

Je crée un formulaire comprenant une listbox et un sous-formulaire.

1- J’affecte un formulaire de saisie au sous-formulaire en dur dans la palette des propriétés ; la variable objet associée au sous-formulaire est bien récupérée dans le Form du formulaire de saisie.
Bien mais ce n’est pas générique.

2- J’affecte un formulaire de saisie au sous-formulaire par OBEJCT SET SUBFORM ; la variable objet associée au sous-formulaire n’est pas récupérée dans le Form du formulaire de saisie.
Pourquoi :

  • j’ai la comprenette un peu lente et fait une erreur
  • c’est une amélioration dans le tuyau ?
  • c’est sans espoir ?
    Ça me paraît indispensable pour avoir des solutions génériques.

3- Un dernier essai, avant d’attraper la peste jaune*, je combine les deux solutions :

  • j’affecte un formulaire de saisie au sous-formulaire en dur dans la palette des propriétés
  • j’affecte un formulaire de saisie au sous-formulaire par OBEJCT SET SUBFORM, ce qui me permet de le changer par programmation.
    Ça fonctionne, ouf mais c’est quand même capillotracté…
  • mon fils l’a…