Accéder a un External Object en REST

Tags: #<Tag:0x00007fdd4924fbe8>

Bonjour, je n’arrive pas à résoudre le problème suivant :

J’affiche une page en appelant un script JS depuis un external object

Dans ce script js, suite à certaines actions de l’utilisateur je veux recupérer des informations dans le back de l’application simplicité.

La solution que j’ai choisie est des créer un nouvel external object, de le faire hériter de RESTServiceExternalObject puis dans mon script, d’appeler ce nouvel objet en utilisant Simplicite.Ajax.

Sur mon nouvel objet externe, j’ai aussi créer une fonction CRUD et dans les grants de cette fonction il y a tout les groupes de mon application.

Le résultat est que

  • si je passe par l’url <base>/ext/<monObjet> j’atteints bien mon objet mais je tombe en erreur car je ne suis pas authentifié au moment de faire un appel à la base de donnée.
  • Si je passe par d’autres URL qui demande d’être authentifier, malgrès que le cookie soit bien dans la requète ainsi qu’un login et mdp valables, le serveur me refuse avec une erreur 405.

Dans l’ideal, je veux atteindre mon objet en étant authentifié.

Ci-dessous le code en question ( simplifié ) :

public class ExternalObjAsRestService extends RESTServiceExternalObject {

    @Override
    public Object post(Parameters params) throws HTTPException {
        BuisinessService buisinessService= (BuisinessService) getGrant().getExternalObject("BuisinessService");
        String dbData= buisinessService.getDataFromDb();
        return new JSONObject().put("data", dbData);
    }
}
var app = new Simplicite.Ajax("/","api","login","mdp");
 // Params
var useAsync = true; // use async callback pattern
var url = "ExternalObjAsRestService "; // authenticated webservice
var params = {post_param: "hello_world"}; // post params
// Call Webservice (POST requests only)
app._call(useAsync, url, params, function callback(rslt){
    console.error(JSON.stringify(rslt, null, 4));
 });

Si vous utilisez vos objets depuis la UI déjà authentifiée, il faut juste faire tous vos appels par ce canal :

var app = $ui.getApp();

Ensuite appeler un objet externe se fait par url Simplicite.ROOT+"/ext/<myExtObjectName>"