Pb enregitrement d'un formulaire alimenté par un script

bonjour,

un agenda affiche les ressources et les réservations de mon objet CrbGdrResa


jusque là tout va bien.

quand je clique sur un horaire disponible, le formulaire s’ouvre avec les données de la ressource et les heures sélectionnées :
Script =>

						$ui.getUIObject("CrbGdrResa", "the_ajax_CrbGdrResa", function(resa) {
							// Context CREATE (initCreate on server side)
							resa.getForCreate(function() {
	   							var itemResa = { row_id:"0",gdrResaDemandeur:ident,gdrResaDemandeurMatricule:matricule,gdrResaDemandeurMail:mail,gdrResaEmprunteur:ident,gdrResaCreateur:ident,gdrResaCreateurMatricule:matricule,gdrResaStatut:"SAISIE",gdrResaDtDebut:moment(info.dateStr).format('YYYY-MM-DD HH:mm:ss'),gdrResaDtFin:moment(dtFin).format('YYYY-MM-DD HH:mm:ss'), gdrResaType_fk__gdrTypeLibelle: info.resource.extendedProps.data.gdrRessourceType_fk__gdrTypeLibelle,gdrResaType_fk: info.resource.extendedProps.data.gdrRessourceType_fk,gdrResaRessource_fk:info.resource.extendedProps.data.row_id,gdrResaRessource_fk__gdrRessourceLibelle: info.resource.extendedProps.data.gdrRessourceLibelle,gdrResaSite_fk:info.resource.extendedProps.data.gdrRessourceSite_fk,gdrResaSite_fk__gdrSiteLibelleCourt:info.resource.extendedProps.data.gdrRessourceSite_fk__gdrSiteLibelleCourt};
			    				$ui.displayForm(null, resa, "0", { nav: "add", values: itemResa });
								}, params);

résultat =>

quand je clique sur “Enregistrer”, le fonctionnement est aléatoire … mais 3 fois sur 4, l’enregistrement ne fonctionne pas :

je ne comprend pas ce qui ne se passe pas bien. la ressource est pourtant bien alimentée.

L’attribut “Ressource” est grisé donc à priori en read only. Ce que vous valorisez dans ce champ par du code client n’est donc pas envoyé au serveur

Oui, c’est un problème de droit.

A mon avis vous devez rendre le champ modifiable si c’est possible,
ou alors si comme je le suppose, s’il faut que l’utilisateur ne puisse pas en changer vu qu’il a choisit un créneau de cette ressource, on a 2 possibilités :

  • Avant d’afficher le formulaire, prévenir le serveur du choix de l’utilisateur (resource Id + dates…) via un app.setSysParam
function formCreationResa() {
   $ui.getUIObject("CrbGdrResa", "the_ajax_CrbGdrResa", function(resa) {
      $ui.displayForm...
   });
}
var ressourceId = info.resource.extendedProps.data.gdrRessourceType_fk; // ???
$ui.getAjax().setSysParam(formCreationResa, "CRB_ressourceId", ressourceId);

afin de pouvoir forcer la valeur non modifiable sur la UI au preValidate grâce au paramètre reçu juste avant:

setFieldValue("ressourceId", getGrant().getParameter("CRB_ressourceId"));
  • Ou bien rendre le champ modifiable, mais brider l’accès sur la UI uniquement (hook form.onload pour retirer la loupe par exemple) mais ça reste contournable (via le debugger du navigateur) et moins sécurisé.

je vais mettre en place la 1ère solution