Bouton d'action sur une ressource côté client

Bouton d'action sur une ressource côté client
0
Tags: #<Tag:0x00007f06a557c508>

Bonjour,

Je souhaite, sur un agenda fullcalendar en liste, ajouter un bouton d’action (CRB_AGM_MAIL_RELANCE) sur les objets (CrbAgmSollicitation) de cette liste.

La liste des objets étant développée dans un script de type “Ressource” (côté front), et la requête d’appel à mon action (https://xxxxxx.bzh/agmanif/ui/json/obj?action=CRB_AGM_MAIL_RELANCE&object=CrbAgmSollicitation&inst=the_ajax_CrbAgmSollicitation&_md=true) étant en POST,
comment procéder ?

  • Dois-je pour chacune de mes lignes d’agenda ajouter une balise href pointant vers un objet externe en précisant l’id de mon objet ? La gestion des droits se ferait ainsi au niveau de l’objet externe.

  • Dois-je faire une balise <a href=javascript(...)> avec une fonction côté back qui fait une requête directe vers l’url en POST ?

  • Dois-je utiliser les classes fournies côté front (https://docs.simplicite.io/4.0/jsdoc/Simplicite.UI.Engine.html) ? Dans ce cas, auriez-vous un exemple de code ?

Merci de votre réponse,

Guillaume

Dans la mesure où votre formulaire est du code front spécifique je ne vois pas bien quoi vous répondre sans le code complet, il sera plus simple d’ajouter des boutons après chargement de l’agenda dans chaque cellule identifiées par un classe spécifique.

Quelque chose du genre :

$(".my-agd-cell").each(function() {
  var x = $(this);
  $('<button class="btn"/>')
     .css({ float:"right" })
     .data("x",x)
     .click(click)
     .appendTo(x);
});
function click(e) {
  e.stopPropagation();
  var x = $(this).data("x");
  var id = x.attr("data-rowid"); // à vous de retrouver le row_id dans la cellule
  var obj = app.getBusinessObject("CrbAgmSollicitation");
  obj.get(function(item) {
    obj.action(function() { /* done */ }, "CRB_AGM_MAIL_RELANCE");
  }, id);
}

A priori avec un agenda fullCalendar cela donne :

	$j("#sollicitationcalendar").fullCalendar({

		events: function(start, end, tz, callback) {
...
			sollicitation.search(function() {
...
     
				for (var i = 0; i < sollicitation.list.length; i++) {
					var item = sollicitation.list[i];
					var s = moment(item.CrbAgmSolliManifId__CrbAgmManifDtDebut);
					var e = moment(item.CrbAgmSolliManifId__CrbAgmManifDtFin);
					evts.push({
						id: item.row_id,
						data: item,
						title: (item.CrbAgmSolliManifId__CrbAgmManifReponsePresident ? "(" + item.CrbAgmSolliManifId__CrbAgmManifReponsePresident + ")" : '') + ' '
						+ item.CrbAgmSolliManifId__CrbAgmManifObjet + ' | '
						+ item.CrbAgmSolliCrbUserId__usr_last_name + ' '
						+ item.CrbAgmSolliCrbUserId__usr_first_name + ' - '
						+ (item.CrbAgmSolliReponse=='SRE' ? 'Non répondu' : item.CrbAgmSolliReponse=='ABS' ? 'Absent' : 'Présent') + ' '
						+ "<button type=\"button\" class=\"btn btn-action action-not-xs\" onClick=\""
						+ " var obj = new Simplicite.Ajax().getBusinessObject(\'CrbAgmSollicitation\'); "
						+ "	obj.get(function(item) { "
						+ "		obj.action(function() { /* done */ }, \'CRB_AGM_MAIL_RELANCE\'); "
						+ "	}, " + item.row_id + "); "						
						+ " \">Relancer</button>",
						
						color: item.CrbAgmSolliReponse=='SRE' ? 'orange' : item.CrbAgmSolliReponse=='ABS' ? 'lightgrey' : 'green', 
						start: s,
...
					});
					
					if (debug) console.debug(" resa : " + item.gdrResaDemandeur + " ressource : " + item.gdrResaRessource_fk +"-"+item.gdrResaRessource_fk__gdrRessourceLibelle);
				} 
				if (debug) console.debug("fin boucle :"+new Date());
				if (debug) console.debug(evts.length + " resa displayed between " + dmin + " and " + dmax);
				callback(evts);
			}, {}, {});
		},
		eventRender: function( event, element, view ) {
...
		},
		eventClick: function(s) {
...
		},
	});

Je ne sais pas dire si votre code fonctionne,
mais sur la UI on instancie un objet comme ça :

var app = $ui.getAjax(); // ou Simplicite.Application
var obj = app.getBusinessObject('CrbAgmSollicitation');