Skip to content

Biblioteca em Python para facilitar as requisições SOAP no BrERP

License

LGPL-3.0, GPL-3.0 licenses found

Licenses found

LGPL-3.0
COPYING.LESSER
GPL-3.0
COPYING
Notifications You must be signed in to change notification settings

devcoffee/brerpwsc-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BrERP Web Service Connector - Python

logo-brerp

O BrERP Web Service Connector tem como objetivo facilitar as requisições SOAP para os webservices do BrERP em sua aplicação Python. Com sua arquitetura model oriented, não é necessário tratar os arquivos XML de request e response manualmente. Desta forma, com o auxílio desta biblioteca, é possível realizar facilmente tarefas como:

  • CRUDs, em qualquer tabela do sistema;
  • Extrair informações de views;
  • Executar Doc Actions em qualquer documento do BrERP;
  • Executar processos.

Compatibilidade

Este repositório conta com uma solução Python, compatível com Python 2 e Python 3. Porém, é altamente recomendada a utilização de Python 3, visto que Python 2 será descontinuado no começo de 2020.

Arquitetura

O repositório está dividido em 3 diretórios:

  • brerpwsc:
    • Este diretório contém o código fonte da biblioteca brerpwsc, que é compilada e inserida nos pacotes do pip;
  • sandbox:
    • Este diretório contém uma série de classes de teste e classes de exemplo, que podem ser utilizadas como base para a utilização dessa biblioteca em sua aplicação Python.
  • documents:
    • Este diretório contém arquivos utilizados pelos testes, como xmls de exemplo, ou arquivos .png

Instalação

Para instalar o brerpwsc-python é necessário clonar este repositório para um diretório brerpwsc. Para isso:

git clone https://github.com/devcoffee/brerpwsc-python brerpwsc

Feito isso, basta utilizar o próprio pip para instalar o plugin em seu ambiente python:

pip install -e --user brerpwsc

Exemplo prático: Criando um Parceiro de Negócios com Imagem de Logo

Para podermos utilizar os webservices no BrERP, é necessário realizar uma configuração inicial, que deve informar o sistema sobre quais parâmetros esperar em um request e quais parâmetros enviar na response. Neste exemplo, criaremos uma aplicação capaz de Criar um parceiro de negócios com uma imagem de logo anexada. Para isso, será necessário utilizar três Web Services, um para o envio da imagem, outro para a criação do parceiro de negócios, com o record_id da imagem referenciado e por fim, um Web Service Composto que nos permite enviar todas as informações em uma única requisição.

Configurando os Webservices no BrERP

Para exportar ou importar dados no BrERP, nenhuma linha de código precisa ser escrita. Basta que sejam feitas algumas simples configurações na janela de Segurança de Serviços Web.

Segurança de Serviços Web

Esta é a janela de configuração dos Web Services, e possui 4 abas de configuração, sendo elas:

  • Parâmetros de Serviço Web:
    • Esta aba é de importância vital para o funcionamento do Web Service, uma vez que nela são configuradas as ações do Web Service, como a tabela a ser utilizada, a ação a ser realizada, entre outros.
  • Entradas de Serviço Web:
    • Aqui é informado os parâmetros de entrada do Web Service, ou seja, quais informações serão consumidas por ele. É comum que os parâmetros sejam classificados em conformidade com os nomes da coluna da tabela manipulada.
  • Resultado de Serviço Web:
    • Essa coluna diz respeito as informações que serão retornadas pelo Web Service, também tendo conformidade com o nome das colunas da tabela
  • Acesso de Serviço Web:
    • Nessa aba são configuradas as permissões de Login do Web Service, ou seja, quais perfis terão permissão para utiliza-lo.

SegurancaDeServicosWeb

Criando o Web Service CreateImageTest

Crie um novo WebService na janela Segurança de Serviços Web com o nome CreateImageTest, e preencha-o como a imagem abaixo. Atente-se para os parâmetros:

-Serviço Web: Deve ser Model Oriented Web Services, uma vez que o Web Service agirá diretamente com a base de dados. -Método de Serviço Web: Deve ser Create Data uma vez que o Web Service irá inserir registros na base de dados. -Tabela: Deve ser AD_Image

Lembre-se também de preencher os parâmetros da aba Parâmetros de serviço Web exatamente como na imagem: CreateImageTestWS

Na aba Entrada de Serviços Web crie três campos, referentes as colunas que terão dados inseridos na tabela AD_Image:

CreateImateTestWSEntrada

Por fim, na aba Acesso de Serviços Web insira todos os usuários que devem ter permissão para utilizar o Web Service:

CreateImageTestWSAcesso.png

Criando o Web Service CreateBPartnerTest

Crie um novo WebService na janela Segurança de Serviços Web com o nome CreateBPartnerTest, e preencha-o como a imagem abaixo. Atente-se para os parâmetros:

-Serviço Web: Deve ser Model Oriented Web Services, uma vez que o Web Service agirá diretamente com a base de dados. -Método de Serviço Web: Deve ser Create Data uma vez que o Web Service irá inserir registros na base de dados. -Tabela: Deve ser C_BParter

Lembre-se também de preencher os parâmetros da aba Parâmetros de serviço Web exatamente como na imagem: CreateImageTestWS

Na aba Entrada de Serviços Web crie três campos, referentes as colunas que terão dados inseridos na tabela AD_Image:

CreateImateTestWSEntrada

Por fim, na aba Acesso de Serviços Web insira todos os usuários que devem ter permissão para utilizar o Web Service:

CreateImageTestWSAcesso.png

Criando o Web Service CompositeBPartnerTest

Crie um novo WebService na janela Segurança de Serviços Web com o nome CompositeBPartnerTest, e preencha-o como a imagem abaixo. Atente-se para os parâmetros:

-Serviço Web: Deve ser CompositeInterface, uma vez que o Web Service não agirá diretamente com a base de dados, mas sim, será como um coringa, encapsulando outros Web Services.

Lembre-se também de preencher os parâmetros da aba Acesso de serviço Web exatamente como na imagem: CreateImageTestWS

Código Python

Com os WebServices criados, é preciso digitar um simples código Python utilizando a biblioteca brerpwsc capaz de utilizar os WebServices. Observe o Cogio exemplo abaixo:

from brerpwsc.base import LoginRequest
from brerpwsc.base import Operation
from brerpwsc.base import Field
from brerpwsc.request import CreateDataRequest
from brerpwsc.request import CompositeOperationRequest
from brerpwsc.enums import WebServiceResponseStatus
from brerpwsc.net import WebServiceConnection
from random import randint

import traceback

#Urls de envio
urls = 'https://teste.brerp.com.br'

# Informações de Login do Web Service
login = LoginRequest()
login.client_id = 1000000
login.org_id = 5000003
login.role_id = 1000000
login.warehouse_id = 5000007
login.user = 'superuser @ brerp.com.br'
login.password = 'sua senha aqui'

# Criando o Web Service Para enviar a imagem de Logo
path_image = '../documents/logo_brerp-300x86.png'

ws1 = CreateDataRequest()
ws1.web_service_type = 'CreateImageTest'
ws1.data_row.append(Field('Name', 'brerp-logo.png'))
ws1.data_row.append(
    Field('Description', 'Test Create BPartner and Logo with Python'))

# Criando o campo binário para enviar a imagem
binary_field = Field('BinaryData')
with open(path_image, 'rb') as file:
    binary_field.set_byte_value(file.read())
ws1.data_row.append(binary_field)

# Criando Web Service para criar o parceiro de Negócios
ws2 = CreateDataRequest()
ws2.web_service_type = 'CreateBPartnerTest'
ws2.data_row.append(Field('Name', 'Parceiro de Negócios do BrERP'))
ws2.data_row.append(Field('Value', str(randint(1000000, 10000000))))
# ws2.data_row.append(Field('TaxID', '987654321'))
ws2.data_row.append(Field('Logo_ID', '@AD_Image.AD_Image_ID'))

# Criando Web Service Composite para Enviar as requisições
ws0=CompositeOperationRequest()
ws0.login=login
# Anexando as requisições dos Dois Web Services anteriores no Composite
ws0.operations.append(Operation(ws1))
ws0.operations.append(Operation(ws2))
ws0.web_service_type='CompositeBPartnerTest'

# Criando Conexão
wsc=WebServiceConnection()
wsc.url=urls
wsc.attempts=3
wsc.app_name='Test from python'

# Enviando Requisição
try:
    response=wsc.send_request(ws0)
    wsc.print_xml_request()
    wsc.print_xml_response()

# Recebendo e Exibindo a Resposta
    if response.status == WebServiceResponseStatus.Error:
        print('Error: ', response.error_message)
    else:
        print('Response: ', str(response.web_service_response_model()))
        for res in response.responses:
            print('Response: ', str(res.web_service_response_model()))
        print('-' * 45)
        print('Web Service Type: ', ws0.web_service_type)
        print('Attempts: ', str(wsc.attempts_request))
        print('Time: ', str(wsc.time_request))
except:
    traceback.print_exc()

XML de Envio ao servidor

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:compositeOperationResponse xmlns:ns1="http://idempiere.org/ADInterface/1_0"><CompositeResponses xmlns="http://idempiere.org/ADInterface/1_0"><CompositeResponse><StandardResponse RecordID="1516828"></StandardResponse><StandardResponse RecordID="5000084"></StandardResponse></CompositeResponse></CompositeResponses></ns1:compositeOperationResponse></soap:Body></soap:Envelope>
<soapenv:Envelope xmlns:_0="http://idempiere.org/ADInterface/1_0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <_0:compositeOperation>
      <_0:CompositeRequest>
        <_0:serviceType>CompositeBPartnerTest</_0:serviceType>
        <_0:operations>
          <_0:operation preCommit="false" postCommit="false">
            <_0:TargetPort>createData</_0:TargetPort>
            <_0:ModelCRUD>
              <_0:serviceType>CreateImageTest</_0:serviceType>
              <_0:DataRow>
                <_0:field column="Name">
                  <_0:val>brerp-logo.png</_0:val>
                </_0:field>
                <_0:field column="Description">
                  <_0:val>Test Create BPartner and Logo with Python</_0:val>
                </_0:field>
                <_0:field column="BinaryData">
                  <_0:val>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</_0:val>
                </_0:field>
              </_0:DataRow>
            </_0:ModelCRUD>
          </_0:operation>
          <_0:operation preCommit="false" postCommit="false">
            <_0:TargetPort>createData</_0:TargetPort>
            <_0:ModelCRUD>
              <_0:serviceType>CreateBPartnerTest</_0:serviceType>
              <_0:DataRow>
                <_0:field column="Name">
                  <_0:val>Parceiro de Negócios do BrERP</_0:val>
                </_0:field>
                <_0:field column="Value">
                  <_0:val>4074800</_0:val>
                </_0:field>
                <_0:field column="Logo_ID">
                  <_0:val>@AD_Image.AD_Image_ID</_0:val>
                </_0:field>
              </_0:DataRow>
            </_0:ModelCRUD>
          </_0:operation>
        </_0:operations>
        <_0:ADLoginRequest>
          <_0:user>superuser @ brerp.com.br</_0:user>
          <_0:pass>sua senha aqui</_0:pass>
          <_0:lang>en_US</_0:lang>
          <_0:ClientID>1000000</_0:ClientID>
          <_0:RoleID>1000000</_0:RoleID>
          <_0:OrgID>5000003</_0:OrgID>
          <_0:WarehouseID>5000007</_0:WarehouseID>
        </_0:ADLoginRequest>
      </_0:CompositeRequest>
    </_0:compositeOperation>
  </soapenv:Body>
</soapenv:Envelope>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns1:compositeOperationResponse xmlns:ns1="http://idempiere.org/ADInterface/1_0">
      <CompositeResponses xmlns="http://idempiere.org/ADInterface/1_0">
        <CompositeResponse>
          <StandardResponse RecordID="1516828"/>
          <StandardResponse RecordID="5000084"/>
        </CompositeResponse>
      </CompositeResponses>
    </ns1:compositeOperationResponse>
  </soap:Body>
</soap:Envelope>

Response:  WebServiceResponseModel.CompositeResponse
Response:  WebServiceResponseModel.StandardResponse
Response:  WebServiceResponseModel.StandardResponse

Resultado

A aplicação Python utilizando a biblioteca brerpwsc construiu o .xml e enviou a requisição ao servidor do BrERP. Se observarmos a janela de Parceiro de Negócios podemos observar que o parceiro de negócios definido no código foi criado, juntamente com a imagem de logo escolhida:

TestBPartnerCreated.png

About

Biblioteca em Python para facilitar as requisições SOAP no BrERP

Resources

License

LGPL-3.0, GPL-3.0 licenses found

Licenses found

LGPL-3.0
COPYING.LESSER
GPL-3.0
COPYING

Stars

Watchers

Forks

Packages

No packages published

Languages