PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV Mobile 24 → Connect Directement (erp odoo) (Postgressql) avec windev mobile 24
Connect Directement (erp odoo) (Postgressql) avec windev mobile 24
Iniciado por User_07, nov., 28 2019 2:13 PM - 14 respostas
Publicado em novembro, 28 2019 - 2:13 PM
est ce que c'est possible de connect directement sur la base postgres ?
quelle sont les possiblité pour ce connect ? Merci
Membro registado
63 mensagems
Publicado em novembro, 29 2019 - 8:59 AM
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.
Membro registado
63 mensagems
Publicado em novembro, 29 2019 - 9:14 AM
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





PROCÉDURE Constructeur()


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

PROCÉDURE Destructeur()

//:odoo_actif = False

PROCÉDURE 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



PROCÉDURE 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="") :
0
0
Membro registado
63 mensagems
Publicado em novembro, 29 2019 - 9:22 AM
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

****************************************************************************************************************************
Publicado em dezembro, 02 2019 - 9:30 AM
Et pour l'authentification vous avez un exemple SVP
Membro registado
63 mensagems
Publicado em dezembro, 02 2019 - 9:52 AM
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é...
Membro registado
7 mensagems
Publicado em dezembro, 02 2019 - 1:58 PM
re bonjour comment tester si l’utilisateur et son mot de passe sont enregistre dans ma base ?
Membro registado
63 mensagems
Publicado em dezembro, 02 2019 - 4:51 PM
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
Membro registado
7 mensagems
Publicado em dezembro, 03 2019 - 1:53 PM
est ce qu'il ya une variable de session dans Windev mobile ?
Mensagem modificada, dezembro, 03 2019 - 1:53 PM
Membro registado
63 mensagems
Publicado em dezembro, 03 2019 - 3:09 PM
Qu'entendez vous par variable de session ?
Membro registado
7 mensagems
Publicado em dezembro, 03 2019 - 3:55 PM
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
Membro registado
63 mensagems
Publicado em dezembro, 04 2019 - 8:38 AM
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
Membro registado
7 mensagems
Publicado em dezembro, 05 2019 - 10:09 AM
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
Membro registado
63 mensagems
Publicado em dezembro, 05 2019 - 11:59 AM
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
Membro registado
7 mensagems
Publicado em dezembro, 05 2019 - 12:09 PM
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 ?