PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Connect Directement (erp odoo) (Postgressql) avec windev mobile 24
Connect Directement (erp odoo) (Postgressql) avec windev mobile 24
Débuté par User_07, 28 nov. 2019 14:13 - 14 réponses
Posté le 28 novembre 2019 - 14:13
est ce que c'est possible de connect directement sur la base postgres ?
quelle sont les possiblité pour ce connect ? Merci
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 29 novembre 2019 - 08:59
Bonjour,

Non la connection en direct sur postgres n'est pas possible il faut se connecter à odoo et ensuite il va falloir passer par des api de communication afin de pouvoir lire et ecrire dans les tables.
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 29 novembre 2019 - 09:14
Dans le code du projet :
odoo est un CJsonOdoo_v3


Code de connection (mis dans un bouton)
odoo:p_database = "*************"
odoo:p_password = "**************"
odoo:p_login = "***************"
odoo:p_ipserveur = "000.00.00.0000:8004"


SI PAS odoo.connexion() ALORS
ToastAffiche("pas de connexion à odoo",toastCourt,cvMilieu,chCentre)
//trace("Erreur de connexion")
SINON
//trace("Connecté DB")
ToastAffiche("Coonecté à odoo",toastCourt,cvMilieu,chCentre)
FIN



code pour récupérer une valeur (mis dans un bouton)
odoo:var..FormatJSON = "{}"
odoo:var.filtre = "('name','=','"+ SansEspace("2006") +"'),"
monfiltre = Vrai
monfiltrevaleur = "('name','=','"+ SansEspace("2005") +"'),"
//dans le call: on appel le model ici : wpa.posteateliers et la method : api_v1_wpa_posteateliers_cadence_get
//cf code python tout en bas
SI odoo:call("wpa.posteateliers","api_v1_wpa_posteateliers_cadence_get") ALORS
ToastAffiche("Cadence poste 2005" + CRLF + "Cadence : " + odoo:res_data[1].cadence + CRLF + "Nb : " + odoo:res_data[1].nb_cadence + CRLF + "Nb défaut : " + odoo:res_data[1].nb_cadence_default,toastCourt,cvMilieu,chCentre)

FIN




exemple de la classe
CJsonOdoo_v3 est une Classe


p_database est une chaîne
p_login est une chaîne
p_password est une chaîne
p_ipserveur est une chaîne
p_company_id est un entier
p_timeout est un entier
demande_request est un JSON
res_data est un JSON
var est un JSON
p_replog est une chaîne
p_appli est une chaîne
IDFichier est un entier

PRIVÉE
demande_id est un entier
MaRequeteConnexion est un restRequête
MaRequeteRequest est un restRequête
cReponseRequest est un restRéponse
demande_connexion est un JSON
result_connexion est un JSON
DureeMaFonction est une Durée

FIN





Procedure Constructeur()


:demande_id = 1
:demande_connexion.jsonrpc = "2.0"
:demande_connexion.method = "call"
:p_timeout = 20000
:p_replog = ""
:IDFichier = -1

Procedure Destructeur()

//:odoo_actif = False

Procedure connexion()


MyErreur est un booléen

:MaRequeteConnexion..Entête["Content-type"] = "application/json"
:MaRequeteConnexion..URL = "http://"+:p_ipserveur+"/web/session/authenticate"
:MaRequeteConnexion..Méthode = httpPost

:demande_connexion.params.db = :p_database
:demande_connexion.params.login = :p_login
:demande_connexion.params.password = :p_password
:demande_connexion.id = :demande_id

:MaRequeteConnexion.Contenu = :demande_connexion..FormatJSON
:cReponseRequest = RESTEnvoie(:MaRequeteConnexion)

SI :p_replog <> "" _ET_ :IDFichier=-1 ALORS
:log_open()
FIN

SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
RENVOYER False
SINON

SI :cReponseRequest..CodeEtat<>200 ALORS
//Trace("Erreur HTTP "+:cReponseRequest.CodeEtat)
//Trace("Erreur HTTP description "+:cReponseRequest.DescriptionCodeEtat)
Erreur("Erreur HTTP "+:cReponseRequest.CodeEtat,AnsiVersUnicode(:cReponseRequest..Contenu))
Trace("Envoyé : "+AnsiVersUnicode(:MaRequeteRequest.Contenu))
RENVOYER Faux
SINON


:result_connexion = :cReponseRequest..Contenu
//trace(:cReponseRequest..Contenu)
//Trace(:result_connexion.error..Existe)
MyErreur = :result_connexion.error..Existe
SI MyErreur ALORS RENVOYER False
:result_connexion = :result_connexion.result
RENVOYER True
FIN

FIN



Procedure call(p_model="",p_method="" )

SI :IDFichier<>-1 ALORS
ChronoDébut()
FIN

:MaRequeteRequest..ContentType = typeMimeJSON

:MaRequeteRequest..Entête["Cookie"] = :cReponseRequest.Entête["Set-Cookie"]
:MaRequeteRequest..URL = "http://"+:p_ipserveur+"/web/dataset/call_kw"
:MaRequeteRequest..DuréeNonRéponse = :p_timeout
:demande_request.jsonrpc = "2.0"
:demande_request.method = "call"

SI p_model<>"" ALORS :demande_request.params.model = p_model
SI p_model<>"" ALORS :demande_request.params.method = p_method

:demande_request.params.context.lang = :result_connexion.user_context.lang
:demande_request.params.context.tz = :result_connexion.user_context.tz
:demande_request.params.context.uid = :result_connexion.user_context.uid

:demande_request.params.kwargs.tmp = ""
SupprimeTout(:demande_request.params.kwargs..Membre)

:demande_request.params.args[1] = :result_connexion.Company_id
:demande_request.params.args[2] = :var

:MaRequeteRequest.Contenu = :demande_request..FormatJSON
cMaReponsedata est un restRéponse = RESTEnvoie(:MaRequeteRequest)

SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON

SI cMaReponsedata..CodeEtat<>200 ALORS
// Trace("Erreur HTTP "+cMaReponsedata.CodeEtat)
// Trace("Erreur HTTP description "+cMaReponsedata.DescriptionCodeEtat)
Erreur("Erreur HTTP "+cMaReponsedata.CodeEtat,AnsiVersUnicode(cMaReponsedata..Contenu))
// Trace("Envoyé : "+AnsiVersUnicode(:MaRequeteRequest.Contenu))
RENVOYER Faux
SINON
// trace(cMaReponsedata..Contenu)
:res_data = cMaReponsedata..Contenu
SI :res_data.RESULT = Faux ALORS RENVOYER False
:res_data = :res_data.RESULT


SI :IDFichier<>-1 ALORS

DureeMaFonction = ChronoFin()
:log_write(DuréeVersChaîne(DureeMaFonction,"HH-MM-SS-LLL")+";"+p_model+";"+NetAdresseIP+";"+p_method)

FIN



RENVOYER Vrai
FIN
FIN




// filtre (chaîne ANSI - valeur par défaut="") : <Filtre selon la méthode odoo, exemple : ('ref','=','AA245'),('is_customer','=',True), >
Procedure tesmethode()

//:var.filtre = filtre
:demande_request.params.model = "res.partner"
:demande_request.params.method = "api_v1_get_partner_full"

RENVOYER :call(:demande_request.params.model,:demande_request.params.method)







Procedure call_send_tracking()

:demande_request.params.model = "fpv.tracking"
:demande_request.params.method = "api_v1_send_tracking"

RENVOYER :call(:demande_request.params.model,:demande_request.params.method)


Procedure init()

:p_timeout = 20000
:var = Null
Message modifié, 29 novembre 2019 - 09:29
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 29 novembre 2019 - 09:22
DANS ODOO
***************************************************************************************************************************
API a écrire dans odoo ceci est un exemple donc la maitrise de python est obligatoire :
# -*- coding: utf-8 -*-

import odoo
from odoo import tools, models, fields, api, _
from datetime import date, time, datetime
import base64
import json
import encodings

class wpa_posteateliers(models.Model):
_name = 'wpa.posteateliers'
_inherit = 'wpa.posteateliers'
_model = 'wpa.posteateliers'
_description = 'Package header'


#API qui permet de renvoyer juste les informations de cadence en fonction d'un poste envoyer en valeur de filtre en amont
@api.model
def api_v1_wpa_posteateliers_cadence_get(self, company_id, var):
data = []
filter = []

filter = [('company_id', '=', company_id)]
if var != None:
if 'filtre' in var:
filter += eval(var['filtre'])
posteateliers = self.env['wpa.posteateliers'].search(filter)
for element in posteateliers:
dict = {}
dict['cadence'] = element.cadence
dict['nb_cadence'] = element.nb_cadence
dict['nb_cadence_default'] = element.nb_cadence_default

data.append(dict)

if data:
return json.dumps(data)

return False

****************************************************************************************************************************
Posté le 02 décembre 2019 - 09:30
Et pour l'authentification vous avez un exemple SVP
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 02 décembre 2019 - 09:52
vous avez tout dans ce que j'ai posté : connection et interrogation, il manque juste un exemple d'écriture

Prenez le temps de décortiquer ce que je vous ai envoyé...
Membre enregistré
13 messages
Posté le 02 décembre 2019 - 13:58
re bonjour comment tester si l’utilisateur et son mot de passe sont enregistre dans ma base ?
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 02 décembre 2019 - 16:51
dans la table res_user mais par contre vous pourrez tester que le login, le password lui n'est pas visible RGPD oblige

Il vous faudra certainement ecrire une api qui se connecte a la table res_user afin d'interroger la base si le login existe
Membre enregistré
13 messages
Posté le 03 décembre 2019 - 13:53
est ce qu'il ya une variable de session dans Windev mobile ?
Message modifié, 03 décembre 2019 - 13:53
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 03 décembre 2019 - 15:09
Qu'entendez vous par variable de session ?
Membre enregistré
13 messages
Posté le 03 décembre 2019 - 15:55
j'ai ressui de connecter sur mon base système authentification mais quand je peux accéder a une autre webservice il a dit session expiré
je pense qu'il a besoin de session active
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 04 décembre 2019 - 08:38
Désolé je ne passe pas par les webservices mais je préfère écrire des API car cela me permet de faire et d'exploiter ce que je veux donc je ne peu pas vous renseigner sur les webservices d 'odoo
Membre enregistré
13 messages
Posté le 05 décembre 2019 - 10:09
merci de consulter mon probleme sur ce forum
https://stackoverflow.com/questions/59191576/sid-session-id-changed-when-call-new-api
si vous avez une réponse merci de me dire
Membre enregistré
450 messages
Popularité : +31 (43 votes)
Posté le 05 décembre 2019 - 11:59
avez vous créer un super user dans odoo ? (genre compte d'un admin) et utiliser ce compte avec login et mot de passe comme dans le code de connexion que je vous ai fourni plus haut.

De mon coté c'est comme cela que je me connecte à odoo et je n'ai pas de souci
Membre enregistré
13 messages
Posté le 05 décembre 2019 - 12:09
voici mon code python pour gener mon webservice
class myclass(http.Controller):
@http.route("/api/employee", type="json", auth="user")
def get_employee(self, employee_id):
res=request.env['hr.employee'].get_employee(employee_id)

est ce que auth="user" block l'access ?