J’ai une GED qui s’affiche (iFrame) au chargement d’un enregistrement en vue formulaire en se basant sur le n° de société de l’enregistrement actif:
(function(ui) {
// Is it the responsive UI ?
if (!ui) return;
// Ajax services with current grant, menu, texts...
var app = ui.getAjax();
Simplicite.UI.hooks.EmplFrontBoEmployers = function(o, cbk) {
try {
// In the example hooks will be available on main instance only
if (o.isMainInstance()) {
console.log("Employers loading...");
// object UI parameters = clone of the globals properties
var p = o.locals.ui;
// When object form is loaded in the container ctn
o.locals.ui.form.onload = function(ctn, obj) {
try {
var app = $ui.getAjax(); // services, user rights, parameters...
var noDossier = obj.getFieldValue("EmplFrontBoEmployersNoSociety_ID");
if (noDossier) {
/*appel d'une url pour obtenir un token
placer le token en variable
puis appel de la GED avec l'url en param + n°société+token*/
var url = app.sysparams.VDL_GED_GIMMO_URL + "?NumDossier=" + noDossier//+token;
console.log("URL calculée... : "+url);
var iframe = $('<iframe frameborder="0" name="dossier" scrolling="yes" style="width: 900px; height: 300px; border: solid 1px gray"/>');
$('#divdossier').html(iframe.attr("src", url));
}
}
catch(ex) {
/* iframe not supported ? */
app.error("Le contenu ne peut pas être affiché "+e.message);
}
}
}
}
catch(ex) {
/* iframe not supported ? */
app.error("Error in Simplicite.UI.hooks.myObject: "+e.message);
}
finally {
// Required callback when hooks are loaded
cbk && cbk();
}
};
})(window.$ui);
Pour sécuriser la connexion, on me demande maintenant d’aller sur une 1re url qui va me renvoyer un token et ensuite d’ajouter ce token à l’url de la GED.
Puis-je le faire ici juste avant l’appel de la GED?
Il suffit de faire un call ajax avec jquery. Il faudra ajouter le content type s’il n’est pas explicite et connaitre la structure de la reponse pour savoir ce que contiendra result :
Après discussion ici, la demande du token doit se faire côté serveur alors que l’affichage de la GED se fait côté client.
J’imagine donc un script java dans code partagé pour récupérer le token et il faut le passer dans la function(ui) qui affiche la page dans l’iFrame
C’est la meilleure façon de faire ou en avez-vous une autre?
Merci.
si je résume : au chargement du formulaire le script (RESSOURCE) s’exécute. c’est depuis ce script que je dois lancer la méthode qui va demander le token, le placer en paramètre système, et ce script appelle l’url de la GED an ajoutant le token qui est en paramètre système.
(function(ui) {
// Is it the responsive UI ?
if (!ui) return;
// Ajax services with current grant, menu, texts...
var app = ui.getAjax();
Simplicite.UI.hooks.EmplFrontBoEmployers = function(o, cbk) {
try {
// In the example hooks will be available on main instance only
if (o.isMainInstance()) {
console.log("Employers loading...");
// object UI parameters = clone of the globals properties
var p = o.locals.ui;
// When object form is loaded in the container ctn
o.locals.ui.form.onload = function(ctn, obj) {
try {
var app = $ui.getAjax(); // services, user rights, parameters...
var noDossier = obj.getFieldValue("EmplFrontBoEmployersNoSociety_ID");
if (noDossier) {
//appel de la méthode EmplFrontGED
// la méthode place le token en paramètre système
var url = app.sysparams.VDL_GED_URL + "?numero=" + noDossier// + "&_token=" + variable token;
console.log("URL calculée... : "+url);
var iframe = $('<iframe frameborder="0" name="dossier" scrolling="yes" style="width: 900px; height: 300px; border: solid 1px gray"/>');
$('#divdossier').html(iframe.attr("src", url));
}
}
catch(ex) {
/* iframe not supported ? */
app.error("Le contenu ne peut pas être affiché "+e.message);
}
}
}
}
catch(ex) {
/* iframe not supported ? */
app.error("Error in Simplicite.UI.hooks.myObject: "+e.message);
}
finally {
// Required callback when hooks are loaded
cbk && cbk();
}
};
Comment est-ce que j’appelle la méthode depuis le script?
Non ce n’est pas ce que j’ai décrit, ce que j’ai décrit c’est:
coté serveur dans un hook ad hoc (ex: le initUpdate ou plus globalement le postLoad de votre objet, voire globalement dans le grant hook postLoadGrant) vous recupérez votre token (le choix du hook dépend du scope et de la durée de vie de ce token, ça c’est vous qui savez)
coté serveur vous stockez la valeur du token dans un parametre système (global, niveau utilisateur ou niveau objet, là aussi c’est à vous de choisir la bonne approche en fct du scope et de la durée de vie de votre token
coté client quand vous en avez besoin vous appelez la fonction getParameter soit niveau grant, soit niveau objet en fct de votre choix ci-dessus pour récupérer la valeur du token
D’abord je commence par vous souhaiter une excellente année 2020 !
Je reprends le fil après quelques vacances.
Dans mon idée j’utilise le initUpdate pour faire une demande de token à chaque affichage en vue formulaire. Je ne vois pas trop comment utiliser un paramètre système. Le paramètre système n’est-il pas chargé à l’ouverture de l’application et ne peut pas être changer sans vider le cache ou recharger l’application?
@Override
public void postLoad()
{
super.postLoad();
setParameter("MY_TOKEN", "1234567890"); // Object parameter
getGrant().setParameter("MY_OTHER_TOKEN", "0987654321"); // User parameter
}
@Override
public String postSave()
{
AppLog.info(getClass(), "postSave", "My token: " + getParameter("MY_TOKEN"), getGrant());
AppLog.info(getClass(), "postSave", "My other token: " + getGrant().getParameter("MY_OTHER_TOKEN"), getGrant());
return super.postSave();
}
La question que vous devez vous poser c’est où et quand récupérer votre token pour que ça soit conforme à sa logique d’utilisation, sa durée de vie, etc.
Si c’est un token de longue durée partagé par tous les users mettez le dans un paramètre système statique, s’il est de longue durée mais unique par user sa gestion doit se faire plutôt dans un grant hook et être stocké dans un paramètre utilisateur, si c’est un token éphémère à usage unique il faut le créer au plus proche de son usage par exemple dans un paramètre d’objet, etc.