0% acharam este documento útil (0 voto)
164 visualizações111 páginas

API de Servicos para Integracoes

Enviado por

Ayres Rois
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
164 visualizações111 páginas

API de Servicos para Integracoes

Enviado por

Ayres Rois
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 111

Célula de Integração

API de Serviços para Integrações

Central Sankhya - Uberlândia


28 de Março de 2019
Atenção
Esta documentação é referente a API para integração de qualquer aplicação
cliente com o
Sankhya-W. A criação da API surgiu da necessidade de outras aplicações interagirem
diretamente com o Sankhya-W de forma a utilizar seus mais diversos serviços para
consumir dados.
Exemplos desses serviços serão mostrados mais adiante. Com o objetivo
de centralização de informações, vários documentos foram agrupados originando
este manual. É importante destacar que nem todo conteúdo listado aqui deverá
obrigatoriamente ser utilizado, portanto, o desenvolvedor responsável pela integra-
ção deverá identificar quais serviços fazem sentido para o cenário de integração do
cliente com a plataforma Sankhya-W.

Público alvo
Profissionais da área de programação e análise de sistemas interessados em
implementar integração com os ERPs do Grupo Sankhya.
Para um melhor entendimento deste manual, é necessário conhecimento
básico sobre tecnologias e padrões Web, principalmente o protocolo HTTP.

Versão do documento: 1.4


Sumário

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1 Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 URL de chamada . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Catálogo de serviços . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Padrão do envelope XML . . . . . . . . . . . . . . . . . . . . . 6

2 PRINCIPAIS ENTIDADES DE DADOS PARA O PROCESSO


DE VENDAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 SERVIÇO DE AUTENTICAÇÃO . . . . . . . . . . . . . . . . 15

4 BUSCANDO DADOS NO SANKHYA-W . . . . . . . . . . . 20


4.1 crud.find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2 CRUDServiceProvider.loadRecords . . . . . . . . . . . . . . . . 22
4.3 DatasetSP.loadRecords . . . . . . . . . . . . . . . . . . . . . . 25
4.4 DbExplorerSP.executeQuery . . . . . . . . . . . . . . . . . . . 27

5 BUSCA ESTOQUE DE PRODUTOS . . . . . . . . . . . . . 32

6 BUSCA PREÇOS DE PRODUTOS . . . . . . . . . . . . . . 37

7 BUSCA UTILIZANDO VIEWS DO BD . . . . . . . . . . . . 42

8 PRODUTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.1 Exemplos de Consultas . . . . . . . . . . . . . . . . . . . . . . 47
8.1.1 Consultar todos os produto . . . . . . . . . . . . . . . . . . . . . . 47
8.1.2 Informações Adicionais (Unidade de Medida e Estoque) . . . . . . . 49
8.1.3 Busca de produtos por parâmetro . . . . . . . . . . . . . . . . . . 53
8.1.4 Consultar descrição e código do grupo do produto . . . . . . . . . . 53
8.1.5 Consultar informações do grupo de produtos . . . . . . . . . . . . . 54
8.1.6 Buscar preço por Parceiro/Empresa . . . . . . . . . . . . . . . . . 54
8.1.7 Outras Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.1.7.1 Cotações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.2 Download de Imagem de Produto . . . . . . . . . . . . . . . . 57

9 INCLUSÃO E ALTERAÇÃO DE PARCEIROS E OUTROS


CADASTROS . . . . . . . . . . . . . . . . . . . . . . . . . . 58

10 EXCLUSÃO DE REGISTROS . . . . . . . . . . . . . . . . . . 62

11 PEDIDOS/ORÇAMENTOS . . . . . . . . . . . . . . . . . . . 66
11.1 Consultar Pedido de Compra . . . . . . . . . . . . . . . . . . . 66
11.2 Consultar Pedido de Venda . . . . . . . . . . . . . . . . . . . . 69
11.3 Aplicando filtros nas consultas . . . . . . . . . . . . . . . . . . 70

12 NOTAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
12.1 Consulta Nota de Compra . . . . . . . . . . . . . . . . . . . . . 72
12.2 Consulta Nota de Venda . . . . . . . . . . . . . . . . . . . . . 75
12.3 Aplicando filtros nas consultas . . . . . . . . . . . . . . . . . . 75

13 FINANCEIRO . . . . . . . . . . . . . . . . . . . . . . . . . . 77
13.1 Contas à pagar . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
13.2 Contas à receber . . . . . . . . . . . . . . . . . . . . . . . . . . 78
13.3 Contas pagas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
13.4 Contas recebidas . . . . . . . . . . . . . . . . . . . . . . . . . . 79
13.5 Provisão de Receitas . . . . . . . . . . . . . . . . . . . . . . . . 80
13.6 Provisão de Despesas . . . . . . . . . . . . . . . . . . . . . . . 80

14 PARCEIROS . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

15 REGISTRO DE CONTRATOS . . . . . . . . . . . . . . . . . 86
15.1 Entidade: Contrato . . . . . . . . . . . . . . . . . . . . . . . . . 86
15.2 Entidade: Comissao . . . . . . . . . . . . . . . . . . . . . . . . 87
15.3 Entidade: ProdutoServicoContrato . . . . . . . . . . . . . . . . 88
15.4 Entidade: ProdutoServicoSerie . . . . . . . . . . . . . . . . . . 89
15.5 Entidade: VendedorProdutoContrato . . . . . . . . . . . . . . 89
15.6 Entidade: PrecoContrato . . . . . . . . . . . . . . . . . . . . . 90
15.7 Entidade: OcorrenciaContrato . . . . . . . . . . . . . . . . . . 91
15.8 Entidade: Financeiro . . . . . . . . . . . . . . . . . . . . . . . . 92
15.9 Criterios de Rateio . . . . . . . . . . . . . . . . . . . . . . . . . 95

16 INCLUSÃO DE PEDIDOS/NOTAS . . . . . . . . . . . . . . 96

17 INCLUSÃO DE FINANCEIROS . . . . . . . . . . . . . . . . 104

18 UTILIZANDO CHAMADAS DA CLASSE SWSERVICEIN-


VOKER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
18.1 Construtor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
18.1.1 Parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
18.2 O Método de Chamada do Serviço . . . . . . . . . . . . . . . 110
18.2.1 Parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
18.2.2 Retorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
18.2.3 Utilização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
1 Introdução

1.1 Apresentação
A API de serviços da plataforma Sankhya se dispõe a fornecer um meio de
integração com outros sistemas de forma fácil e independente de tecnologia.
Essa API é baseada em chamadas HTTP ou HTTPS, do tipo POST e GET,
com corpo no formato XML ou JSON (dependendo do serviço). Portanto, qualquer
sistema que possuir capacidade de realizar uma chamada HTTP convencional
poderá fazer uso dos diversos serviços fornecidos pela API.

1.2 URL de chamada


A URL de requisição possui sempre o mesmo padrão, independente do
serviço a ser utilizado:

http[s]://[nome_ou_ip_do_servidor][:porta]/[modulo]/
service.sbr?serviceName=[nome.do.serviço]
mgeSession=[ID_de_autenticação]
Exemplo:

http://192.168.1.2:8080/mge/service.sbr?serviceName=
CRUDServiceProvider.loadRecords&mgeSession=
Lvfmu2OX897yFqXSevhFLPke8M1oebArkHSmih

Nota importante!
Como no exemplo acima, todos os exemplos utilizam uma URL fictícia que
deve sempre ser substituída pela URL real, fornecida pela empresa utilizadora das
soluções Sankhya/Jiva.
A porta usada nos exemplos é a 8080(padrão), no entanto deve-se verificar
a porta correta junto ao responsável pelo sistema ou pela rede, pois é comum o uso
de outras portas.
Para se realizar a chamada de um ou mais serviços é necessário primeiro
realizar a autenticação utilizando um serviço específico informando usuário e senha
previamente cadastrado no sistema.
Recomenda-se fortemente criar um usuário específico para cada sistema
que venha a utilizar estes serviços, facilitando o controle e auditoria dos dados
imputados e lidos por estes.

1.3 Catálogo de serviços


Existem centenas de serviços disponíveis que realizam as mais diversas
tarefas, e não existe um catalogo listando todos esses serviços e seus respectivos
parâmetros. No entanto, esse documento possui exemplos dos serviços mais tipica-
mente utilizados na integração com outros sistemas, como portais de e-commerce e
sistemas auxiliares. Para informações sobre outros serviços, favor entrar em contato
com a Central Sankhya.

Nota importante!
Outros serviço da plataforma pode ser usado por sistemas externos (desde
que autenticados, mesmo aqueles serviços que não foram criados com a perspectiva
de serem usados por outros sistemas. Nestes casos, a Sankhya se resguarda o direito
de modificar, a qualquer momento e sem prévio aviso, qualquer aspecto destes
serviços, desde os parâmetros de chamada, conteúdo e formato do resultado até a
completa descontinuação do serviço em futuras versões da plataforma.
Os serviços publicados em documentações e manuais de integração não
estão sujeitos a mudanças ou quebra de compatibilidades retroativas citadas no
paragrafo anterior.

1.4 Padrão do envelope XML


Requisição
Como dito anteriormente, todas as chamadas são do tipo POST ou GET e
possuem um corpo XML ou JSON com os parâmetros da chamada. Esses parâmetros
são específicos por serviço e são envolvidos em um conjunto de elementos que
representam um envelope de chamada, como neste exemplo:

Listing 1.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" [ nome . do . s e r v i c o ] ">
2 <requestBody>
3 < !−− e l e m e n t o s e s p e c i f i c o s de cada s e r v i c o a q u i −−>
4 </ requestBody>
5 </ s e r v i c e R e q u e s t>

O uso da declaração <?xml> é opcional. O Content-type (Http header)


deve ser text/xml;charset=ISO-8859-1
Resposta
Todos os serviços retornam uma resposta no formato XML, como neste
exemplo:

Listing 1.2 – Test


1 <? xml v e r s i o n=" 1 . 0 " e n c o d i n g=" ISO−8859−1 " ?>
2 <s e r v i c e R e s p o n s e serviceName=" [ nome . do . s e r v i c o ] " s t a t u s=" 1 ">
3 <responseBody>
4 < !−−
5 e l e m e n t o ( s ) com o conteudo da r e s p o s t a , e s p e c i f i c o para
cada
6 servico
7 −−>
8 </ responseBody>
9 < !−− e l e m e n t o o p c i o n a l de a l e r t a s e mensagens −−>
10 <s t a t u s M e s s a g e>
11 < ! [CDATA[ mensagem de e r r o ou a l e r t a em formato b a s e 6 4 ] ]>
12 </ s t a t u s M e s s a g e>
13 </ s e r v i c e R e s p o n s e>

O exemplo acima mostra uma resposta bem sucedida (status = 1), porém
existem outros status com significados específicos:
Status Tipo Significado
A chamada do serviço terminou no servidor com erro.
0 ERROR Neste caso o elemento será retornado com a mensagem
de erro em formato base 64.
A chamada foi bem sucedida e a resposta está presente
1 OK em <responseBody>. Alguns serviços não possuem
resposta relevante, portanto o elemento <responseBody>será vazio.
Mesmo significado de OK(1), no entanto o elemento
2 INFO
<statusMensage>possui mensagem de aviso ou alerta.
A sessão com o servidor terminou por tempo de inoperância
3 TIMEOUT
excedido. Um outro procedimento de login é necessário.
O serviço se deparou com uma situação onde precisa
de mais informações para ser executado. Neste caso
4 SERVICE_CANCELED um elemento <clientEvents>também será retornado.
O uso deste tipo de recurso está fora do escopo deste documento,
portanto, em casos de ocorrência, a Central Sankhya deverá ser consultada.

# Links úteis

• Decoder on-line para base 64 (útil para decodar mensagens retornadas)


https://www.base64decode.org

• Encoder para MD5 on-line (útil para gerar strings MD5 para alguns serviços)
http://www.danstools.com/md5-hash-generator

• PostMan (Extensão do Google Chorme para testar chamadas REST, utilizada


neste manual)
https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbnc

• Serviço on-line para encodar texto compatível com XML


http://coderstoolbox.net/string/#!encoding=xml&action=encode&charset=
iso_8859_1

• Utilitario Para chamas http Postman


https://www.getpostman.com

• Utilitario Para chamas http Insomnia


https://insomnia.rest/download
#Perguntas frequentes

• É possível usar JSON ou outro formato no corpo da mensagem?

– R: Depende do serviço. Cada serviço podem e muito provavelmente terão


um formato de entrada e parâmetros diferentes.

• O XML deve ser formatado antes de ser enviado?

– R: Não. Nos exemplos deste manual o XML está formatado apenas para
facilitar o entendimento. No uso real deve-se enviar o XML sem espaços
ou quebras de linhas desnecessários, apenas aqueles que fazer parte do
conteúdo de campos de texto devem ser preservados (geralmente dentro
de um CDATA).

• Qual API ou ferramenta de conexão devo utilizar?

– R: Os serviços podem ser utilizados por qualquer linguagem que suporte


chamadas HTTP/HTTPS.

• Como saber o nome das entidades de dados e suas respectivas ligações e


campos?

– R: Neste manual existe um guia com o nome das principais entidades


de dados e suas chaves primárias, no entanto o local mais apropriado
para se obter essas informações é no próprio sistema (Sankhya-W), na
tela Dicionário de dados. Nesta tela é possível se obter informações
sobre tabelas, campos, ligações, domínio de campos (lista de possíveis
valores, nulabilidade, tipo de dados), etc. Em caso de dúvida, entrar em
contato com a Central Sankhya/Jiva.

• Qual é o padrão de nomes usado pela plataforma Sankhya/Jiva?

– R: Todos os nomes de campos e entidades de dados são sensíveis a caixa


baixa/alta (case-sensitive).
– Nomes de campos devem ser escritos sempre em CAIXA ALTA, sem
acentos nem cedilhas.
– Nome de entidades de dados seguem o padrão "Camel-case", onde o
primeiro caractere de uma palavra é sempre em maiúsculo, o resto
é em minúsculo. Não há acentos nem cedilha e não há separação de
palavras por espaço, exemplo: TipoOperacao (nome da entidade Tipo
de Operação)
2 Principais Entidades de Dados Para o
Processo de Vendas

As entidades abaixo são as principais para o processo de vendas. É possível


pesquisar ainda outras entidades através da tela “Dicionário de dados” do Sankhya-
W. Para localizar esta tela no sistema, basta buscar “dicionário de dados” na lupa
localizada no canto superior direito da tela, veja:

Figura 1 – Acessando a tela “Dicionário de Dados”


EmpresaFinanceiro TGFEMP CODEMP Cadastro da Empresa.
Empresa TGFEMP CODEMP Ativação e parâmetros da empresa.
Parceiro TGFPAR CODPARC Cadastro de parceiros(clientes fornece-
dores transportadoras etc).
Natureza TGFNAT CODNAT Cadastro de Naturezas.
Vendedor TGFVEN CODVEND Cadastro de Vendedores.
Produto TGFPRO CODPROD Cadastro de Produtos.
Serviço TGFPRO CODPROD Cadastro de Serviços. É a mesma ta-
bela de produtos. Neste caso acoluna
USOPROD = ’S’determina que trata-se
de um produto. Ver domínio do campo
USOPROD para mais informações.
Volume TGFVOL CODVOL Cadastro de unidades do produto.
VolumeAlternativo TGFVOA CODPROD, Cadastro de unidades alternativasdos
CODVOL, produtos.
CONTROLE
AliquotaICMS TGFICM UFORIG, UF- Cadastro das aliquotas de ICMS doPro-
DEST, TI- duto.
PRESTRICAO,
CODRESTRI-
CAO, TIPRES-
TRICAO2,
CODRESTRI-
CAO2
Aliquota TGFALI NUNOTA, ALI- Outros impostos.
QUOTA, TIPO
TipoOperacao TGFTOP CODTIPOPER, Tipo de Operações (TOP).Essa tabela
DHALTER configura o comportamentodo sistema
em uma série de aspectos.Ver documen-
tação do sistemapara mais informações.
ControleNumeracao TGFNUM ARQUIVO, CO- Numeração e série de cupons/notas.
DEMP, SERIE,
CODMODDOC
TipoTitulo TGFTIT CODTIPTIT Tipo de título.
TipoNegociacao TGFTPV CODTIPVENDA, Tipo de Negociação. Determina umasé-
DHALTER rie de regras de negócio quando setrata
de um movimento de estoque(compra,
venda, transferências, etc)ou mesmo em
movimentações financeiras.
CabecalhoNota TGFCAB NUNOTA Cabeçalho de uma nota/pedido/ trans-
ferência. Nesta tabela são gravados pedi-
dos, notas comuns, NF-e, NFS-e, NFC-e,
Cupom Fiscal.
ItemNota TGFITE NUNOTA, SE- Item de uma nota/pedido/transferên-
QUENCIA cia.Esta tabela é ’detail’da TGFCAB.
Financeiro TGFFIN NUFIN Títulos nanceiros. Cada parcela repre-
sentauma linha nesta tabela. Para nan-
ceiro originadode nota é necessário pre-
encher o campoNUNOTA com conteúdo
correspondente aocampo NUNOTA da
TGFCAB.
ImpostoItemNota TGFDIN NUNOTA, SE- Impostos do item da nota. Um item de
QUENCIA, CO- umanota pode possuir diversas linhas
DIMP, CODINC nesta tabela.
ArquivoNFe TGFNFE NUNOTA Dados da NFe.
Cidade TSICID CODCID Cadastro de cidades.
Bairro TSIBAI CODBAI Cadastro de bairros
Endereco TSIEND CODEND Cadastro de endereços.
LiberacaoLimite TSILIB NUCHAVE, Registro de liberação de nota x evento.
TABELA, Paraliberações de nota é necessário pre-
EVENTO, SE- encher ocampo NUCHAVE com con-
QUENCIA, teúdo correspondenteao campo NU-
SEQCASCATA, NOTA da TGFCAB.
NUCLL
LimiteLiberacao TSILIM CODUSU, COD- Cadastro dos limites de liberação do
GRU, EVENTO usuáriopor evento.

Como exemplo de utilização da tela, iremos buscar todas as instâncias


que contenham a palavra contrato. É importante destacar que o carácter ‘%’ faz
diferença na busca das informações.
Figura 2 – Buscando instâncias que contenham a palavra “contrato”

Importante! A tela dicionário de dados só está disponibilizada para clientes


que adquiriram o opcional de campos adicionais.
3 Serviço de Autenticação

Os passos a seguir demonstram como deve ser feita a autenticação sem a


utilização da classe SWServiceInvoker.
O procedimento de autenticação é realizado chamando o serviço Mobile-
LoginSP.login do módulo mge, e deve ser o primeiro passo em uma sessão de
chamadas de serviços.
Com apenas uma autenticação e possível chamar vários outros serviços em
sequência, exemplo:

1. chama serviço MobileLoginSP.login (obtem o ID de sessão)

2. chama serviço ‘A’

3. chama serviço ‘B’

4. chama serviço ‘C’

5. chama serviço MobileLoginSP.logout

# Parametros de chamada:

• NOMUSU

– nome do usuário (case-sensitive)

• INTERNO

– senha do usuário em texto puro (case-sensitive)

• INTERNO2

– senha do usuário em formato MD5. Neste caso gera-se um MD5 conca-


tenando o nome do usuário com a senha.
– Exemplo:
∗ Nome de usuário = JOSEDASILVA
Senha = jose123
String concatenado = "JOSEDASILVAjose123"
MD5 gerado =3dc1121d4379c974eca8eaf0c3737018

Observação: Os parâmetros INTERNO e INTERNO2 devem ser usados


separadamente, ou seja, quando se usa um não se usa o outro.
Por questões de segurança, recomenda-se utilizar o parâmetro INTERNO2,
pois assim a senha não precisa ficar guardada em texto aberto e nem é possível ser
interceptada por sniffers de rede.

Quando bem sucedido, o serviço retorna um ID que deverá ser usado nas
chamadas de serviço subsequentes.
# Detalhes do HTTP

Método de requisição POST


URL http://nome_ou_ip_do_servidor:8080/mge/
service.sbr?serviceName=MobileLoginSP.login

Headers HTTP:
Content-Type: text/xml;charset=ISO-8859-1
Corpo da requisição (utilizando senha em texto aberto):

Listing 3.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" MobileLoginSP . l o g i n ">
2 <requestBody>
3 <NOMUSU>JOSEDASILVA</NOMUSU>
4 <INTERNO>j o s e 1 2 3</INTERNO>
5 </ requestBody>
6 </ s e r v i c e R e q u e s t>
Corpo da requisição (utilizando senha em formato MD5):

Listing 3.2 – Test


1 <s e r v i c e R e q u e s t serviceName=" MobileLoginSP . l o g i n ">
2 <requestBody>
3 <NOMUSU>JOSEDASILVA</NOMUSU>
4 <INTERNO2>3 d c 1 1 2 1 d 4 3 7 9 c 9 7 4 e c a 8 e a f 0 c 3 7 3 7 0 1 8</INTERNO2>
5 </ requestBody>
6 </ s e r v i c e R e q u e s t>

Resposta bem sucedida:

Listing 3.3 – Test


1 <s e r v i c e R e s p o n s e serviceName=" MobileLoginSP . l o g i n " s t a t u s=" 1 "
2 p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 0 cad23a8−b842 −40ee−a6bb−
3 6 f 5 2 d 0 c 8 f 3 7 7 ">
4 <responseBody>
5 < j s e s s i o n i d>3EB77969C9BDF0BF68A9D8F39E733142</ j s e s s i o n i d>
6 <i d u s u>NzM=</ i d u s u>
7 <c a l l I D>e 5 6 5 8 f 6 1 0 f b c 4 2 1 4 b 9 a 4 1 3 a 2 c 1 8 5 6 0 0 6</ c a l l I D>
8 </ responseBody>
9 </ s e r v i c e R e s p o n s e>

O atributo status com valor = 1 determina que a autenticação foi bem


sucedida. O elemento mais importante da resposta é <jsessionid>, pois ele contém
o ID que deverá ser usado nas chamadas subsequentes dos outros serviços. Para
passar esse ID nas chamadas subsequentes, deve-se usar um cookie com nome
JSESSIONID, como no exemplo abaixo:

Cookie: JSESSIONID=3EB77969C9BDF0BF68A9D8F39E733142

# Tempo de sessão

Sessões iniciadas pelo serviço de autenticação possuem tempo de vida


indefinido quando em uso, e de 5 minutos quando inoperantes. Isso significa que,
depois de 5 minutos sem chamar nenhum serviço, a sessão será cancelada pelo
servidor e, caso seja necessário realizar chamadas de serviços, um novo procedimento
de autenticação deverá ser realizado.

# Erros

Quando o serviço de autenticação encontra algum problema, como por


exemplo nome de usuário ou senha incorretos, será retornado mensagem de erro no
formato base 64, como no exemplo abaixo:

Listing 3.4 – Test


1 <s e r v i c e R e s p o n s e serviceName=" MobileLoginSP . l o g i n " s t a t u s=" 0 "
2 p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 933 c3b25−f b f 2 −45a6−a96a−
3 756 f d 7 a c b 3 7 4 ">
4 <s t a t u s M e s s a g e>
5 < ! [CDATA[ VXN14XJpby9TZW5oYSBpbnbhbGlkby4= ] ]>
6 </ s t a t u s M e s s a g e>
7 </ s e r v i c e R e s p o n s e>

No exemplo acima, o elemento <statusMessage> possui conteúdo do tipo


CDATA com encode Base 64 que, neste exemplo, é ‘Usuário/Senha inválido.’O
atributo status com valor = 0 determina que houve falha no serviço.
# Logout

Ao final de uma sequência de chamadas de serviços, devemos realizar o


logout da sessão, liberando recursos importantes para o servidor de aplicações. Para
tanto, devemos chamar o serviço MobileLoginSP.logout, como segue:

# Parametros do serviço

NENHUM

# Detalhes do HTTP

Método de requisição POST


URL http://nome_ou_ip_do_servidor:8080/mge/
service.sbr?serviceName=MobileLoginSP.logout
Headers HTTP:
Cookie: JSESSIONID=3EB77969C9BDF0BF68A9D8F39E733142

Corpo da requisição:
Para este caso é possível notar que Não Existe um Corpo.

Resposta:

Listing 3.5 – Test


1 <s e r v i c e R e s p o n s e serviceName=" MobileLoginSP . l o g o u t " s t a t u s=" 1 "
p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" f190b285 −9492−4037−b4e1−
f 4 2 6 5 d c f c 0 5 d ">
2 <responseBody />
3 </ s e r v i c e R e s p o n s e>

Veja que o elemento de resposta é vazio, pois não há nada relevante a ser
retornado neste serviço.
4 Buscando dados no Sankhya-W

Hoje contamos com varios serviços de busca de dados no sistema. Os mais


versáteis são:

4.1 crud.find
http[s]://[ip_do_servidor][:porta]/mge/service.sbr?
serviceName=crud.find&mgeSession=[JSESSIONID]
RequestBody:

Listing 4.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" crud . f i n d ">
2 <requestBody>
3 <e n t i t y name=" P a r c e i r o " g e t P r e s e n t a t i o n s=" f a l s e ">
4 < c r i t e r i o nome="CGC_CPF" v a l o r=" 00000000000 " />
5 < f i e l d s>
6 < f i e l d name ="CODPARC" />
7 < f i e l d name ="CODVEND" />
8 < f i e l d name ="NOMEPARC" />
9 < f i e l d name ="RAZAOSOCIAL" />
10 < f i e l d name ="TIPPESSOA" />
11 < f i e l d name ="CODPARCMATRIZ" />
12 < f i e l d name ="CODEND" />
13 < f i e l d name ="NUMEND" />
14 < f i e l d name ="COMPLEMENTO" />
15 < f i e l d name ="CODBAI" />
16 < f i e l d name ="CODCID" />
17 < f i e l d name ="CODREG" />
18 < f i e l d name ="CEP" />
19 < f i e l d name ="CAIXAPOSTAL" />
20 < f i e l d name ="TELEFONE" />
21 < f i e l d name ="RAMAL" />
22 < f i e l d name ="FAX" />
23 < f i e l d name ="EMAIL" />
24 </ f i e l d s>
25 </ e n t i t y>
26 </ requestBody>
27 </ s e r v i c e R e q u e s t>

ResponseBody:

Listing 4.2 – Test


1 <? xml v e r s i o n=" 1 . 0 " e n c o d i n g=" ISO−8859−1 " ?>
2 <s e r v i c e R e s p o n s e serviceName=" crud . f i n d " s t a t u s=" 1 "
p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 18
E477563FBA05A5E93A507C380E1BE6 " e r r o r C o d e="−1" e r r o r L e v e l="−1">
3 <responseBody>
4 <e n t i d a d e s nome=" P a r c e i r o ">
5 <e n t i d a d e>
6 <COMPLEMENTO />
7 <RAMAL />
8 <CODVEND>2</CODVEND>
9 <CEP>
10 < ! [CDATA[ 1 5 0 7 6 6 2 0 ] ]>
11 </CEP>
12 <CODBAI>80</CODBAI>
13 <TELEFONE>
14 < ! [CDATA[ 0 3 4 32390700 ] ]>
15 </TELEFONE>
16 <RAZAOSOCIAL>
17 < ! [CDATA[JOANA FON ] ]>
18 </RAZAOSOCIAL>
19 <CAIXAPOSTAL />
20 <NUMEND>
21 < ! [CDATA[ 1 2 3 ] ]>
22 </NUMEND>
23 <NOMEPARC>
24 < ! [CDATA[JOANA FON ] ]>
25 </NOMEPARC>
26 <CODCID>147</CODCID>
27 <EMAIL />
28 <CODEND>70</CODEND>
29 <CODPARC>9</CODPARC>
30 <CODPARCMATRIZ>9</CODPARCMATRIZ>
31 <CODREG>10100</CODREG>
32 <TIPPESSOA>
33 < ! [CDATA[ J ] ]>
34 </TIPPESSOA>
35 <FAX />
36 </ e n t i d a d e>
37 </ e n t i d a d e s>
38 </ responseBody>
39 </ s e r v i c e R e s p o n s e>

4.2 CRUDServiceProvider.loadRecords
http[s]://[ip_do_servidor][:porta]/mge/service.sbr?
serviceName=CRUDServiceProvider.loadRecords&mgeSession=[JSESSIONID]
O serviço CRUDServiceProvider.loadRecords é um otimo serviço para ser
utilizado quando é necessário fazer a paginação da resposta. No Requestbody deve
ser adicionado a propriedade offsetPage="0"para trazer a primeira pagina.
Na resposta teremos a estrutura: total de registros da pagina, se existe mais
paginas, qual a pagina atual e quantos itens já foram lidos em paginas passadas: <
entities total="1"hasMoreResult="false"offsetPage="0"offset="0»
RequestBody:

Listing 4.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" P a r c e i r o " i n c l u d e P r e s e n t a t i o n F i e l d s="N"
o f f s e t P a g e=" 0 ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t ="CODPARC,CODVEND,NOMEPARC,RAZAOSOCIAL,
TIPPESSOA,CODPARCMATRIZ,CODEND,NUMEND,COMPLEMENTO,
CODBAI,CODCID,CODREG, CEP,CAIXAPOSTAL,TELEFONE,RAMAL
,FAX, EMAIL" />
6 </ e n t i t y>
7 < c r i t e r i a>
8 <e x p r e s s i o n></ e x p r e s s i o n>
9 </ c r i t e r i a>
10 </ d a t a S e t>
11 </ requestBody>
12 </ s e r v i c e R e q u e s t>

ResponseBody:

Listing 4.4 – Test


1 <? xml v e r s i o n=" 1 . 0 " e n c o d i n g=" ISO−8859−1 " ?>
2 <s e r v i c e R e s p o n s e serviceName=" CRUDServiceProvider . l o a d R e c o r d s "
s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 04
AB05AF480BC0B034C056D4602BA4EF " e r r o r C o d e="−1" e r r o r L e v e l="−1">
3 <responseBody>
4 < e n t i t i e s t o t a l=" 1 " hasMoreResult=" f a l s e " o f f s e t P a g e=" 0 "
o f f s e t=" 0 ">
5 <metadata>
6 < f i e l d s>
7 < f i e l d name="CODPARC" />
8 < f i e l d name="CODVEND" />
9 < f i e l d name="NOMEPARC" />
10 < f i e l d name="RAZAOSOCIAL" />
11 < f i e l d name="TIPPESSOA" />
12 < f i e l d name="CODPARCMATRIZ" />
13 < f i e l d name="CODEND" />
14 < f i e l d name="NUMEND" />
15 < f i e l d name="COMPLEMENTO" />
16 < f i e l d name="CODBAI" />
17 < f i e l d name="CODCID" />
18 < f i e l d name="CODREG" />
19 < f i e l d name="CEP" />
20 < f i e l d name="CAIXAPOSTAL" />
21 < f i e l d name="TELEFONE" />
22 < f i e l d name="RAMAL" />
23 < f i e l d name="FAX" />
24 < f i e l d name="EMAIL" />
25 </ f i e l d s>
26 </ metadata>
27 <e n t i t y>
28 <f 0>9</ f 0>
29 <f 1>2</ f 1>
30 <f 2>JOANA FON</ f 2>
31 <f 3>JOANA FON</ f 3>
32 <f 4>J</ f 4>
33 <f 5>9</ f 5>
34 <f 6>70</ f 6>
35 <f 7>123</ f 7>
36 <f 8 />
37 <f 9>80</ f 9>
38 <f 1 0>147</ f 1 0>
39 <f 1 1>10100</ f 1 1>
40 <f 1 2>15076620</ f 1 2>
41 <f 1 3 />
42 <f 1 4>034 32390700</ f 1 4>
43 <f 1 5 />
44 <f 1 6 />
45 <f 1 7 />
46 </ e n t i t y>
47 </ e n t i t i e s>
48 </ responseBody>
49 </ s e r v i c e R e s p o n s e>

http[s]://[ip_do_servidor][:porta]/mge/service.sbr?
serviceName=DatasetSP.loadRecords&mgeSession=[JSESSIONID]
RequestBody:

4.3 DatasetSP.loadRecords
Listing 4.5 – Test
1 {
2 " serviceName " : " DatasetSP . l o a d R e c o r d s " ,
3 " requestBody " : {
4 " dataSetID " : " 00O" ,
5 " entityName " : " P a r c e i r o " ,
6 " standAlone " : f a l s e ,
7 " fields " : [
8 "CODPARC" ,
9 "CODVEND" ,
10 "NOMEPARC" ,
11 "RAZAOSOCIAL" ,
12 "TIPPESSOA" ,
13 "CODPARCMATRIZ" ,
14 "CODEND" ,
15 "NUMEND" ,
16 "COMPLEMENTO" ,
17 "CODBAI" ,
18 "CODCID" ,
19 "CODREG" ,
20 "CEP" ,
21 "CAIXAPOSTAL" ,
22 "TELEFONE" ,
23 "RAMAL" ,
24 "FAX" ,
25 "EMAIL"
26 ],
27 " p a r a l l e l L o a d e r " : true ,
28 " c r u d L i s t e n e r " : " br . com . sankhya . m o d e l c o r e . c r u d l i s t e n e r s .
ParceiroCrudListener " ,
29 " criteria " : {
30 " e x p r e s s i o n " : " ( t h i s .CODPARC > 0 ) " ,
31 " parameters " : [ ]
32 }
33 }
34 }

ResponseBody:

Listing 4.6 – Test


1 {
2 " serviceName " : " DatasetSP . l o a d R e c o r d s " ,
3 " status " : "1" ,
4 " pendingPrinting " : " f a l s e " ,
5 " t r a n s a c t i o n I d " : " D012F1B325155C17875B47402A05459C " ,
6 " responseBody " : {
7 " total " : "1" ,
8 " result " : [
9 [
10 "9" ,
11 "2" ,
12 "JOANA FON" ,
13 "JOANA FON" ,
14 "J" ,
15 "9" ,
16 " 70 " ,
17 " 123 " ,
18 "" ,
19 " 80 " ,
20 " 147 " ,
21 " 10100 " ,
22 " 15076620 " ,
23 "" ,
24 " 034 32390700 " ,
25 "" ,
26 "" ,
27 ""
28 ]
29 ]
30 }
31 }
4.4 DbExplorerSP.executeQuery
http[s]://[ip_do_servidor][:porta]/mge/service.sbr?
serviceName=DbExplorerSP.executeQuery&mgeSession=[JSESSIONID]
RequestBody:

Listing 4.7 – Test


1 {
2 " serviceName " : " DbExplorerSP . executeQuery " ,
3 " requestBody " : {
4 " s q l " : "SELECT CODPARC, CODVEND, NOMEPARC, RAZAOSOCIAL,
TIPPESSOA, CODPARCMATRIZ, CODEND, NUMEND, COMPLEMENTO,
CODBAI, CODCID, CODREG, CEP, CAIXAPOSTAL, TELEFONE, RAMAL
, FAX, EMAIL FROM TGFPAR WHERE CODPARC > 0 "
5 }
6 }
ResponseBody:

Listing 4.8 – Test


1 {
2 " serviceName " : " DbExplorerSP . executeQuery " ,
3 " status " : "1" ,
4 " pendingPrinting " : " f a l s e " ,
5 " t r a n s a c t i o n I d " : " 1BA8617EF22480C46CD9DB48C457B310 " ,
6 " responseBody " : {
7 " fieldsMetadata " : [
8 {
9 " name " : "CODPARC" ,
10 " d e s c r i p t i o n " : "CODPARC" ,
11 " userType " : " I " ,
12 " order " : 1
13 },
14 {
15 " name " : "CODVEND" ,
16 " d e s c r i p t i o n " : "CODVEND" ,
17 " userType " : " I " ,
18 " order " : 2
19 },
20 {
21 " name " : "NOMEPARC" ,
22 " d e s c r i p t i o n " : "NOMEPARC" ,
23 " userType " : " S " ,
24 " order " : 3
25 },
26 {
27 " name " : "RAZAOSOCIAL" ,
28 " d e s c r i p t i o n " : "RAZAOSOCIAL" ,
29 " userType " : " S " ,
30 " order " : 4
31 },
32 {
33 " name " : "TIPPESSOA" ,
34 " d e s c r i p t i o n " : "TIPPESSOA" ,
35 " userType " : " S " ,
36 " order " : 5
37 },
38 {
39 " name " : "CODPARCMATRIZ" ,
40 " d e s c r i p t i o n " : "CODPARCMATRIZ" ,
41 " userType " : " I " ,
42 " order " : 6
43 },
44 {
45 " name " : "CODEND" ,
46 " d e s c r i p t i o n " : "CODEND" ,
47 " userType " : " I " ,
48 " order " : 7
49 },
50 {
51 " name " : "NUMEND" ,
52 " d e s c r i p t i o n " : "NUMEND" ,
53 " userType " : " S " ,
54 " order " : 8
55 },
56 {
57 " name " : "COMPLEMENTO" ,
58 " d e s c r i p t i o n " : "COMPLEMENTO" ,
59 " userType " : " S " ,
60 " order " : 9
61 },
62 {
63 " name " : "CODBAI" ,
64 " d e s c r i p t i o n " : "CODBAI" ,
65 " userType " : " I " ,
66 " o r d e r " : 10
67 },
68 {
69 " name " : "CODCID" ,
70 " d e s c r i p t i o n " : "CODCID" ,
71 " userType " : " I " ,
72 " o r d e r " : 11
73 },
74 {
75 " name " : "CODREG" ,
76 " d e s c r i p t i o n " : "CODREG" ,
77 " userType " : " I " ,
78 " o r d e r " : 12
79 },
80 {
81 " name " : "CEP" ,
82 " d e s c r i p t i o n " : "CEP" ,
83 " userType " : " S " ,
84 " o r d e r " : 13
85 },
86 {
87 " name " : "CAIXAPOSTAL" ,
88 " d e s c r i p t i o n " : "CAIXAPOSTAL" ,
89 " userType " : " S " ,
90 " o r d e r " : 14
91 },
92 {
93 " name " : "TELEFONE" ,
94 " d e s c r i p t i o n " : "TELEFONE" ,
95 " userType " : " S " ,
96 " o r d e r " : 15
97 },
98 {
99 " name " : "RAMAL" ,
100 " d e s c r i p t i o n " : "RAMAL" ,
101 " userType " : " I " ,
102 " o r d e r " : 16
103 },
104 {
105 " name " : "FAX" ,
106 " d e s c r i p t i o n " : "FAX" ,
107 " userType " : " S " ,
108 " o r d e r " : 17
109 },
110 {
111 " name " : "EMAIL" ,
112 " d e s c r i p t i o n " : "EMAIL" ,
113 " userType " : " S " ,
114 " o r d e r " : 18
115 }
116 ],
117 " rows " : [
118 [
119 9,
120 2,
121 "JOANA FON" ,
122 "JOANA FON" ,
123 "J" ,
124 9,
125 70 ,
126 " 123 " ,
127 null ,
128 80 ,
129 147 ,
130 10100 ,
131 " 15076620 " ,
132 null ,
133 " 034 32390700 " ,
134 null ,
135 null ,
136 null
137 ]
138 ],
139 " burstLimit " : false ,
140 " timeQuery " : " 4ms " ,
141 " t i m e R e s u l t S e t " : " 1ms "
142 }
143 }

# Informações úteis

• Nos serviços de busca temos que a busca é feita dando como base a instancia.
A mesma é inidicada na estrutura do <entity> quando o serviço é o crud.find.
Nos serviços LoadRecords a entidade é indicad na tag <dataSet> propriedade
rootEntity ou no caso do json no campo entityName.
5 Busca Estoque de Produtos

Para obtermos informações sobre estoque de um produto devemos usar o


serviço ConsultaProdutosSP.getDetalhesEstoques do módulo mgecom.
É possível consultar estoque de um produto por vez. Os estoques retornados
neste serviço dependem da configuração realizada na tela ‘Consulta de Produtos’.
Sugere-se configurar a tela para o usuário utilizado na integração do sistema,
desta forma apenas os estoques utilizados no sistema externo serão retornados.

# Parâmetros de chamada

• <criterio>
Elemento XML que possui diversos atributos que devem ser utilizados para
refinar e configurar a consulta. Os atributos disponíveis estão documentados
no exemplo contido neste documento.

# Dados modificados Nenhuma informação é modificada por este serviço,


pois trata-se de um serviço exclusivo para consultas.

# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mgecom/service.sbr?
URL serviceName=ConsultaProdutosSP.getDetalhesEstoques
&mgeSession=[ID de autenticação]

Headers HTTP:

• Content-Type: text/xml;charset=ISO-8859-1

• Cookie: JSESSIONID=[ID adquirido no serviço de autenticação]


Estrutura básica da requisição:

Listing 5.1 – Test


1 < c r i t e r i o>
2 < f i l t r o P e r s o n a l i z a d o>
3 <e x p r e s s i o n></ e x p r e s s i o n>
4 </ f i l t r o P e r s o n a l i z a d o>
5 </ c r i t e r i o>

Estrutura básica do resultado:

Listing 5.2 – Test


1 <produto>
2 <volumes>
3 <volume />
4 </ volumes>
5 <e s t o q u e s>
6 <e s t o q u e />
7 </ e s t o q u e s>
8 </ produto>

# Exemplo de uso

Corpo da requisição:

Listing 5.3 – Test


1 < !−− o e l e m e n t o ’ c r i t e r i o ’ p o s s u i a l g u n s a t r i b u t o s que c o n f i g u r a m
a c o n s u l t a , e e s t ã o d e t a l h a d o s em uma t a b e l a mais a b a i x o . −−>
2 < c r i t e r i o RESOURCEID=" br . com . sankhya . com . c o n s . c o n s u l t a P r o d u t o s "
CODPROD=" 108 " MANDARVOLUMES=" t r u e ">
3 < !−−
4 F i l t r o que s e r á a p l i c a d o a t a b e l a de e s t o q u e (TGFEST) .
5 −−>
6 < f i l t r o P e r s o n a l i z a d o>
7 < !−−
8 O e l e m e n t o ’ e x p r e s s i o n ’ é um t r e c h o SQL . O a l i a s ’ t h i s ’
f a z r e f e r e n c i a à t a b e l a TGFEST.
9 Neste exemplo , apenas o e s t o q u e da empresa 1 s e r á
retornado .
10 −−>
11 <e x p r e s s i o n>( t h i s .CODEMP = 1 )</ e x p r e s s i o n>
12 </ f i l t r o P e r s o n a l i z a d o>
13 </ c r i t e r i o>

Atributos do elemento ‘criterio’:

Nome Tipo Descrição


CODPROD Inteiro Cód.Produto para obter o estoque
RESOURCEID String Identificador para configuração. Deve sempreser
informado o valor presente neste exemplo
MANDARVOLUMES Boolean Flag (true|false) que determina se o serviçodeve re-
tornar, adicionalmente, informaçõessobre unidades
de venda do produto
CODVOL String Unidade de venda em que o estoque deve ser re-
tornado.Se for uma unidade alternativa então as
quantidades retornadas estarão calculadas nesta
medida. Quando não informada o estoque é retor-
nado em unidade padrão.

Retorno bem sucedido:

Listing 5.4 – Test


1 <? xml v e r s i o n=" 1 . 0 " e n c o d i n g=" ISO−8859−1 " ?>
2 <s e r v i c e R e s p o n s e serviceName=" ConsultaProdutosSP .
g e t D e t a l h e s E s t o q u e s " s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e "
t r a n s a c t i o n I d=" df7c13ba −08 f8 −4b2a −88b1−40bc7814bc76 ">
3 <responseBody>
4 <produto>
5 < !−−
6 O s e r v i c o f o i c o n f i g u r a d o para r e t o r n a r i n f o r m a c o e s de
undades de venda
7 −−>
8 <volumes>
9 <volume>
10 <PADRAO>t r u e</PADRAO>
11 <CODVOL>UN</CODVOL>
12 <DESCRVOL>∗ Unidade</DESCRVOL>
13 <TOOLTIP>Volume padrao</TOOLTIP>
14 </ volume>
15 </ volumes>
16 < !−−
17 O elemento ’ estoques ’ p os s u i a t r i b u t o s t o t a l i z a d o r e s
dos e s t o q u e r e t o r n a d o s ( n e s t e caso , apenas 1 ) .
18 QTDTOTALEST = t o t a l b r u t o do e s t o q u e
19 QTDTOTALRES = t o t a l r e s e r v a d o
20 QTDTOTALREC = t o t a l em r e c e b i m e n t o p e l o WMS
21 QTDTOTALWMSBLOQUEADO = t o t a l bloqueado no WMS
22 QTDTOTALESTMENOSRES = t o t a l d i s p o n i v e l do e s t o q u e
23 −−>
24 <e s t o q u e s QTDTOTALEST=" 10 " QTDTOTALRES=" 0 " QTDTOTALREC=" 0
" QTDTOTALESTMENOSRES=" 10 " QTDTOTALWMSBLOQUEADO=" 0 ">
25 < !−−
26 Os e l e m e n t o s ’ e s t o q u e ’ detalham o e s t o q u e ,
c o n s i d e r a n d o empresa , l o c a l , c o n t r o l e , e t c .
27 −−>
28 <e s t o q u e>
29 <TIPO>P r o p r i o</TIPO>
30 <PODER>P r o p r i o</PODER>
31 <CODBARRA/>
32 <STATUSLOTE>N</STATUSLOTE>
33 <CODEMP>1</CODEMP>
34 <NOMEFANTASIA>WCS PRESTACAO DE SERVICOS</
NOMEFANTASIA>
35 <CODLOCAL>0</CODLOCAL>
36 <DESCRLOCAL>&l t ;SEM LOCAL&g t ;</DESCRLOCAL>
37 <CONTROLE> </CONTROLE>
38 <ESTOQUE>10</ESTOQUE>
39 <RESERVADO>0</RESERVADO>
40 <WMSBLOQUEADO>0</WMSBLOQUEADO>
41 <ESTDOCAWMS>0</ESTDOCAWMS>
42 <DISPONIVEL>10</DISPONIVEL>
43 </ e s t o q u e>
44 </ e s t o q u e s>
45 </ produto>
46 </ responseBody>
47 </ s e r v i c e R e s p o n s e>
6 Busca Preços de Produtos

Para obtermos informações sobre preços do produto devemos utilizar o


serviço ConsultaProdutosSP.getDetalhesPrecos do módulo mgecom.

É possível consultar preços de um produto por vez. Os preços retornados


neste serviço dependem da configuração realizada na tela ‘Consulta de Produtos’,
ou seja, se nesta tela tivermos configurados 5 tipos de preços diferentes, então
teremos 5 preços diferentes sendo retornados pelo serviço. Sugere-se configurar a
tela para o usuário utilizado na integração do sistema, desta forma apenas os preços
utilizados no sistema externo serão retornados.

# Parâmetros de chamada

• <criterio>
Elemento XML que possui diversos atributos que devem ser utilizados para
refinar e configurar a consulta. Os atributos disponíveis estão documentados
no exemplo contido neste documento.

# Dados modificados

Nenhuma informação é modificada por este serviço, pois trata-se de um


serviço exclusivo para consultas.

# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mgecom/service.sbr?serviceName=
URL
ConsultaProdutosSP.getDetalhesPrecos&mgeSession=[ID de autenticação
Headers HTTP:

• Content-Type: text/xml;charset=ISO-8859-1

• Cookie: JSESSIONID=[ID adquirido no serviço de autenticação]

Corpo da requisição:

Listing 6.1 – Test


1 < c r i t e r i o CODPROD= ’ 9999 ’ RESOURCEID= ’ br . com . sankhya . com . c o n s .
c o n s u l t a P r o d u t o s ’ CODPARC= ’ 9999 ’ CODLOCAL= ’ 9999 ’ CODEMP= ’ 999 ’
CODVOL= ’XX ’ CONTROLE= ’XXXXX’ MANDARVOLUMES= ’ S |N ’ />
Descrição dos atributos:

Nome Tipo Descrição


CODPROD Inteiro Cód. Produto a ser consultado
RESOURCEID String Identificador para configurações. Informar sempre
o valor fixo do exemplo.
CODPARC Inteiro Cód. Parceiro para obter preço. Só deve ser usado
caso a empresa use tabelas de preço por cliente ou
caso use promoção específica por parceiro.
CODLOCAL Inteiro Cód.Local estoque. Só deve ser usado caso a em-
presa use preço por local ou use promoção específica
por local
CODEMP Inteiro Cód. Empresa. Só deve ser usado caso se utilize
preço por empresa ou use promoção específica por
empresa.
CODVOL String Unidade de venda. Caso seja informada o sistema
busca o preço por esta unidade, caso haja. Caso
contrário o preço será pela unidade padrão
CONTROLE String Controle especial de estoque. Só deve ser informado
caso o produto possua controle específico e o preço
seja diferente por controle.
MANDARVOLUMES Boolean Flag (true|false).Quando ligada o sistema retorna,
junto com o preço, as informações sobre as unidades
de venda do produto consultado.

Estrutura básica do retorno:

Listing 6.2 – Test


1 <produto>
2 <p r e c o s>
3 <p r e c o />
4 </ p r e c o s>
5 <volumes>
6 <volume />
7 </ volumes>
8 </ produto>
# Exemplo de uso

Corpo da requisição:

Listing 6.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" ConsultaProdutosSP . g e t D e t a l h e s P r e c o s "
>
2 <requestBody>
3 < c r i t e r i o CODPROD= ’ 13 ’ RESOURCEID= ’ br . com . sankhya . com . c o n s .
c o n s u l t a P r o d u t o s ’ />
4 </ requestBody>
5 </ s e r v i c e R e q u e s t>

Resultado bem sucedido:

Listing 6.4 – Test


1 <? xml v e r s i o n=" 1 . 0 " e n c o d i n g="UTF−8" ?>
2 <s e r v i c e R e s p o n s e serviceName=" ConsultaProdutosSP . g e t D e t a l h e s P r e c o s
" s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 5 f38bba9−
bde6 −4575−ab49−d 5 4 c 8 4 0 5 7 4 6 f ">
3 <responseBody>
4 <produto>
5 <p r e c o s>
6 <p r e c o>
7 < !−− d e s c r i c a o da t a b e l a na c o n f i g u r a c a o da t e l a
C o n s u l t a de Produtos −−>
8 <DESCRICAO>Preco e s p e c i a l</DESCRICAO>
9 < !−− Nro . u n i c o da promocao (TGFDES) , c a s o tenha −−>
10 <NUNICOPROM>0</NUNICOPROM>
11 < !−− nro . u n i c o i n t e r n o da t a b e l a de p r e c o s (TGFTAB)
−−>
12 <NUTAB>201</NUTAB>
13 < !−− c o d i g o da t a b e l a . Neste exemplo t a b e l a z e r o −−
>
14 <CODTAB>0</CODTAB>
15 <NOMETAB>&l t ;TABELA PADRAO&g t ;</NOMETAB>
16 < !−− v a l o r u n i t a r i o de venda −−>
17 <VALOR>1 2 . 0 0 0</VALOR>
18 < !−− v a l o r promocional , c a s o tenha −−>
19 <PROMOCAO>0 . 0 0</PROMOCAO>
20 </ p r e c o>
21 <p r e c o>
22 <DESCRICAO>Preco 10%</DESCRICAO>
23 <NUNICOPROM>0</NUNICOPROM>
24 <NUTAB>201</NUTAB>
25 <CODTAB>0</CODTAB>
26 <NOMETAB>&l t ;TABELA PADRAO&g t ;</NOMETAB>
27 <VALOR>1 6 . 5 0 0</VALOR>
28 <PROMOCAO>0 . 0 0</PROMOCAO>
29 </ p r e c o>
30 <p r e c o>
31 <DESCRICAO>Preco</DESCRICAO>
32 <NUNICOPROM>0</NUNICOPROM>
33 <NUTAB>201</NUTAB>
34 <CODTAB>0</CODTAB>
35 <NOMETAB>&l t ;TABELA PADRAO&g t ;</NOMETAB>
36 <VALOR>1 5 . 0 0 0</VALOR>
37 <PROMOCAO>0 . 0 0</PROMOCAO>
38 </ p r e c o>
39 </ p r e c o s>
40 </ produto>
41 </ responseBody>
42 </ s e r v i c e R e s p o n s e>
7 Busca Utilizando Views do BD

É possível obter dados utilizando consultas diretas em Views de banco de


dados através do serviço CRUDServiceProvider.loadView do módulo mge.

A view a ser utilizada não precisa estar cadastrada como uma entidade de
dados no dicionário de dados do sistema, ou seja, pode ser qualquer view presente
no banco de dados.

A exemplo de todos os serviços da plataforma, esse serviço deve ser chamado


depois de realizar a autenticação, usando o serviço de autenticação, documentado
em outro arquivo.

# Parâmetros de chamada

• <query>
Elemento XML com campos solicitados, filtro, etc. Cada subelemento está
detalhado no exemplo abaixo.

# Dados modificados

Nenhuma informação é modificada por este serviço, pois trata-se de um


serviço exclusivo para consultas.
# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mge/service.sbr?serviceName=
URL
CRUDServiceProvider.loadView

Headers HTTP:

• Content-Type: text/xml;charset=ISO-8859-1

• Cookie: JSESSIONID=[ID adquirido no serviço de autenticação]

Estrutura básica da requisição:

Listing 7.1 – Test


1 <query>
2 < f i e l d s>
3 < f i e l d />
4 </ f i e l d s>
5 <where />
6 </ query>

Estrutura básica da resposta:

Listing 7.2 – Test


1 <r e c o r d s>
2 <r e c o r d>
3 <NOMECAMPO>v a l o r Campo</NOMECAMPO>
4 <OUTROCAMPO>123456</OUTROCAMPO>
5 </ r e c o r d>
6 </ r e c o r d s>

Exemplo de corpo da requisição (para testar, recomenda-se remover os


comentários):
Listing 7.3 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . loadView ">
2 <requestBody>
3 < !−− O a t r i b u t o viewName deve s e r p r e e n c h i d o com o nome da
VIEW da mesma forma que e s t á d e f i n i d a no banco de dados ,
sem p r e f i x o s ou nome de schema .
4 O a t r i b u t o orderBy é o p c i o n a l e s e r á a d i c i o n a d o na c o n s u l t a
para o r d e n a r o s dados . O t e x t o p r e s e n t e n e s t e a t r i b u t o
s e r á p a s s a d o d i r e t a m e n t e ( sem m o d i f i c a ç õ e s ) para a
consulta .
5 O e l e m e n t o f i e l d s é o p c i o n a l , e quando não informado o
s i s t e m a v a i t r a z e r t o d o s o s campos da view . O e l e m e n t o
f i e l d s u p o r t a t a n t o o nome do campo na view quanto uma
e x p r e s s ã o SQL q u a l q u e r que r e s o l v a em um v a l o r v á l i d o de
coluna
6 O e l e m e n t o where pode s e r p r e e n c h i d o com o t r e c h o de f i l t r o
da query . O conteúdo do e l e m e n t o s e r á c o l o c a d o
d i r e t a m e n t e ( sem m o d i f i c a ç õ e s ) na c o n s u l t a r e a l i z a d a ao
banco de dados .
7 Não há s u p o r t e a p a r â m e t r o s de f i l t r o , p o r t a n t o o s v a l o r e s
do f i l t r o devem s e r i n s e r i d o s d i r e t a m e n t e no t e x t o , tendo
a t e n ç ã o e s p e c i a l ao formato de p a r â m e t r o s do t i p o data ,
p o i s no SQL S e r v e r e s s e formato v a r i a de v e r s ã o para
v e r s ã o ou mesmo conforme c o n f i g u r a ç ã o do ’ l o c a l e ’ do
banco de dados . O a l i a s , c a s o n e c e s s á r i o , deve s e r o
mesmo nome da view . −−>
8 <query viewName="VGFFIN" orderBy="CODEMP,DTNEG">
9 < f i e l d s>
10 < f i e l d>CODPARC</ f i e l d>
11 < f i e l d>CODEMP</ f i e l d>
12 < f i e l d>DTNEG</ f i e l d>
13 < !−− exemplo de campo com e x p r e s s ã o SQL −−>
14 < f i e l d>(VLRDESDOB + VLRJURO) AS VLRLIQUIDO</ f i e l d>
15 </ f i e l d s>
16 <where>VGFFIN .DHBAIXA IS NULL
17 AND VGFFIN .RECDESP = 1
18 AND EXISTS (
19 SELECT 1 FROM TGFFIN FIN
20 WHERE
21 FIN . NUFIN = VGFFIN . NUFIN
22 )
23 </ where>
24 </ query>
25 </ requestBody>
26 </ s e r v i c e R e q u e s t>

Resposta bem sucedida:

Listing 7.4 – Test


1 <s e r v i c e R e s p o n s e serviceName=" CRUDServiceProvider . loadView " s t a t u s
=" 1 " p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 47770 a03−6f69 −4a43
−8879−14351 e8478ad ">
2 <responseBody>
3 <r e c o r d s>
4 <r e c o r d>
5 <CODPARC>123456</CODPARC>
6 <CODEMP>1</CODEMP>
7 <DTNEG>25/06/2015 15 : 3 3 : 2 1</DTNEG>
8 <VLRLIQUIDO>4 5 6 . 2 5</VLRLIQUIDO>
9 </ r e c o r d>
10 <r e c o r d>
11 <CODPARC>778954</CODPARC>
12 <CODEMP>1</CODEMP>
13 <DTNEG>25/06/2015 00 : 0 0 : 0 0</DTNEG>
14 <VLRLIQUIDO>1 2 3 4 5 6 . 7 8</VLRLIQUIDO>
15 </ r e c o r d>
16 </ r e c o r d s>
17 </ responseBody>
18 </ s e r v i c e R e s p o n s e>

Formato dos dados na resposta:

• Campos do tipo texto sempre serão envolvidos por um CDATA[

• O separador de decimais será sempre o ponto (‘.’)


• Campos data terão formato ‘dd/MM/yyyy HH:mm:ss’. Para campos somente
data, as posições relacionadas a horas, minutos e segundos serão substituídos
por 00:00:00
8 Produtos

Todos os métodos implementados para o gerenciamento de produtos (criação,


alteração, exclusão e consulta) podem ser feitos utilizando a classe SWServiceInvoker
que foi apresentada na seção 18.

8.1 Exemplos de Consultas


A seguir serão exibidos os principais métodos do tipo consulta, esses métodos
exibem informações que estão diretamente ligadas aos produtos.
Observação: Algumas informações como: url de chamada e padrão do
envelope XML são apresentados na seção 1.

8.1.1 Consultar todos os produto


Esta consulta traz todos os produtos cadastrados.
Nome do Serviço: “ConsultaProdutosSP.consultaProdutos”
Módulo: “mgecom”

Listing 8.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" ConsultaProdutosSP . c o n s u l t a P r o d u t o s ">
2 <requestBody>
3 < f i l t r o s>
4 < c r i t e r i o r e s o u r c e I D=" br . com . sankhya . com . c o n s .
c o n s u l t a P r o d u t o s "></ c r i t e r i o>
5 </ f i l t r o s>
6 </ requestBody>
7 </ s e r v i c e R e q u e s t>

O XML a seguir representa o padrão de retorno para um consulta de


produtos. Qualquer consulta de produtos realizadas, utilizando ou não algum tipo
de filtro retornará um XML similar a esse.
Listing 8.2 – Test
1 <s e r v i c e R e s p o n s e serviceName=" ConsultaProdutosSP . c o n s u l t a P r o d u t o s "
s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" 85658 e3e−
a871 −49 f f −ae36 −3385 b123a066 " e r r o r C o d e="−1" e r r o r L e v e l="−1">
2 <responseBody>
3 <p r o d u t o s>
4 <produto>
5 <CODPROD>0000</CODPROD>
6 <DESCRPROD>Descrição do Produto</DESCRPROD>
7 <CODVOL>KG</CODVOL>
8 <DECQTD>0</DECQTD>
9 <DECVLR>2</DECVLR>
10 <TIPLANCNOTA>A</TIPLANCNOTA>
11 <Cadastro_CODPROD>0000</Cadastro_CODPROD>
12 <Cadastro_DESCRPROD>D e s c r i c a o do Produto</
Cadastro_DESCRPROD>
13 <Preco_1>1 0 0 . 0 0</ Preco_1>
14 <Estoque_1></ Estoque_1>
15 </ produto>
16 <maxregconsprod>0</ maxregconsprod>
17 </ p r o d u t o s>
18 </ responseBody>
19 </ s e r v i c e R e s p o n s e>

A descrição dos principais campos retornados no XML é apresentada a


seguir:

• <CODPROD>: Código do Produto;

• <DESCRPROD>: Descrição do Produto;

• <CODVOL>: Unidade Padrão;

• <DECQTD>: Decimais Para Quantidade;

• <DECVLR>: Decimais Para Valor;

• <TIPLANCNOTA>:Digitação na Nota ;

• <Preço_1>: Preço do Produto;


• <Estoque_1>: Estoque do Produto.

8.1.2 Informações Adicionais (Unidade de Medida e Estoque)


As consultas de produtos trazem informações adicionais sobre unidade de
medida e estoque, isso para complementar as informações dos produtos. O XML
da consulta é apresentado a seguir, sendo sua requisição realizada para todos os
tipos de consultas de produto que forem feitas.
Nome do Serviço: “ConsultaProdutosSP.consultaProdutos.
”Módulo: “mgecom.”

Listing 8.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" ConsultaProdutosSP .
g e t D e t a l h e s E s t o q u e s ">
2 <requestBody>
3 < c r i t e r i o RESOURCEID=" br . com . sankhya . com . c o n s .
c o n s u l t a P r o d u t o s " CODPROD=" 1 " MANDARVOLUMES=" t r u e " TEMWMS
=" t r u e " />
4 <c l i e n t E v e n t L i s t />
5 </ requestBody>
6 </ s e r v i c e R e q u e s t>

O retorno para a requisição anterior será similar ao exibido a seguir.

Listing 8.4 – Test


1 <s e r v i c e R e s p o n s e serviceName=" ConsultaProdutosSP .
g e t D e t a l h e s E s t o q u e s " s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e "
t r a n s a c t i o n I d=" ceac0a4b −8356−4ba4 −809d−d 6 a 7 2 1 7 3 0 7 f e " e r r o r C o d e=
"−1" e r r o r L e v e l="−1">
2 <responseBody>
3 <produto>
4 <volumes>
5 <volume>
6 <PADRAO>t r u e</PADRAO>
7 <CODVOL>UN</CODVOL>
8 <DESCRVOL>∗ Unidade</DESCRVOL>
9 <TOOLTIP>Volume padrão</TOOLTIP>
10 </ volume>
11 <volume>
12 <CODVOL>CX</CODVOL>
13 <DESCRVOL>Caixa</DESCRVOL>
14 <TOOLTIP>Volume a l t e r n a t i v o</TOOLTIP>
15 </ volume>
16 </ volumes>
17 <e s t o q u e s MOSTESTEMP=" t r u e " MOSTESTPARC=" f a l s e "
CONSGRUSOMA=" f a l s e " MOSTLOCAL=" t r u e " MOSTCONTROLE="
f a l s e " USADECCADPROD=" f a l s e " LEVARQTDCARRINHO=" f a l s e "
QTDTOTALEST=" 177 " QTDTOTALRES=" 50 " QTDTOTALREC=" 0 "
QTDTOTALESTMENOSRES=" 127 " QTDTOTALWMSBLOQUEADO=" 0 ">
18 <e s t o q u e>
19 <TIPO>T e r c e i r o s</TIPO>
20 <PODER>P r o p r i o</PODER>
21 <CODBARRA></CODBARRA>
22 <STATUSLOTE>N</STATUSLOTE>
23 <QTDDIASVENC>0</QTDDIASVENC>
24 <CODEMP>1</CODEMP>
25 <NOMEFANTASIA>ULTRA RAPIDA</NOMEFANTASIA>
26 <CODLOCAL>201</CODLOCAL>
27 <DESCRLOCAL>RUA A</DESCRLOCAL>
28 <ESTOQUE>16</ESTOQUE>
29 <RESERVADO>0</RESERVADO>
30 <WMSBLOQUEADO>0</WMSBLOQUEADO>
31 <DISPONIVEL>16</DISPONIVEL>
32 <WMSESTDISPONIVEL>0</WMSESTDISPONIVEL>
33 </ e s t o q u e>
34 <e s t o q u e>
35 <TIPO>P r o p r i o</TIPO>
36 <PODER>P r o p r i o</PODER>
37 <CODBARRA></CODBARRA>
38 <STATUSLOTE>N</STATUSLOTE>
39 <QTDDIASVENC>0</QTDDIASVENC>
40 <CODEMP>1</CODEMP>
41 <NOMEFANTASIA>ULTRA RAPIDA</NOMEFANTASIA>
42 <CODLOCAL>100</CODLOCAL>
43 <DESCRLOCAL>SHOWROOM</DESCRLOCAL>
44 <ESTOQUE>161</ESTOQUE>
45 <RESERVADO>50</RESERVADO>
46 <WMSBLOQUEADO>0</WMSBLOQUEADO>
47 <DISPONIVEL>111</DISPONIVEL>
48 <WMSESTDISPONIVEL>0</WMSESTDISPONIVEL>
49 </ e s t o q u e>
50 </ e s t o q u e s>
51 </ produto>
52 </ responseBody>
53 </ s e r v i c e R e s p o n s e>

A descrição dos principais campos retornos no XML é apresenta a seguir:

• volume: Informações sobre as unidades de medidas do produto;

– PADRAO: Quando a unidade de medida é a padrão adotada esse


campo vem como TRUE. Os produtos podem possuir unidades padrões
e alternativas, um exemplo: Comprar caixas de um determinado produto
e vender a unidade;
– CODVOL: Código para o tipo de unidade de medida;
– DESCRVOL: Descrição da unidade de medida;
– TOOLTIP: Define se é o volume padrão ou alternativo adotado pela
empresa para um determinado produto;

• estoques: Estas informações são referentes a filtros aplicados sobre o estoque,


determina quais informações detalhadas do estoque de um determinado
produto serão exibidas. Também apresenta informações gerais sobre estoque
de determinado produto;

– MOSTESTEMP: Determina se as informações de estoque serão exibi-


das separadas por empresa. Ex: Matriz e Filial;
– MOSTESTPARC: Determina se as informações de estoque serão
exibidas separadas por parceiro.;
– CONSGRUSOMA: Apresenta a soma dos estoques por empresa;
– MOSTLOCAL: Exibe o local onde o produto se encontra. Ex: Corredor
B;
– MOSTCONTROLE: Exibe o estoque de determinado produto por
controle. Ex: Detergente, pode ser apresentada a quantidade por fra-
grância;
– USADECCADPROD: Usar casas decimais do cadastro de produto;
– LEVARQTDCARRINHO: Apresenta um carrinho de compras para
selecionar os produtos deixando no carrinho para uma operação futura.;
– QTDTOTALEST: Quantidade total de um determinado em estoque;
– QTDTOTALRES: Quantidade de um determinado produto que foi
reservada;
– QTDTOTALESTMENOSRES: Quantidade total de um determi-
nado excluindo os reservados;
– QTDTOTALWMSBLOQUEADO:Quantidade total de um produto
bloqueado no WMS;
– estoque: ;
∗ TIPO: Determina se o local de armazenagem é próprio ou de
terceiros;
∗ PODER: Se os produtos em estoque são de propriedade da empresa
ou de um terceiro;
∗ CODBARRA: Código de barras do produto;
∗ STATUSLOTE: Status do lote do produto;
∗ QTDDIASVENC: Quantidade de dias após o vencimento de um
determinado produto;
∗ CODEMP: Empresa a qual determinado produto pertence;
∗ NOMEFANTASIA: No fantasia da empresa;
∗ CODLOCAL: Código local de armazenamento do produto;
∗ DESCRLOCAL: Descrição do local de armazenamento de um
produto;
∗ ESTOQUE: Quantidade em estoque do produto;
∗ RESERVADO: Quantidade reservada;
∗ WMSBLOQUEADO: Quantidade bloqueada em WMS;
∗ DISPONIVEL: Quantidade disponivel;
∗ WMSESTDISPONIVEL: Quantidade disponivel em WMS.

OBS: Algumas informações como por exemplo: MOSTESTEMP e MOS-


TLOCAL, são referentes à configuração de consulta do produto, podendo esses
campos variarem. Aparecendo ou não no retorno.

8.1.3 Busca de produtos por parâmetro


Esta consulta busca os produtos por meio de um valor de pesquisa, podendo
ser código, parte da descrição, característica, grupo, localização, etc. Deve ser
levado em consideração que o campo valor (‘<VALOR></VALOR>’) da pesquisa
varia de acordo com o critério de busca adotado pelo usuário.
Nome do Serviço: “ConsultaProdutosSP.consultaProdutos”
Módulo: “mgecom”

Listing 8.5 – Test


1 <s e r v i c e R e q u e s t serviceName=" ConsultaProdutosSP . c o n s u l t a P r o d u t o s ">
2 <requestBody>
3 < f i l t r o s>
4 < c r i t e r i o r e s o u r c e I D=" br . com . sankhya . com . c o n s .
c o n s u l t a P r o d u t o s ">
5 <VALOR>1</VALOR>
6 </ c r i t e r i o>
7 </ f i l t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>

8.1.4 Consultar descrição e código do grupo do produto


Nome do Serviço: “crud.find”
Módulo: “mge”
Obs: Se não usar um critério a busca irá trazer todos os produtos cadastra-
dos.

Listing 8.6 – Test


1 <e n t i t y name= ’ Produto ’ g e t P r e s e n t a t i o n s= ’ f a l s e ’>
2 < c r i t e r i o nome= ’CODPROD’ v a l o r= ’ 50325 ’ />
3 < f i e l d s>
4 < f i e l d name= ’DESCRPROD ’ />
5 < f i e l d name= ’CODGRUPOPROD’ />
6 </ f i e l d s>
7 </ e n t i t y>

8.1.5 Consultar informações do grupo de produtos


Nome do Serviço: “crud.find”
Módulo: “mge”

Obs: Se não usar um critério a busca irá trazer a descrição de todos os


grupos.

Listing 8.7 – Test


1 <e n t i t y name= ’ GrupoProduto ’ g e t P r e s e n t a t i o n s= ’ f a l s e ’>
2 < c r i t e r i o nome= ’CODGRUPOPROD’ v a l o r= ’ 5030 ’ />
3 < f i e l d s>
4 < f i e l d name= ’DESCRGRUPOPROD’ />
5 </ f i e l d s>
6 </ e n t i t y>

8.1.6 Buscar preço por Parceiro/Empresa


Tenha em mente que uma empresa pode possuir múltiplas tabelas de preço,
essas tabelas podem funcionam da seguinte forma: Uma empresa X situada em MG
aplica preços de vendas n% maior nas vendas para fora do estado, para controlar
essa variação de preços são criadas tabelas de preços, que definem diferentes preços
de vendas de acordo com a necessidade da empresa. Quando é realizada uma busca
por Parceiro/Empresa, a tabela de preços é consultada. A seguir será apresentado
o XML dessa consulta.
Nome do Serviço: “ConsultaProdutosSP.consultaProdutos”
Módulo: “mgecom”

Listing 8.8 – Test


1 <s e r v i c e R e q u e s t serviceName=" ConsultaProdutosSP .
c o n t e x t u a l i z a r T a b e l a P r e c o ">
2 <requestBody>
3 < c r i t e r i o tipTabPreco=" 9 " codParc=" 4 " codEmp=" 1 " />
4 <c l i e n t E v e n t L i s t />
5 </ requestBody>
6 </ s e r v i c e R e q u e s t>

A requisição que foi apresentada tem como retorno o seguinte XML:

Listing 8.9 – Test


1 <responseBody>
2 <tabContext>
3 <NUTAB>3</NUTAB>
4 <CODTAB>1</CODTAB>
5 <NOMETAB>PRECO MATRIZ − OUTRAS CIDADES</NOMETAB>
6 </ tabContext>
7 </ responseBody>

A resposta apresentada no XML visto anteriormente é usada como parâmetro


na consulta de produtos. O XML seguinte mostra como a requisição é montada.

Listing 8.10 – Test


1 <requestBody>
2 < f i l t r o s>
3 < c r i t e r i o r e s o u r c e I D=" br . com . sankhya . com . c o n s .
c o n s u l t a P r o d u t o s " PERCDESC=" 0 ">
4 <VALOR />
5 <CODESTCLASSIFI />
6 <NUTAB>3</NUTAB>
7 <CODEMP>1</CODEMP>
8 <CODPARC>4</CODPARC>
9 </ c r i t e r i o>
10 </ f i l t r o s>
11 <c l i e n t E v e n t L i s t />
12 </ requestBody>

O retorno para a requisição são todas as informações referentes aos produtos.


O XML de retorno será semelhante ao visto na seção 8.1.1, exibindo informações re-
ferentes a todos os produtos cadastrados. Essa resposta pode variar se houver algum
filtro aplicado sobre os produtos, então serão todos os produtos que satisfizerem o
filtro já aplicado mais o filtro Parceiro/Empresa.

8.1.7 Outras Consultas


Existem outras informações relativas ao produto que também podem ser
consultadas. Para essas informações foram criadas requisições a parte que são
chamadas de acordo com as solicitações do usuário. As informações de Request e
Response dessas consultas serão apresentadas a seguir.

8.1.7.1 Cotações

.
A chamada a seguir exibe informações de cotação dos produtos. Para a requisição
de serviço é necessário passar o código de um produto como parâmetro.
Nome do Serviço: “
ConsultaProdutosSP.getCotacoesProduto”
Módulo: “mgecom”

Listing 8.11 – Test


1 <s e r v i c e R e q u e s t serviceName=" ConsultaProdutosSP . g e t C o t a c o e s P r o d u t o
">
2 <requestBody>
3 < c r i t e r i o CODPROD=" 0 " />
4 <c l i e n t E v e n t L i s t />
5 </ requestBody>
6 </ s e r v i c e R e q u e s t>
Um exemplo de XML de resposta para a cotação é exibido a seguir:

Listing 8.12 – Test


1 <responseBody>
2 <c o t a c o e s>
3 <c o t a c a o>
4 <NUMCOTACAO>1</NUMCOTACAO>
5 <DHINIC>17/07/2017 18 : 2 2</DHINIC>
6 <DHFINAL>17/07/2017 00 : 0 0</DHFINAL>
7 <REQUISITANTE>SUP</REQUISITANTE>
8 <RESPONSAVEL>SOUZA</RESPONSAVEL>
9 <CODEMP>1</CODEMP>
10 <NOMEFANTASIA>ULTRA RAPIDA</NOMEFANTASIA>
11 <CODNAT>2010000</CODNAT>
12 <DESCRNAT>Produtos para venda</DESCRNAT>
13 <DESCRCENCUS>COMPRAS</DESCRCENCUS>
14 <CODCENCUS>201</CODCENCUS>
15 <CODPROJ>0</CODPROJ>
16 <ABREVIATURA>&l t ; PI&g t ;</ABREVIATURA>
17 <CODLOCAL>100</CODLOCAL>
18 <DESCRLOCAL>SHOWROOM</DESCRLOCAL>
19 <CONTROLE></CONTROLE>
20 <QTDCOTADA>10</QTDCOTADA>
21 <CODVOL>CX</CODVOL>
22 <SITUACAO>A</SITUACAO>
23 </ c o t a c a o>
24 </ c o t a c o e s>
25 </ responseBody>

8.2 Download de Imagem de Produto


Obs: Diferentemente dos exemplos anteriores, a requisição da imagem do
produto não deve ser feita através da classe SWServiceInvoker.

[URL_CONEXAO_PROD] /[mge] /Produto@IMAGEM@CODPROD=[codprod].dbimage


9 Inclusão e Alteração de Parceiros e Ou-
tros Cadastros

Para incluirmos novos parceiros devemos fazer uso do serviço CRUDSer-


viceProvider.saveRecord do módulo mge.

A exemplo do serviço de busca, esse serviço também é de propósito geral,


ou seja, ele pode ser usado para incluir (ou mesmo alterar) dados em qualquer
tabela do sistema, bastando para isso modificar os parâmetros de chamada.

No caso da tabela de parceiros, a chave primária da tabela (coluna COD-


PARC) é gerada automaticamente na inclusão, fazendo parte da resposta do serviço,
junto com todas as outras colunas. Isso significa que a coluna CODPARC não deve
fazer parte do XML de parâmetros.

Esse exemplo demonstra a inclusão de um registro (INSERT), mas o mesmo


serviço com a mesma estrutura pode ser usado para realizar modificações em
registros existentes (UPDATE), bastando para isso enviar um elemento a mais
(conforme comentários) no XML.

# Parâmetros de chamada

• <dataSet>
Elemento XML com campos solicitados, filtro, etc. Cada subelemento está
detalhado no exemplo abaixo.

# Dados modificados

Quando bem sucedida, a chamada deste serviço inclui um novo registro na


tabela de parceiros.
# Transação

Esse serviço é transacional, portanto se alguma falha ocorrer (status = 0,


por exemplo) nenhuma informação será incluída ou modificada.

# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mge/service.sbr?serviceName=
URL
CRUDServiceProvider.saveRecord

Headers HTTP:

• Content-Type: text/xml;charset=ISO-8859-1

• Cookie: JSESSIONID=[ID adquirido no serviço de autenticação]

Estrutura básica da requisição:

Listing 9.1 – Test


1 <d a t a S e t>
2 <e n t i t y>
3 < f i e l d s e t />
4 < f i e l d />
5 </ e n t i t y>
6 <dataRow>
7 < l o c a l F i e l d s>
8 < !−− campos com o s dados a serem s a l v o s −−>
9 </ l o c a l F i e l d s>
10 < !−− O e l e m e n t o ’ key ’ s ó deve e s t a r p r e s e n t e c a s o s e j a uma
a t u a l i z a ç ã o de r e g i s t r o j á e x i s t e n t e . Quando a u s e n t e , o
s i s t e m a e n t e n d e s e r um INSERT −−>
11 <key>
12 < !−− campos da chave p r i m a r i a devem s e r c o l o c a d o s a q u i em
c a s o de UPDATE. Neste exemplo , o p a r c e i r o de c ó d i g o
9988 t e r i a o s dados a l t e r a d o s ( campos p r e s e n t e s em ’
l o c a l F i e l d s ’ ) −−>
13 <CODPARC>9988</CODPARC>
14 </ key>
15 </dataRow>
16 </ d a t a S e t>

Estrutura básica da resposta:

Listing 9.2 – Test


1 < e n t i t i e s t o t a l= ’ 1 ’>
2 <e n t i t y>
3 < !−− campos r e t o r n a d o s , i n c l u s i v e CODPARC g e r a d o −−>
4 </ e n t i t y>
5 </ e n t i t i e s>

Exemplo de corpo da requisição (para testar, recomenda-se remover os


comentários):

Listing 9.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" P a r c e i r o " i n c l u d e P r e s e n t a t i o n F i e l d s=" S "
d a t a s e t i d=" 1444487520009_1">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 < !−−
8 Deve haver apenas um e l e m e n t o ’ dataRow ’ por chamada , o
que l i m i t a
9 o s e r v i ç o a i n c l u i r um p a r c e i r o por vez −−>
10 <dataRow>
11 < l o c a l F i e l d s>
12 < !−−
13 Note que o s campos do t i p o c a r a c t e r e com l a r g u r a
acima de 1 devem
14 s e r e n v o l v i d o s para um e l e m e n t o CDATA
15 −−>
16 <NOMEPARC>< ! [CDATA[ CLIENTE TESTE3 ] ]></NOMEPARC>
17 < !−−
18 Lembre−s e que a r e g i ã o p r e c i s a s e r a n a l í t i c a
19 −−>
20 <CODREG>10100</CODREG>
21 <TIPPESSOA>F</TIPPESSOA>
22 <CLASSIFICMS>C</CLASSIFICMS>
23 <CODCID>10</CODCID>
24 < !−− I n f o r m a ç ã o s o b r e CPF e CNPJ f i c a m no mesmo
campo , e s e r á v a l i d a d o p e l o s i s t e m a c o n s i d e r a n d o
o campo TIPPESSOA (F=F i s i c a , J=J u r i d i c a ) −−>
25 <CGC_CPF>11111111111</CGC_CPF>
26 </ l o c a l F i e l d s>
27 </dataRow>
28 </ d a t a S e t>
29 </ requestBody>
30 </ s e r v i c e R e q u e s t>

Resposta bem sucedida:

Listing 9.4 – Test


1 <s e r v i c e R e s p o n s e serviceName=" CRUDServiceProvider . saveRecord "
s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" ce27a42e −f8d7
−40c2 −902d−d 6 c 7 8 f 2 7 f 3 4 8 ">
2 <responseBody>
3 < e n t i t i e s t o t a l=" 1 ">
4 <e n t i t y>
5 < !−− Campo de chave p r i m á r i a f o i g e r a d o p e l o s i s t e m a e
r e t o r n a d o j u n t o com a s o u t r a s c o l u n a s . −−>
6 <CODPARC>71</CODPARC>
7 <NOMEPARC>CLIENTE TESTE 3</NOMEPARC>
8 < !−− v a r i a s c o l u n a s o m i t i d a s a q u i −−>
9 </ e n t i t y>
10 </ e n t i t i e s>
11 </ responseBody>
12 </ s e r v i c e R e s p o n s e>
10 Exclusão de Registros

Para realizar exclusão de registros em qualquer entidade de dados do sis-


tema, devemos fazer uso do serviço CRUDServiceProvider.removeRecord do
módulo mge.

# Parâmetros de chamada

• <entity>
Elemento XML com o id (PK) das linhas que serão removidas. Cada subele-
mento está detalhado no exemplo abaixo.

# Dados modificados

Quando bem sucedida, a chamada deste serviço exclui um ou mais registros


da entidade de dados. Todas as validações sistêmicas e de banco de dados serão
executadas antes da exclusão.

# Transação

Esse serviço é transacional, portanto se alguma falha ocorrer (status = 0,


por exemplo) nenhuma informação será incluída ou modificada.

# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mge/service.sbr?serviceName=
URL
CRUDServiceProvider.removeRecord
Headers HTTP:

• Content-Type: text/xml;charset=ISO-8859-1

• Cookie: JSESSIONID=[ID adquirido no serviço de autenticação]

Estrutura básica da requisição:

Listing 10.1 – Test


1 <e n t i t y>
2 < !−− Cada e l e m e n t o ’ i d ’ r e p r e s e n t a uma l i n h a que s e r á e x c l u í d a .
As l i n h a s s ã o removidas na mesma ordem dos e l e m e n t o s ’ i d ’
−−>
3 <i d>
4 < !−− campos da PK devem s e r c o l o c a d o s a q u i −−>
5 </ i d>
6 </ e n t i t y>

# Exemplo de uso:

Corpo de requisição:

Listing 10.2 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . removeRecord ">
2 <requestBody>
3 <e n t i t y r o o t E n t i t y=" F i n a n c e i r o " d a t a s e t i d=" 1445003703566_1">
4 <i d>
5 <NUFIN>5601</NUFIN>
6 </ i d>
7 <i d>
8 <NUFIN>774501</NUFIN>
9 </ i d>
10 </ e n t i t y>
11 </ requestBody>
12 </ s e r v i c e R e q u e s t>
Resultado bem sucedido:
Esse serviço, quando bem sucedido, não possui retorno relevante. Quando
ocorrer falha, deve-se verificar a causa através do atributo ‘status’do envelope XML,
conforme explicado no documento sobre os fundamentos da API.

# Exclusão por filtro

Não existe um serviço de exclusão por filtro, portanto neste caso é necessário
usar os serviços CRUDServiceProvider.loadRecords e CRUDServiceProvi-
der.removeRecord em conjunto.

Clique Aqui para verificar maiores detalhes a respeito do serviço CRUD-


ServiceProvider.loadRecords.

Para cada linha retornada pelo CRUDServiceProvider.loadRecords,


faz-se uma chamada ao serviço de exclusão, ou se preferir, gera-se uma única
chamada de exclusão com todas as chaves resultantes do loadRecords.

Não há limites para a quantidade de linhas a serem excluídas por chamada,


no entanto sugere-se cautela com essa quantidade, para evitar transações longas e
dispendiosas para o banco de dados.

Exemplo de busca de chaves, considerando uma exclusão de financeiros de


nota:
Corpo da requisição:

Listing 10.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" F i n a n c e i r o " p a r a l l e l L o a d e r=" f a l s e ">
4 < !−− S e r á r e t o r n a d o apenas o campo NUFIN ( que é a PK) ,
p o i s não temos i n t e r e s s e s nos o u t r o s campos n e s t e c a s o
−−>
5 <e n t i t y path=" ">
6 < f i e l d name= ’NUFIN ’ />
7 </ e n t i t y>
8 < c r i t e r i a>
9 < !−− t o d o s o s t i t u l o s f i n a n c e i r o s l i g a d o s à nota
123456 c u j a empresa é 1 −−>
10 <e x p r e s s i o n>
11 t h i s .NUNOTA = 123456 AND t h i s .CODEMP = 1
12 </ e x p r e s s i o n>
13 </ c r i t e r i a>
14 </ d a t a S e t>
15 </ requestBody>
16 </ s e r v i c e R e q u e s t>
11 Pedidos/Orçamentos

Essa seção apresenta algumas informações sobre orçamentos e pedidos. No


processo de compra não é necessário efetuar o lançamento do Orçamento, isso
porque a emissão do mesmo é de responsabilidade do parceiro que deseja realizar
a venda. Com isso o comprador fica responsável pelo lançamento do Pedido de
Compra (O). Já no processo de venda o vendedor pode lançar um Orçamento, onde
posterior poderá faturar o mesmo gerando um Pedido de venda (P). O vendedor
pode também lançar o pedido diretamente, uma vez que o cliente faça a compra
sem solicitar um orçamento.
Alguns produtos possuem caraterísticas que acabam tornando seu armaze-
namento inviável, com isso a empresa pode optar por não manter estoque desses
produtos, fazenda a venda dos mesmos apenas por encomenda. Nesse caso o
vendedor deve realizar o lançamento do Pedido de Venda Entrega Fatura.
Analisando o processo de compra é possível notar que apenas os serviços
relacionados ao Pedido de Compra (O) serão executados para requisitar uma
consulta. O processo de vendas é um pouco mais complexo, uma vez que em
Pedido de Venda (P) possam existir os processos de Orçamento e Pedido de Venda
Entrega Futura, logo o serviço relacionado ao Pedido de Vendas poderá ter também
requisições para consultar Orçamento e Pedido de Venda Entrega Futura, não
apenas para o Pedido de Venda(P) como ocorre no Pedido de Compra(O).
Observação: Algumas informações como: url de chamada e padrão do
envelope XML são apresentados na seção 1.

11.1 Consultar Pedido de Compra


O formato do XML usado na requisição do Pedido Compra foi apesentado na
seção ??. Para apresentar todas as informações relacionadas ao Pedido de Compra
são realizadas duas requisições. A primeira requisição busca informações referentes
ao cabeçalho do pedido, a segunda busca os itens ligados aos pedidos.
Nome do Serviço: “CRUDServiceProvider.loadRecords”
Módulo: “mge”

Listing 11.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" CabecalhoNota " c r u d L i s t e n e r=" br . com .
sankhya . m o d e l c o r e . dwfdata . l i s t e n e r s . t g f .
C a b e c a l h o N o t a L i s t e n e r A d a p t e r " i n c l u d e P r e s e n t a t i o n F i e l d s="
S " p a r a l l e l L o a d e r=" t r u e " d a t a s e t i d=" 1500396176080 _14 ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 < f i e l d s e t l i s t ="CODTPD,CODVTP" e x c e p t=" t r u e " />
7 < f i e l d s e t l i s t ="DHTIPVENDA,DHTIPOPER" e x c e p t=" t r u e " />
8 </ e n t i t y>
9 <e n t i t y path=" TipoOperacao ">
10 < f i e l d s e t l i s t ="DESCROPER, NFSE,SOLCOMPRA, ATUALFIN,
ATUALEST,CODMODDOC,BASENUMERACAO,NFE" />
11 < f i e l d s e t l i s t ="DESCROPER, NFSE,SOLCOMPRA" />
12 </ e n t i t y>
13 <e n t i t y path=" P a r c e i r o ">
14 < f i e l d s e t l i s t ="NOMEPARC,TIPOFATUR" />
15 </ e n t i t y>
16 <e n t i t y path=" Contato ">
17 < f i e l d name="NOMECONTATO" />
18 </ e n t i t y>
19 <e n t i t y path=" Natureza ">
20 < f i e l d name="DESCRNAT" />
21 </ e n t i t y>
22 <e n t i t y path=" Empresa ">
23 < f i e l d name="NOMEFANTASIA" />
24 </ e n t i t y>
25 <e n t i t y path=" Empresa . E m p r e s a F i n a n c ei r o ">
26 < f i e l d name="NFSE" />
27 < f i e l d name="PRZREGCANNOTA" />
28 < f i e l d name="PRZTOLCANNOTA" />
29 < f i e l d name="TEMDENUESPONT" />
30 </ e n t i t y>
31 <e n t i t y path=" TipoNegociacao ">
32 < f i e l d s e t l i s t ="DESCRTIPVENDA,FIXAVENC" />
33 </ e n t i t y>
34 <e n t i t y path=" Vendedor ">
35 < f i e l d name="APELIDO" />
36 </ e n t i t y>
37 <e n t i t y path=" F u n c i o n a r i o ">
38 < f i e l d name="NOMEFUNC" />
39 </ e n t i t y>
40 <e n t i t y path=" T r a n s p o r t a d o r a ">
41 < f i e l d name="NOMEPARC" />
42 </ e n t i t y>
43 <e n t i t y path=" Moeda ">
44 < f i e l d name="NOMEMOEDA" />
45 </ e n t i t y>
46 <e n t i t y path=" L o t e N o t a F i s c a l E l e t r o n i c a ">
47 < f i e l d name="NUMRECEB" />
48 < f i e l d name="DHRECEB" />
49 </ e n t i t y>
50 <e n t i t y path=" Empresa . Cidade . U n i d a d e F e d e r a t i v a ">
51 < f i e l d name="UF" />
52 </ e n t i t y>
53 <e n t i t y path=" P r o j e t o ">
54 < f i e l d name="IDENTIFICACAO" />
55 </ e n t i t y>
56 < c r i t e r i a>
57 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) )</ e x p r e s s i o n>
58 <parameter type=" S ">O</ parameter>
59 </ c r i t e r i a>
60 </ d a t a S e t>
61 </ requestBody>
62 </ s e r v i c e R e q u e s t>

Após as informações referentes ao cabeçalho do pedido serem carregadas a


requisição dos itens é efetuada. Os itens são buscados de acordo com o número do
pedido, um exemplo dessa requisição é mostrado a seguir.
Nome do Serviço: “CRUDServiceProvider.loadRecords”.
Módulo: “mge”
Listing 11.2 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" ItemNota " c r u d L i s t e n e r=" br . com . sankhya .
m o d e l c o r e . c o m e r c i a l . It emN ota Cru dLi ste ner "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S " p a r a l l e l L o a d e r=" t r u e "
d a t a s e t i d=" 1500396176081\ _15 ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" Produto ">
8 < f i e l d s e t l i s t ="DESCRPROD,COMPLDESC" />
9 < f i e l d s e t l i s t ="DECQTD,DECVLR,CODVOL" />
10 </ e n t i t y>
11 <e n t i t y path=" Vendedor ">
12 < f i e l d name="APELIDO" />
13 </ e n t i t y>
14 < c r i t e r i a>
15 <e x p r e s s i o n>( t h i s .SEQUENCIA \&g t ; 0 ) AND ( t h i s .
SEQUENCIA \&g t ; 0 AND t h i s .NUNOTA = 5 )</ e x p r e s s i o n>
16 </ c r i t e r i a>
17 </ d a t a S e t>
18 </ requestBody>
19 </ s e r v i c e R e q u e s t>

11.2 Consultar Pedido de Venda


A consulta pelo tipo P - Pedido de Vendas, como citado anteriormente
na seção 11 pode retornar: Orçamentos, Pedidos de Venda e Pedidos de Venda
Entrega Futura. O XML de requisição para esse serviço é bem similar ao do Pedido
de compra, a única mudança é com relação ao criteria que usa o parâmetro P e
elimina os modelos de documento 8 e 57. Parte da requisição (o criteria) é exibido
a seguir.
Observação: Algumas informações como: url de chamada e padrão do
envelope XML são apresentados na seção 1.

Listing 11.3 – Test


1 < c r i t e r i a>
2 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) AND TipoOperacao−&g t ;CODMODDOC
NOT IN ( 8 , 57 ) )</ e x p r e s s i o n>
3 <parameter type=" S ">P</ parameter>
4 </ c r i t e r i a>

Assim como no Pedido de Compra, no Pedido de Venda os itens também são


buscados por meio de uma requisição. O XML de requisição para os itens utilizado
aqui é exatamente igual ao do Pedido de Compra.

11.3 Aplicando filtros nas consultas


Para o modelo de requisição adotado, aplicar algum tipo de filtro no momento
da consulta de algum pedido não muda muito a estrutura do XML. O filtro é
adicionado à requisição de cabeçalho do pedido. Filtros como empresa, parceiro,
data de negociação e alguns outros podem ser adicionados à consulta, isso por meio
da expression do criteria, um exemplo pode ser observado a seguir.

Listing 11.4 – Test


1 < c r i t e r i a>
2 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) AND t h i s .CODPARC IN ( 5 ) AND t h i s
.CODEMP = ? )</ e x p r e s s i o n>
3 <parameter type=" S ">O</ parameter>
4 <parameter type="N">1</ parameter>
5 </ c r i t e r i a>

Outro tipo de filtro que pode ser aplicado é definir o Tipo de Operação
(CODTIPOPER) buscado no pedido. Um exemplo é apresentado a seguir.
Listing 11.5 – Test
1 < c r i t e r i a>
2 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) AND TipoOperacao−&g t ;CODMODDOC
NOT IN ( 8 , 57 ) AND t h i s .CODTIPOPER IN ( ? ) )</ e x p r e s s i o n>
3 <parameter type=" S ">P</ parameter>
4 <parameter type="N">35</ parameter>
5 </ c r i t e r i a>
12 Notas

Assim como no caso do Pedido de Venda, a consulta de Notas pode retornar


documentos de diferentes tipos. Notas de Compra por exemplo podem ser tanto
para produto quanto serviço, o mesmo ocorre para Nota de Venda. A empresa
também pode emitir NF-e e NFS-e. No caso da NF-e podem acontecer alguns
problemas durante sua emissão o que gera os documentos: NF-e Denegada e NF-e
Pendente de Retorno, todos esses são documentos serão exibidos na consulta de
nota.
O modelo da requisição XML para consulta de Notas é bem similar ao da
consulta de pedidos, possuí uma requisição para o cabeçalho e outra para itens.
Os filtros são aplicados utilizando a expression do criteria. Alguns exemplos de
requisição para notas serão apresentados a seguir.

12.1 Consulta Nota de Compra


Um exemplo do XML de requisição para Notas de Compra é apresentado a
seguir. A expression do criteria é que define o tipo do documento, com o parâmetro
TIPMOV = ‘C’.
Observação: Algumas informações como: url de chamada e padrão do
envelope XML são apresentados na seção 1.
Nome do Serviço: “CRUDServiceProvider.loadRecords”.
Módulo: “mge”

Listing 12.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" CabecalhoNota " c r u d L i s t e n e r=" br . com .
sankhya . m o d e l c o r e . dwfdata . l i s t e n e r s . t g f .
C a b e c a l h o N o t a L i s t e n e r A d a p t e r " i n c l u d e P r e s e n t a t i o n F i e l d s="
S " p a r a l l e l L o a d e r=" t r u e " d a t a s e t i d=" 1500469360244 _12 ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 < f i e l d s e t l i s t ="CODTPD,CODVTP" e x c e p t=" t r u e " />
7 < f i e l d s e t l i s t ="DHTIPVENDA,DHTIPOPER" e x c e p t=" t r u e " />
8 </ e n t i t y>
9 <e n t i t y path=" TipoOperacao ">
10 < f i e l d s e t l i s t ="DESCROPER, NFSE,SOLCOMPRA, ATUALFIN,
ATUALEST,CODMODDOC,BASENUMERACAO,NFE" />
11 < f i e l d s e t l i s t ="DESCROPER, NFSE,SOLCOMPRA" />
12 </ e n t i t y>
13 <e n t i t y path=" P a r c e i r o ">
14 < f i e l d s e t l i s t ="NOMEPARC,TIPOFATUR" />
15 </ e n t i t y>
16 <e n t i t y path=" Contato ">
17 < f i e l d name="NOMECONTATO" />
18 </ e n t i t y>
19 <e n t i t y path=" Natureza ">
20 < f i e l d name="DESCRNAT" />
21 </ e n t i t y>
22 <e n t i t y path=" Empresa ">
23 < f i e l d name="NOMEFANTASIA" />
24 </ e n t i t y>
25 <e n t i t y path=" Empresa . E m p r e s a F i n a n c ei r o ">
26 < f i e l d name="NFSE" />
27 < f i e l d name="PRZREGCANNOTA" />
28 < f i e l d name="PRZTOLCANNOTA" />
29 < f i e l d name="TEMDENUESPONT" />
30 </ e n t i t y>
31 <e n t i t y path=" TipoNegociacao ">
32 < f i e l d s e t l i s t ="DESCRTIPVENDA,FIXAVENC" />
33 </ e n t i t y>
34 <e n t i t y path=" Vendedor ">
35 < f i e l d name="APELIDO" />
36 </ e n t i t y>
37 <e n t i t y path=" F u n c i o n a r i o ">
38 < f i e l d name="NOMEFUNC" />
39 </ e n t i t y>
40 <e n t i t y path=" T r a n s p o r t a d o r a ">
41 < f i e l d name="NOMEPARC" />
42 </ e n t i t y>
43 <e n t i t y path=" Moeda ">
44 < f i e l d name="NOMEMOEDA" />
45 </ e n t i t y>
46 <e n t i t y path=" L o t e N o t a F i s c a l E l e t r o n i c a ">
47 < f i e l d name="NUMRECEB" />
48 < f i e l d name="DHRECEB" />
49 </ e n t i t y>
50 <e n t i t y path=" Empresa . Cidade . U n i d a d e F e d e r a t i v a ">
51 < f i e l d name="UF" />
52 </ e n t i t y>
53 <e n t i t y path=" P r o j e t o ">
54 < f i e l d name="IDENTIFICACAO" />
55 </ e n t i t y>
56 < c r i t e r i a>
57 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) )</ e x p r e s s i o n>
58 <parameter type=" S ">C</ parameter>
59 </ c r i t e r i a>
60 </ d a t a S e t>
61 </ requestBody>
62 </ s e r v i c e R e q u e s t>

O XML apresentado anteriormente é para requisição das informações de


cabeçalho dos documentos, a seguir será apresentado o serviço que busca os itens
referentes aos documentos.

Listing 12.2 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" ItemNota " c r u d L i s t e n e r=" br . com . sankhya .
m o d e l c o r e . c o m e r c i a l . It emN ota Cru dLi ste ner "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S " p a r a l l e l L o a d e r=" t r u e "
d a t a s e t i d=" 1500469360244 _13 ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" Produto ">
8 < f i e l d s e t l i s t ="DESCRPROD,COMPLDESC" />
9 < f i e l d s e t l i s t ="DECQTD,DECVLR,CODVOL" />
10 </ e n t i t y>
11 <e n t i t y path=" Vendedor ">
12 < f i e l d name="APELIDO" />
13 </ e n t i t y>
14 < c r i t e r i a>
15 <e x p r e s s i o n>( t h i s .SEQUENCIA &g t ; 0 ) AND ( t h i s .
SEQUENCIA &g t ; 0 AND t h i s .NUNOTA = 5 )</ e x p r e s s i o n>
16 </ c r i t e r i a>
17 </ d a t a S e t>
18 </ requestBody>
19 </ s e r v i c e R e q u e s t>

12.2 Consulta Nota de Venda


O XML de requisição para Notas do tipo Venda é praticamente o mesmo
utilizado para consultar Notas do tipo Compra. A diferença está no parâmetro
TIPMOV que terá o valor ‘V’e não ‘C’como na compra. Um exemplo do trecho de
XML onde ocorre a mudança é apresentado a seguir.

Listing 12.3 – Test


1 < c r i t e r i a>
2 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) )</ e x p r e s s i o n>
3 <parameter type=" S ">V</ parameter>
4 </ c r i t e r i a>

Assim como na consulta das Notas de Compras, as notas de vendas precisam


de uma requisição a parte para buscar os itens referentes as notas, essa requisição
é exatamente igual a apresentada na seção anterior, mudando apenas o parâmetro
NUNOTA, para o número da nota a qual deseja-se obter os itens.

12.3 Aplicando filtros nas consultas


Para o modelo de requisição adotado, aplicar algum tipo de filtro no momento
da consulta de alguma nota não muda muito a estrutura do XML. O filtro é
adicionado à requisição de cabeçalho da nota. Filtros como empresa, parceiro, data
de negociação e alguns outros podem ser adicionados à consulta, isso por meio da
expression do criteria, um exemplo pode ser observado a seguir.

Listing 12.4 – Test


1 < c r i t e r i a>
2 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) AND t h i s .CODPARC IN ( 5 ) AND t h i s
.CODEMP = ? )</ e x p r e s s i o n>
3 <parameter type=" S ">V</ parameter>
4 <parameter type="N">1</ parameter>
5 </ c r i t e r i a>

OBS: o parâmetro TIPMOV assume o valor V para Notas de Venda e C para


Compra.
Outro tipo de filtro que pode ser aplicado é definir o Tipo de Operação
(CODTIPOPER) buscado na nota, esse código pode ser de uma NF de Serviço
ou NF-e, isso depende das configurações dos Tipos de Operação. Um exemplo é
apresentado a seguir.

Listing 12.5 – Test


1 < c r i t e r i a>
2 <e x p r e s s i o n>( t h i s .TIPMOV IN ( ? ) AND t h i s .CODTIPOPER IN ( ? ) )</
e x p r e s s i o n>
3 <parameter type=" S ">V</ parameter>
4 <parameter type="N">27</ parameter>
5 </ c r i t e r i a>
13 Financeiro

A consulta ao financeiro pode ser feita por meio da Movimentação Financeira


ou Agenda Financeira, sendo o segundo caso mais adequado por fornecer maiores
informações sobre o processo. A Agenda Financeira apresenta informações sobre:

• Contas à Pagar;

• Contas à Receber;

• Contas Pagas;

• Contas Recebidas;

• Provisão de Receitas;

• Provisão de Despesas.

A consulta à essas informações é feita por diferentes requisições, com o filtro


de data obrigatório para inicio e fim. O exemplo de Consulta para cada uma das
operações será apresentado a seguir.
Observação: Algumas informações como: url de chamada e padrão do
envelope XML são apresentados na seção 1.

13.1 Contas à pagar


Nome do Serviço: “AgendaFinanceira.consultarApagar”.
Módulo: “mgefin”

Listing 13.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" Ag e nd a Fi n an c ei ra . c o n s u l t a r A p a g a r ">
2 <requestBody>
3 <p a r a m e t r o s aPagarLiq=" t r u e " a R e c e b e r L i q=" t r u e ">
4 <p e r i o d o d t i n i c i a l=" 19/07/2017 " d t f i n a l=" 19/07/2017 " />
5 < c r i t e r i o s r e c e i t a s=" t r u e " d e s p e s a s=" t r u e " r e a l=" t r u e "
p r o v i s a o=" t r u e " p e n d e n t e s=" t r u e " b a i x a d o s=" t r u e "
t o d o s T i t u l o s=" f a l s e " />
6 < f i l t r o />
7 </ p a r a m e t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>

13.2 Contas à receber


Nome do Serviço: “AgendaFinanceira.consultarAreceber”.
Módulo: “mgefin”

Listing 13.2 – Test


1 <s e r v i c e R e q u e s t serviceName=" Ag e nd a Fi n an c ei ra . c o n s u l t a r A r e c e b e r ">
2 <requestBody>
3 <p a r a m e t r o s aPagarLiq=" t r u e " a R e c e b e r L i q=" t r u e ">
4 <p e r i o d o d t i n i c i a l=" 19/07/2017 " d t f i n a l=" 19/07/2017 " />
5 < c r i t e r i o s r e c e i t a s=" t r u e " d e s p e s a s=" t r u e " r e a l=" t r u e "
p r o v i s a o=" t r u e " p e n d e n t e s=" t r u e " b a i x a d o s=" t r u e "
t o d o s T i t u l o s=" f a l s e " />
6 < f i l t r o />
7 </ p a r a m e t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>

13.3 Contas pagas


Nome do Serviço: “AgendaFinanceira.consultarPagos”.
Módulo: “mgefin”

Listing 13.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" Ag e nd a Fi n an c ei ra . c o n s u l t a r P a g o s ">
2 <requestBody>
3 <p a r a m e t r o s aPagarLiq=" t r u e " a R e c e b e r L i q=" t r u e ">
4 <p e r i o d o d t i n i c i a l=" 19/07/2017 " d t f i n a l=" 19/07/2017 " />
5 < c r i t e r i o s r e c e i t a s=" t r u e " d e s p e s a s=" t r u e " r e a l=" t r u e "
p r o v i s a o=" t r u e " p e n d e n t e s=" t r u e " b a i x a d o s=" t r u e "
t o d o s T i t u l o s=" f a l s e " />
6 < f i l t r o />
7 </ p a r a m e t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>

13.4 Contas recebidas


Nome do Serviço: “AgendaFinanceira.consultarRecebidos”.
Módulo: “mgefin”

Listing 13.4 – Test


1 <s e r v i c e R e q u e s t serviceName=" Ag e nd a Fi n an c ei ra . c o n s u l t a r R e c e b i d o s ">
2 <requestBody>
3 <p a r a m e t r o s aPagarLiq=" t r u e " a R e c e b e r L i q=" t r u e ">
4 <p e r i o d o d t i n i c i a l=" 19/07/2017 " d t f i n a l=" 19/07/2017 " />
5 < c r i t e r i o s r e c e i t a s=" t r u e " d e s p e s a s=" t r u e " r e a l=" t r u e "
p r o v i s a o=" t r u e " p e n d e n t e s=" t r u e " b a i x a d o s=" t r u e "
t o d o s T i t u l o s=" f a l s e " />
6 < f i l t r o />
7 </ p a r a m e t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>
13.5 Provisão de Receitas
Nome do Serviço: “AgendaFinanceira.consultarProvisaoReceitas”.
Módulo: “mgefin”

Listing 13.5 – Test


1 <s e r v i c e R e q u e s t serviceName=" Ag e nd a Fi n an c ei ra .
c o n s u l t a r P r o v i s a o R e c e i t a s ">
2 <requestBody>
3 <p a r a m e t r o s aPagarLiq=" t r u e " a R e c e b e r L i q=" t r u e ">
4 <p e r i o d o d t i n i c i a l=" 19/07/2017 " d t f i n a l=" 19/07/2017 " />
5 < c r i t e r i o s r e c e i t a s=" t r u e " d e s p e s a s=" t r u e " r e a l=" t r u e "
p r o v i s a o=" t r u e " p e n d e n t e s=" t r u e " b a i x a d o s=" t r u e "
t o d o s T i t u l o s=" f a l s e " />
6 < f i l t r o />
7 </ p a r a m e t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>

13.6 Provisão de Despesas


Nome do Serviço: “AgendaFinanceira.consultarProvisaoDespesas”.
Módulo: “mgefin”

Listing 13.6 – Test


1 <s e r v i c e R e q u e s t serviceName=" Ag e nd a Fi n an c ei ra .
c o n s u l t a r P r o v i s a o D e s p e s a s ">
2 <requestBody>
3 <p a r a m e t r o s aPagarLiq=" t r u e " a R e c e b e r L i q=" t r u e ">
4 <p e r i o d o d t i n i c i a l=" 19/07/2017 " d t f i n a l=" 19/07/2017 " />
5 < c r i t e r i o s r e c e i t a s=" t r u e " d e s p e s a s=" t r u e " r e a l=" t r u e "
p r o v i s a o=" t r u e " p e n d e n t e s=" t r u e " b a i x a d o s=" t r u e "
t o d o s T i t u l o s=" f a l s e " />
6 < f i l t r o />
7 </ p a r a m e t r o s>
8 </ requestBody>
9 </ s e r v i c e R e q u e s t>
14 Parceiros

A consulta de parceiros adotada pelo sistema utiliza o CRUDServiceProvi-


der.loadRecords, a seguir será demonstrado o XML de requisição para esse serviço
e também uma outra opção utilizando o crud.find.
Nome do Serviço: “CRUDServiceProvider.loadRecords”.
Módulo: “mge”

Listing 14.1 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . l o a d R e c o r d s ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" P a r c e i r o " c r u d L i s t e n e r=" br . com . sankhya .
modelcore . c r u d l i s t e n e r s . ParceiroCrudListener "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S " p a r a l l e l L o a d e r=" t r u e "
d a t a s e t i d=" 1500484463489_1">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 < f i e l d s e t e x c e p t=" t r u e " l i s t ="CODTABST,
ENTREGAENDCONTATO,RETEMCSL, RETEMPIS,CODROTA,
USATABCRFORN, SERIENFDES,VALDESCGRDCAR,
PERCDESCESPECIAL,CODUSUCOBR,NATUREZAOPERDES, DIASEM,
DESCRROTA, SITESPECIALRESP ,MOTNAORETERISSQN,
MODELONFDES,RETEMCOFINS" />
7 </ e n t i t y>
8 <e n t i t y path=" L o c a l F i n a n c e i r o ">
9 < f i e l d name="DESCRLOCAL" />
10 </ e n t i t y>
11 <e n t i t y path=" A s s e s s o r ">
12 < f i e l d name="APELIDO" />
13 </ e n t i t y>
14 <e n t i t y path=" PlanoConta4 ">
15 < f i e l d name="DESCRCTA" />
16 </ e n t i t y>
17 <e n t i t y path=" PlanoConta3 ">
18 < f i e l d name="DESCRCTA" />
19 </ e n t i t y>
20 <e n t i t y path=" PlanoConta2 ">
21 < f i e l d name="DESCRCTA" />
22 </ e n t i t y>
23 <e n t i t y path=" Cidade ">
24 < f i e l d name="NOMECID" />
25 </ e n t i t y>
26 <e n t i t y path=" Vendedor ">
27 < f i e l d name="APELIDO" />
28 </ e n t i t y>
29 <e n t i t y path=" Endereco ">
30 < f i e l d name="NOMEEND" />
31 </ e n t i t y>
32 <e n t i t y path=" P a r c e i r o M a t r i z ">
33 < f i e l d name="NOMEPARC" />
34 </ e n t i t y>
35 <e n t i t y path=" ContaBancaria ">
36 < f i e l d name="DESCRICAO" />
37 </ e n t i t y>
38 <e n t i t y path=" U s u a r i o ">
39 < f i e l d name="NOMEUSU" />
40 </ e n t i t y>
41 <e n t i t y path=" Regiao ">
42 < f i e l d name="NOMEREG" />
43 </ e n t i t y>
44 <e n t i t y path=" NomeTabelasPreco ">
45 < f i e l d name="NOMETAB" />
46 </ e n t i t y>
47 <e n t i t y path=" E m p r e s a P r e f e r e n c i a l ">
48 < f i e l d name="NOMEFANTASIA" />
49 </ e n t i t y>
50 <e n t i t y path=" P e r f i l ">
51 < f i e l d name="DESCRTIPPARC" />
52 </ e n t i t y>
53 <e n t i t y path=" PlanoConta ">
54 < f i e l d name="DESCRCTA" />
55 </ e n t i t y>
56 <e n t i t y path=" Banco ">
57 < f i e l d name="NOMEBCO" />
58 </ e n t i t y>
59 <e n t i t y path=" Empresa ">
60 < f i e l d name="NOMEFANTASIA" />
61 </ e n t i t y>
62 <e n t i t y path=" B a i r r o ">
63 < f i e l d name="NOMEBAI" />
64 </ e n t i t y>
65 <e n t i t y path=" ComplementoParc . T i p o N e g o c i a c a o F i l h a ">
66 < f i e l d name="DESCRTIPVENDA" />
67 </ e n t i t y>
68 <e n t i t y path=" ComplementoParc . N a c i o n a l i d a d e P a r c e i r o ">
69 < f i e l d name="DESCRICAO" />
70 </ e n t i t y>
71 <e n t i t y path=" ComplementoParc . TipoNegociacao ">
72 < f i e l d name="DESCRTIPVENDA" />
73 </ e n t i t y>
74 <e n t i t y path=" ComplementoParc . B a i r r o T r a b a l h o ">
75 < f i e l d name="NOMEBAI" />
76 </ e n t i t y>
77 <e n t i t y path=" ComplementoParc . T r a n s p o r t a d o r a ">
78 < f i e l d name="NOMEPARC" />
79 </ e n t i t y>
80 <e n t i t y path=" ComplementoParc . B a i r r o R e c e b i m e n t o ">
81 < f i e l d name="NOMEBAI" />
82 </ e n t i t y>
83 <e n t i t y path=" ComplementoParc . EnderecoTrabalho ">
84 < f i e l d name="NOMEEND" />
85 </ e n t i t y>
86 <e n t i t y path=" ComplementoParc . Moeda ">
87 < f i e l d name="NOMEMOEDA" />
88 </ e n t i t y>
89 <e n t i t y path=" ComplementoParc . Cidade ">
90 < f i e l d name="NOMECID" />
91 </ e n t i t y>
92 <e n t i t y path=" ComplementoParc . CidadeTrabalho ">
93 < f i e l d name="NOMECID" />
94 </ e n t i t y>
95 <e n t i t y path=" ComplementoParc . N a t u r a l i d a d e P a r c e i r o ">
96 < f i e l d name="NOMECID" />
97 </ e n t i t y>
98 <e n t i t y path=" ComplementoParc . NomeTabelasPreco ">
99 < f i e l d name="NOMETAB" />
100 </ e n t i t y>
101 <e n t i t y path=" ComplementoParc . EnderecoRecebimento ">
102 < f i e l d name="NOMEEND" />
103 </ e n t i t y>
104 <e n t i t y path=" ComplementoParc . B a i r r o ">
105 < f i e l d name="NOMEBAI" />
106 </ e n t i t y>
107 <e n t i t y path=" ComplementoParc . CidadeRecebimento ">
108 < f i e l d name="NOMECID" />
109 </ e n t i t y>
110 <e n t i t y path=" ComplementoParc . Endereco ">
111 < f i e l d name="NOMEEND" />
112 </ e n t i t y>
113 <e n t i t y path=" ComplementoParc ">
114 < f i e l d s e t l i s t =" ∗ " />
115 </ e n t i t y>
116 < c r i t e r i a>
117 <e x p r e s s i o n>( t h i s .CODPARC &g t ; 0 )</ e x p r e s s i o n>
118 </ c r i t e r i a>
119 </ d a t a S e t>
120 </ requestBody>
121 </ s e r v i c e R e q u e s t>

Nome do Serviço: “crud.find”.


Módulo: “mge”

Listing 14.2 – Test


1 <s e r v i c e R e q u e s t serviceName=" crud . f i n d ">
2 <requestBody>
3 <e n t i t y name=" P a r c e i r o " g e t P r e s e n t a t i o n s=" f a l s e " />
4 </ requestBody>
5 </ s e r v i c e R e q u e s t>
15 Registro de Contratos

O cadastro do contrato no sistema utiliza o serviço CRUDServiceProvi-


der.saveRecord, para as instancias envolvendo a entidade de contratos. Os XMLs a
seguir irão descrever um cadastro simples de todas as instancias que envolvem um
contrato no Sankhya-w:
Nome do Serviço: CRUDServiceProvider.saveRecord.
Módulo: mge

15.1 Entidade: Contrato


Listing 15.1 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" Contrato " i n c l u d e P r e s e n t a t i o n F i e l d s=" S "
c r u d L i s t e n e r=" br . com . sankhya . m o d e l c o r e . c r u d l i s t e n e r s .
C o n t r a t o C r u d L i s t e n e r ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <dataRow>
8 < l o c a l F i e l d s>
9 <LOCACAOBEM>< ! [CDATA[ S ] ]></LOCACAOBEM>
10 <FATURPRORATA>< ! [CDATA[ S ] ]></FATURPRORATA>
11 <TIPPAG>< ! [CDATA[V ] ]></TIPPAG>
12 <RECDESP>< ! [CDATA[ 1 ] ]></RECDESP>
13 <CODPARC>< ! [CDATA[ 3 ] ]></CODPARC>
14 <TIPO>< ! [CDATA[M] ]></TIPO>
15 <ATIVO>< ! [CDATA[ S ] ]></ATIVO>
16 <CODCENCUS>< ! [CDATA[ 1 0 2 0 0 ] ]></CODCENCUS>
17 <CODEMP>< ! [CDATA[ 1 ] ]></CODEMP>
18 <CODCONTATO>< ! [CDATA[ 1 ] ]></CODCONTATO>
19 <CODUSU>< ! [CDATA[ 0 ] ]></CODUSU>
20 <DTCONTRATO>< ! [CDATA[ 0 7 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></
DTCONTRATO>
21 <TIPOCONTRATO>< ! [CDATA[N ] ]></TIPOCONTRATO>
22 <DTBASEREAJ>< ! [CDATA[ 0 7 / 0 3 / 2 0 1 8 16 : 0 4 : 2 3 ] ]></
DTBASEREAJ>
23 </ l o c a l F i e l d s>
24 </dataRow>
25 </ d a t a S e t>
26 </ requestBody>
27 </ s e r v i c e R e q u e s t>

15.2 Entidade: Comissao


Listing 15.2 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" Comissao " i n c l u d e P r e s e n t a t i o n F i e l d s=" S "
>
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" P a r c e i r o ">
8 < f i e l d name="RAZAOSOCIAL" />
9 </ e n t i t y>
10 <e n t i t y path=" S e r v i c o ">
11 < f i e l d name="DESCRPROD" />
12 </ e n t i t y>
13 <dataRow>
14 < l o c a l F i e l d s>
15 <CODPROD>< ! [CDATA[ 1 ] ]></CODPROD>
16 <VLRCOMISSAO>< ! [CDATA[ 1 0 0 ] ]></VLRCOMISSAO>
17 <PERCCOM>< ! [CDATA[ 1 0 ] ]></PERCCOM>
18 <CODPARC>< ! [CDATA[ 2 ] ]></CODPARC>
19 </ l o c a l F i e l d s>
20 <f o r e i n g K e y>
21 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
22 </ f o r e i n g K e y>
23 </dataRow>
24 </ d a t a S e t>
25 </ requestBody>
26 </ s e r v i c e R e q u e s t>

15.3 Entidade: ProdutoServicoContrato


Listing 15.3 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" P r o d u t o S e r v i c o C o n t r a t o "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" TipoOperacaoGrupoFaturamento ">
8 < f i e l d name="DESCROPER" />
9 </ e n t i t y>
10 <e n t i t y path=" Produto ">
11 < f i e l d name="DESCRPROD" />
12 </ e n t i t y>
13 <dataRow>
14 < l o c a l F i e l d s>
15 <CODPROD>< ! [CDATA[ 1 5 ] ]></CODPROD>
16 </ l o c a l F i e l d s>
17 <f o r e i n g K e y>
18 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
19 </ f o r e i n g K e y>
20 </dataRow>
21 </ d a t a S e t>
22 </ requestBody>
23 </ s e r v i c e R e q u e s t>
15.4 Entidade: ProdutoServicoSerie
Listing 15.4 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" P r o d u t o S e r v i c o S e r i e "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" U s u a r i o ">
8 < f i e l d name="NOMEUSU" />
9 </ e n t i t y>
10 <dataRow>
11 < l o c a l F i e l d s>
12 <SERIE>< ! [CDATA[ 1 5 ] ]></SERIE>
13 <ATIVO>< ! [CDATA[ S ] ]></ATIVO>
14 </ l o c a l F i e l d s>
15 <f o r e i n g K e y>
16 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
17 <CODPROD>< ! [CDATA[ 1 5 ] ]></CODPROD>
18 </ f o r e i n g K e y>
19 </dataRow>
20 </ d a t a S e t>
21 </ requestBody>
22 </ s e r v i c e R e q u e s t>

15.5 Entidade: VendedorProdutoContrato


Listing 15.5 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" VendedorProdutoContrato "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" U s u a r i o ">
8 < f i e l d name="NOMEUSU" />
9 </ e n t i t y>
10 <e n t i t y path=" Vendedor ">
11 < f i e l d name="APELIDO" />
12 </ e n t i t y>
13 <dataRow>
14 < l o c a l F i e l d s>
15 <NUNOTA>< ! [CDATA[ 2 3 ] ]></NUNOTA>
16 <VLRBASE>< ! [CDATA[ 1 ] ]></VLRBASE>
17 <PERCCOM>< ! [CDATA[ 1 ] ]></PERCCOM>
18 <CODVEND>< ! [CDATA[ 1 ] ]></CODVEND>
19 <TIPO>< ! [CDATA[A ] ]></TIPO>
20 <DTFIM>< ! [CDATA[ 2 2 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></DTFIM>
21 <DTINI>< ! [CDATA[ 1 4 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></DTINI>
22 </ l o c a l F i e l d s>
23 <f o r e i n g K e y>
24 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
25 <CODPROD>< ! [CDATA[ 1 5 ] ]></CODPROD>
26 </ f o r e i n g K e y>
27 </dataRow>
28 </ d a t a S e t>
29 </ requestBody>
30 </ s e r v i c e R e q u e s t>

15.6 Entidade: PrecoContrato


Listing 15.6 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" Pr eco Co ntr at o "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <dataRow>
8 < l o c a l F i e l d s>
9 <VALOR>< ! [CDATA[ 1 2 0 ] ]></VALOR>
10 <REFERENCIA>< ! [CDATA[ 0 7 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></
REFERENCIA>
11 </ l o c a l F i e l d s>
12 <f o r e i n g K e y>
13 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
14 <CODPROD>< ! [CDATA[ 1 5 ] ]></CODPROD>
15 </ f o r e i n g K e y>
16 </dataRow>
17 </ d a t a S e t>
18 </ requestBody>
19 </ s e r v i c e R e q u e s t>

15.7 Entidade: OcorrenciaContrato


Listing 15.7 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" O c o r r e n c i a C o n t r a t o "
i n c l u d e P r e s e n t a t i o n F i e l d s=" S ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" U s u a r i o ">
8 < f i e l d name="NOMEUSU" />
9 </ e n t i t y>
10 <e n t i t y path=" P a r c e i r o ">
11 < f i e l d name="RAZAOSOCIAL" />
12 </ e n t i t y>
13 <e n t i t y path=" Contato ">
14 < f i e l d name="NOMECONTATO" />
15 </ e n t i t y>
16 <e n t i t y path=" O c o r r e n c i a ">
17 < f i e l d name="DESCRICAO" />
18 </ e n t i t y>
19 <dataRow>
20 < l o c a l F i e l d s>
21 <CODOCOR>< ! [CDATA[ 1 ] ]></CODOCOR>
22 <CODCONTATO>< ! [CDATA[ 1 ] ]></CODCONTATO>
23 <CODUSU>< ! [CDATA[ 3 9 ] ]></CODUSU>
24 <DTOCOR>< ! [CDATA[ 0 8 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></DTOCOR>
25 <DESCRICAO>< ! [CDATA[ t e s t e t e s t e t e s t e ] ]></DESCRICAO
>
26 <CODPARC>< ! [CDATA[ 3 ] ]></CODPARC>
27 </ l o c a l F i e l d s>
28 <f o r e i n g K e y>
29 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
30 <CODPROD>< ! [CDATA[ 1 5 ] ]></CODPROD>
31 </ f o r e i n g K e y>
32 </dataRow>
33 </ d a t a S e t>
34 </ requestBody>
35 </ s e r v i c e R e q u e s t>

15.8 Entidade: Financeiro


Listing 15.8 – Test
1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" F i n a n c e i r o " i n c l u d e P r e s e n t a t i o n F i e l d s="
S ">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 <e n t i t y path=" P r o j e t o ">
8 < f i e l d name="IDENTIFICACAO" />
9 </ e n t i t y>
10 <e n t i t y path=" P a r c e i r o ">
11 < f i e l d name="RAZAOSOCIAL" />
12 </ e n t i t y>
13 <e n t i t y path=" AcertoOrdemCargaHist ">
14 < f i e l d name="DESCRHIST" />
15 </ e n t i t y>
16 <e n t i t y path=" Vendedor ">
17 < f i e l d name="APELIDO" />
18 </ e n t i t y>
19 <e n t i t y path=" U s u a r i o ">
20 < f i e l d name="NOMEUSU" />
21 </ e n t i t y>
22 <e n t i t y path=" TipoOperacaoBaixa ">
23 < f i e l d name="DESCROPER" />
24 < f i e l d name="DESCROPER" />
25 </ e n t i t y>
26 <e n t i t y path=" Banco ">
27 < f i e l d name="NOMEBCO" />
28 </ e n t i t y>
29 <e n t i t y path=" Contato ">
30 < f i e l d name="NOMECONTATO" />
31 </ e n t i t y>
32 <e n t i t y path=" L i s t a S e r v i c o S i n t e g r a ">
33 < f i e l d name="DESCRLST" />
34 </ e n t i t y>
35 <e n t i t y path=" Empresa ">
36 < f i e l d name="NOMEFANTASIA" />
37 </ e n t i t y>
38 <e n t i t y path=" C e n t r o R e s u l t a d o ">
39 < f i e l d name="DESCRCENCUS" />
40 </ e n t i t y>
41 <e n t i t y path=" TipoOperacao ">
42 < f i e l d name="DESCROPER" />
43 < f i e l d name="DESCROPER" />
44 </ e n t i t y>
45 <e n t i t y path=" EmpresaBaixa ">
46 < f i e l d name="NOMEFANTASIA" />
47 </ e n t i t y>
48 <e n t i t y path=" C i d a d e D e s t i n o ">
49 < f i e l d name="NOMECID" />
50 </ e n t i t y>
51 <e n t i t y path=" Natureza ">
52 < f i e l d name="DESCRNAT" />
53 </ e n t i t y>
54 <e n t i t y path=" Moeda ">
55 < f i e l d name="NOMEMOEDA" />
56 </ e n t i t y>
57 <e n t i t y path=" CidadeOrigem ">
58 < f i e l d name="NOMECID" />
59 </ e n t i t y>
60 <e n t i t y path=" ContaBancaria ">
61 < f i e l d name="DESCRICAO" />
62 </ e n t i t y>
63 <e n t i t y path=" F u n c i o n a r i o ">
64 < f i e l d name="NOMEFUNC" />
65 </ e n t i t y>
66 <e n t i t y path=" T i p o T i t u l o ">
67 < f i e l d name="DESCRTIPTIT" />
68 </ e n t i t y>
69 <e n t i t y path=" U s u a r i o B a i x a ">
70 < f i e l d name="NOMEUSU" />
71 </ e n t i t y>
72 <e n t i t y path=" V e i c u l o ">
73 < f i e l d name="MARCAPLACA" />
74 </ e n t i t y>
75 <e n t i t y path=" C l a s s i f i c a c a o F i s c a l O p e r a c a o ">
76 < f i e l d name="DESCRCFO" />
77 </ e n t i t y>
78 <e n t i t y path="TEF">
79 < f i e l d s e t l i s t =" ∗ " />
80 </ e n t i t y>
81 <dataRow>
82 < l o c a l F i e l d s>
83 <VLRBAIXA>< ! [CDATA[ 0 ] ]></VLRBAIXA>
84 <NUMCONTRATO>< ! [CDATA[ 1 5 ] ]></NUMCONTRATO>
85 <CODEMP>< ! [CDATA[ 1 ] ]></CODEMP>
86 <PROVISAO>< ! [CDATA[ S ] ]></PROVISAO>
87 <DESDOBDUPL>< ! [CDATA[ T ] ]></DESDOBDUPL>
88 <DTVENC>< ! [CDATA[ 0 7 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></DTVENC>
89 <ORIGEM>< ! [CDATA[ F ] ]></ORIGEM>
90 <DTNEG>< ! [CDATA[ 0 7 / 0 3 / 2 0 1 8 0 : 0 0 : 0 0 ] ]></DTNEG>
91 <RECDESP>< ! [CDATA[ 1 ] ]></RECDESP>
92 <CODNAT>< ! [CDATA[ 1 0 1 0 0 0 0 ] ]></CODNAT>
93 <CODPROJ>< ! [CDATA[ 0 ] ]></CODPROJ>
94 <CODCENCUS>< ! [CDATA[ 1 0 2 0 0 ] ]></CODCENCUS>
95 <CODPARC>< ! [CDATA[ 3 ] ]></CODPARC>
96 <DESDOBRAMENTO>< ! [CDATA[ 1 ] ]></DESDOBRAMENTO>
97 <CODTIPTIT>< ! [CDATA[ 0 ] ]></CODTIPTIT>
98 <NUMNOTA>< ! [CDATA[ 0 ] ]></NUMNOTA>
99 <VLRDESDOB>< ! [CDATA[ 1 0 0 ] ]></VLRDESDOB>
100 <CODBCO>< ! [CDATA[ 0 ] ]></CODBCO>
101 </ l o c a l F i e l d s>
102 </dataRow>
103 </ d a t a S e t>
104 </ requestBody>
105 </ s e r v i c e R e q u e s t>

15.9 Criterios de Rateio


Cadastra ou altera uma configuração de rateio de contrato:

Listing 15.9 – Test


1 <s e r v i c e R e q u e s t serviceName=" C r i t e r i o s D e R a t e i o S P . c o n f i r m a r R a t e i o ">
2 <requestBody>
3 < r a t e i o s numContrato=" 15 " origem="C">
4 <r a t e i o>
5 <VLRRATEIO i s A d i c i o n a l=" f a l s e ">0</VLRRATEIO>
6 <PERCRATEIO i s A d i c i o n a l=" f a l s e ">100</PERCRATEIO>
7 <DIGITADO i s A d i c i o n a l=" f a l s e ">S</DIGITADO>
8 <TIPOAFERICAO i s A d i c i o n a l=" f a l s e ">N</TIPOAFERICAO>
9 </ r a t e i o>
10 </ r a t e i o s>
11 </ requestBody>
12 </ s e r v i c e R e q u e s t>
16 Inclusão de Pedidos/Notas

Para incluirmos pedidos e outros tipos de movimentos de estoque devemos


usar o serviço CACSP.incluirNota do módulo mgecom.

Pedidos ou notas incluídos por esse serviço passam pelo mesmo conjunto de
regras de negócio que um pedido/nota incluído pela interface padrão do sistema
Sankhya/Jiva. Todas as configurações e validações presentes no Tipo de Operação
(TOP), Tipo de Negociação, etc. serão respeitados, assim como a geração de infor-
mações auxiliares, como Financeiro, atualização de estoque, geração de impostos,
solicitação de liberações, etc.

Os campos obrigatórios dependem estritamente da configuração de TOP,


empresa, produto, etc. Portanto, neste exemplo colocamos os campos tipicamente
obrigatórios em todos os casos de uso. Este exemplo não tenta exaurir as possi-
bilidades, que são muitas, então em alguns casos a chamada a esse serviço pode
resultar em mensagem de erro exigindo que outros campos sejam enviados. Apenas
um pedido/nota pode ser enviado por vez.

Para usar serviços de módulos auxiliares, como é o caso do mgecom devemos


enviar um parâmetro adicional na URL, cujo nome é mgeSession e o valor será o
ID adquirido no serviço de autenticação. Isso não se aplica para serviços do módulo
mge, que é o principal.
# Parâmetros de chamada

• <nota>

– Elemento XML com informações sobre o cabeçalho e os itens do pedido.


Cada elemento está documentado no exemplo contido neste documento.

# Dados modificados
Quando bem sucedida, a chamada deste serviço inclui um novo Pedido
ou nota, incluindo ou modificando dados em diversas tabelas, dependendo das
configurações de TOP, Tipo de Negociação, etc.

# Transação
Esse serviço é transacional, portanto se alguma falha ocorrer (status = 0,
por exemplo) nenhuma informação será incluída ou modificada.

# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mgecom/service.sbr?serviceName
URL
=CACSP.incluirNota&mgeSession=[ID adquirido no serviço de autenticaç

Note que, neste caso, estamos usando um parâmetro adicional na URL,


chamado mgeSession. Esse parâmetro deve receber o ID adquirido no serviço de
autenticação e só é necessário em módulos secundários, como é o caso do mgecom
(o módulo principal, mge, não exige). O cookie JSESSIONID também é obrigatório
em chamadas de serviço de módulo secundários.

Headers HTTP: Content-Type: text/xml;charset=ISO-8859-1 Cookie:


JSESSIONID=[ID adquirido no serviço de autenticação]

Estrutura básica da requisição:

Listing 16.1 – Test


1 <nota>
2 <c a b e c a l h o>
3 < !−− campos do c a b e ç a l h o devem s e r c o l o c a d o s a q u i−−>
4 </ c a b e c a l h o>
5 <i t e n s>
6 <item>
7 < !−− campos do item devem s e r c o l o c a d o s a q u i−−>
8 </ item>
9 </ i t e n s>
10 </ nota>

Estrutura básica da requisição:

Listing 16.2 – Test


1 <pk>
2 < !−− Nro . ú n i c o do p e d i d o / nota g e r a d o p e l o s i s t e m a −−>
3 <NUNOTA>99999</NUNOTA>
4 </pk>
5 < !−−a v i s o s d i v e r s o s que o s i s t e m a pode e m i t i r por c o n t a da
i n c l u s ã o do p e d i d o . Esse e l e m e n t o s ó s e r á r e t o r n a d o c a s o h a j a
a v i s o s .−−>
6 <a v i s o s>
7 <a v i s o />
8 </ a v i s o s>
9 < !−−L i b e r a ç õ e s d i v e r s a s que o s i s t e m a pode e m i t i r , como por
exemplo L i m i t e de C r é d i t o , e s t o q u e i n s u f i c i e n t e , e t c . Esse
e l e m e n t o s ó s e r á r e t o r n a d o c a s o h a j a s o l i c i t a ç õ e s de l i b e r a ç ã o
de a l ç a d a .−−>
10 < l i b e r a c o e s>
11 <l i b e r a c a o />
12 </ l i b e r a c o e s>

# Exemplo de uso

Corpo da requisição:

Listing 16.3 – Test


1 <s e r v i c e R e q u e s t serviceName="CACSP. i n c l u i r N o t a ">
2 <requestBody>
3 <nota>
4 <c a b e c a l h o>
5 < !−−
6 O e l e m e n t o NUNOTA deve s e r e n v i a d o v a z i o , p o i s o
nro . s e r a g e r a d o p e l o s i s t e m a .
7 −−>
8 <NUNOTA/>
9 < !−−
10 TIPMOV=P d e t e r m i n a que e um p e d i d o .
11 Caso n e c e s s a r i o , v e r i f i c a r o s o u t r o s v a l o r e s
p o s s i v e i s d e s t e campo na t e l a ’ D i c i o n a r i o de
dados ’
12 −−>
13 <TIPMOV>P</TIPMOV>
14 <DTNEG>12/10/2015</DTNEG>
15 <CODTIPVENDA>11</CODTIPVENDA>
16 <CODPARC>2</CODPARC>
17 <CODTIPOPER>18</CODTIPOPER>
18 <CODEMP>1</CODEMP>
19 <CODVEND>2</CODVEND>
20 <OBSERVACAO>< ! [CDATA[ p e d i d o i n c l u i d o v i a i n t e g r a c a o ] ]>
</OBSERVACAO>
21 </ c a b e c a l h o>
22 < !−−
23 O a t r i b u t o ’INFORMARPRECO ’ do e l e m e n t o ’ i t e n s ’ e uma
f l a g ( True ,
24 F a l s e ) que d e t e r m i n a s e o p r e c o u n i t a r i o s e r a
informado no XML ou
25 s e s e r a o b t i d o da t a b e l a de p r e c o s automaticamente .
26 Neste exemplo estamos usando a f l a g = " F a l s e " ,
p o r t a n t o nao e
27 n e c e s s a r i o enviarmos o campo VLRUNIT ( que e o v a l o r
u n i t a r i o do produto ) .
28 Se queremos u s a r um p r e c o d i f e r e n t e do p r e c o de t a b e l a
do produto
29 e n t a o devemos a l t e r a r e s s a f l a g para " True " e
a d i c i o n a r m o s no XML o e l e m e n t o VLRUNIT .
30 Em q u a l q u e r das a l t e r n a t i v a s a t o t a l i z a c a o do item e
do p e d i d o e
31 r e a l i z a d a p e l o s i s t e m a , p o r t a n t o nao e n e c e s s a r i o
i n c l u i r campos
32 de t o t a i s , p o i s e l e s s e r a o sempre c a l c u l a d o s .
33 −−>
34 <i t e n s INFORMARPRECO=" F a l s e ">
35 <item>
36 < !−−
37 Os e l e m e n t o NUNOTA e SEQUENCIA devem s e r
enviados vazios , pois serao gerados pelo
sistema
38 −−>
39 <NUNOTA/>
40 <SEQUENCIA/>
41 < !−−
42 Codigo do produto v i n c u l a d o a e s s e item . Conforme
cad . no s i s t e m a
43 −−>
44 <CODPROD>13</CODPROD>
45 < !−− Unidade de venda . −−>
46 <CODVOL>< ! [CDATA[UN ] ]></CODVOL>
47 < !−− L o c a l de estocagem . ZERO c a s o nao u s e l o c a l −−
>
48 <CODLOCALORIG>0</CODLOCALORIG>
49 < !−−
50 C o n t r o l e e s p e c i a l de e s t o q u e ( e x e m p l o : Pequeno ,
Medio , Grande ,
51 Azul , Vermelho , e t c ) .
52 Produtos c o n t r o l a d o s por l o t e g e r a l m e n t e nao
possuem l o t e
53 informado no pedido , apenas na nota . V e r i f i c a r
documentacao do s i s t e m a .
54 Vazio s e nao usa c o n t r o l e e s p e c i a l
55 −−>
56 <CONTROLE/>
57 < !−−
58 Qtd . do produto na unidade informada em ’CODVOL’
59 Esse campo e decimal , e a qtd . de c a s a s d e c i m a i s
depende da
60 c o n f i g u r a c a o do produto
61 −−>
62 <QTDNEG>1</QTDNEG>
63 </ item>
64 < !−− Outros i t e n s . O l i m i t e depende da c o n f i g u r a c a o da
TOP −−>
65 <item>
66 <NUNOTA/>
67 <SEQUENCIA/>
68 <CODPROD>108</CODPROD>
69 <CODVOL>< ! [CDATA[UN ] ]></CODVOL>
70 <CODLOCALORIG>0</CODLOCALORIG>
71 <CONTROLE/>
72 <QTDNEG>3</QTDNEG>
73 </ item>
74 </ i t e n s>
75 </ nota>
76 </ requestBody>
77 </ s e r v i c e R e q u e s t>

Resposta bem sucedida:

Listing 16.4 – Test


1 <s e r v i c e R e s p o n s e serviceName="CACSP. i n c l u i r N o t a " s t a t u s=" 1 "
p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" a f c 0 1 9 7 4 −351c−4a92−a03d
−45 c 4 8 e d 2 a f 9 4 ">
2 <responseBody>
3 <pk>
4 <NUNOTA>3508</NUNOTA>
5 </pk>
6 </ responseBody>
7 </ s e r v i c e R e s p o n s e>
Dump HTTP para conferência:

Listing 16.5 – Test


1 POST
2 /mgecom/ s e r v i c e . s b r ? serviceName=CACSP. i n c l u i r N o t a&m g e S e s s i o n=BEAC7
3 70E756370D54A0329B68ADA2CBE HTTP/ 1 . 1
4 Host: l o c a l h o s t : 8 0 8 0
5 Content−Type: t e x t /xml ; c h a r s e t=ISO−8859−1
6 C o o k i e : JSESSIONID=BEAC770E756370D54A0329B68ADA2CBE
7 Cache−C o n t r o l : no−c a c h e
8 Postman−Token: 021 cb85f −3366−2c8d−c0ba−b82da65b8fc5
9 <s e r v i c e R e q u e s t serviceName=" MobileLoginSP . l o g i n ">
10 <requestBody>
11 <nota>
12 <c a b e c a l h o>
13 <NUNOTA/>
14 <TIPMOV>P</TIPMOV>
15 <DTNEG>12/10/2015</DTNEG>
16 <CODTIPVENDA>11</CODTIPVENDA>
17 <CODPARC>2</CODPARC>
18 <CODTIPOPER>18</CODTIPOPER>
19 <CODEMP>1</CODEMP>
20 <CODVEND>2</CODVEND>
21 <OBSERVACAO>< ! [CDATA[ p e d i d o i n c l u i d o v i a
22 i n t e g r a c a o ] ]></OBSERVACAO>
23 </ c a b e c a l h o>
24 <i t e n s>
25 <item>
26 <NUNOTA/>
27 <SEQUENCIA/>
28 <CODPROD>13</CODPROD>
29 <CODVOL>< ! [CDATA[UN ] ]></CODVOL>
30 <CODLOCALORIG>0</CODLOCALORIG>
31 <CONTROLE/>
32 <QTDNEG>1</QTDNEG>
33 </ item>
34 <item>
35 <NUNOTA/>
36 <SEQUENCIA/>
37 <CODPROD>108</CODPROD>
38 <CODVOL>< ! [CDATA[UN ] ]></CODVOL>
39 <CODLOCALORIG>0</CODLOCALORIG>
40 <CONTROLE/>
41 <QTDNEG>3</QTDNEG>
42 </ item>
43 </ i t e n s>
44 </ nota>
45 </ requestBody>
46 </ s e r v i c e R e q u e s t>
17 Inclusão de Financeiros

Para incluirmos títulos financeiros devemos fazer uso do serviço CRUD-


ServiceProvider.saveRecord do módulo mge.

Esse exemplo demonstra a inclusão de um registro (INSERT), mas o mesmo


serviço com a mesma estrutura pode ser usado para realizar modificações em
registros existentes (UPDATE), bastando para isso enviar um elemento a mais
(conforme comentários) no XML.

# Parâmetros de chamada

• <dataSet>
Elemento XML com campos solicitados, filtro, etc. Cada subelemento está
detalhado no exemplo abaixo.

# Dados modificados Quando bem sucedida, a chamada deste serviço


inclui um novo registro na tabela de títulos financeiros.

# Geração de chave A entidade de dados ‘Financeiro’(tabela TGFFIN)


possui geração de chave automática, portanto o campo NUFIN será gerado auto-
maticamente e retornado na resposta do serviço. Isso significa que esse campo não
deve fazer parte do XML de chamada do serviço.

# Transação Esse serviço é transacional, portanto se alguma falha ocor-


rer (status = 0, por exemplo) nenhuma informação será incluída ou modificada.

# Detalhes do HTTP

Método de requisição POST


http://nome_ou_ip_do_servidor:8080/mge/service.sbr?serviceName
URL
=CRUDServiceProvider.saveRecord
Headers HTTP:

• Content-Type: text/xml;charset=ISO-8859-1

• Cookie: JSESSIONID=[ID adquirido no serviço de autenticação]

Estrutura básica da requisição:

Listing 17.1 – Test


1 <d a t a S e t>
2 <e n t i t y>
3 < f i e l d s e t />
4 < f i e l d />
5 </ e n t i t y>
6 <dataRow>
7 < l o c a l F i e l d s>
8 < !−− campos com o s dados a serem s a l v o s −−>
9 </ l o c a l F i e l d s>
10 < !−− O e l e m e n t o ’ key ’ s ó deve e s t a r p r e s e n t e c a s o s e j a
uma a t u a l i z a ç ã o de r e g i s t r o j á e x i s t e n t e . Quando
a u s e n t e , o s i s t e m a e n t e n d e s e r um INSERT −−>
11 <key>
12 < !−− campos da chave p r i m a r i a devem s e r c o l o c a d o s a q u i em
c a s o de UPDATE. Neste exemplo , o t i t u l o f i n a n c e i r o de
nro . ú n i c o 9988 t e r i a o s dados a l t e r a d o s ( campos
p r e s e n t e s em ’ l o c a l F i e l d s ’ ) −−>
13 <NUFIN>9988</NUFIN>
14 </ key>
15 </dataRow>
16 </ d a t a S e t>
Corpo da requisição:

Listing 17.2 – Test


1 < e n t i t i e s t o t a l= ’ 1 ’>
2 <e n t i t y>
3 < !−− campos r e t o r n a d o s , i n c l u s i v e NUFIN g e r a d o −−>
4 </ e n t i t y>
5 </ e n t i t i e s>

# Exemplo de uso (financeiros vinculados à Pedido/Nota)

Exemplo de corpo da requisição:

Listing 17.3 – Test


1 <s e r v i c e R e q u e s t serviceName=" CRUDServiceProvider . saveRecord ">
2 <requestBody>
3 <d a t a S e t r o o t E n t i t y=" F i n a n c e i r o " i n c l u d e P r e s e n t a t i o n F i e l d s="
S " d a t a s e t i d=" 1444487520009_1">
4 <e n t i t y path=" ">
5 < f i e l d s e t l i s t =" ∗ " />
6 </ e n t i t y>
7 < !−− Deve haver apenas um e l e m e n t o ’ dataRow ’ por
chamada , o que l i m i t a o s e r v i ç o a i n c l u i r um t í t u l o
f i n a n c e i r o por vez −−>
8 <dataRow>
9 < l o c a l F i e l d s>
10 < !−− campos e x p l i c a d o s mais a b a i x o−−>
11 <NUMNOTA>0</NUMNOTA>
12 <RECDESP>1</RECDESP>
13 <CODPARC>1</CODPARC>
14 <CODTIPOPER>421</CODTIPOPER>
15 <CODTIPTIT>1</CODTIPTIT>
16 <CODEMP>1</CODEMP>
17 <CODCENCUS>0</CODCENCUS>
18 <CODPROJ>0</CODPROJ>
19 <CODNAT>0</CODNAT>
20 <DTNEG>14/10/2015</DTNEG>
21 <DTVENC>01/12/2015</DTVENC>
22 <VLRDESDOB>2 5 0 . 2 5</VLRDESDOB>
23 <DESDOBRAMENTO>2</DESDOBRAMENTO>
24 <NUNOTA>103206</NUNOTA>
25 <ORIGEM>E</ORIGEM>
26 <PROVISAO>S</PROVISAO>
27 </ l o c a l F i e l d s>
28 </dataRow>
29 </ d a t a S e t>
30 </ requestBody>
31 </ s e r v i c e R e q u e s t>

Resposta bem sucedida:

Listing 17.4 – Test


1 <s e r v i c e R e s p o n s e serviceName=" CRUDServiceProvider . saveRecord "
s t a t u s=" 1 " p e n d i n g P r i n t i n g=" f a l s e " t r a n s a c t i o n I d=" ce27a42e −f8d7
−40c2 −902d−d 6 c 7 8 f 2 7 f 3 4 8 ">
2 <responseBody>
3 < e n t i t i e s t o t a l=" 1 ">
4 <e n t i t y>
5 < !−− Campo de chave p r i m á r i a f o i g e r a d o p e l o s i s t e m a e
r e t o r n a d o j u n t o com a s o u t r a s c o l u n a s . −−>
6 <NUFIN>5571</NUFIN>
7 < !−− v a r i a s c o l u n a s o m i t i d a s a q u i −−>
8 </ e n t i t y>
9 </ e n t i t i e s>
10 </ responseBody>
11 </ s e r v i c e R e s p o n s e>
# Principais campos

Nomedo campo Valor Descrição


NUMNOTA 0 Número da nota. Quando financeiro de nota/pe-
dido esse nro. é gerado na confirmação da nota e
atualizada no financeiro
RECDESP 1 1 = Receita, -1 = Despesa
CODPARC 1 Código do Parceiro. Se financeiro de nota/pedido,
esse código deve ser igual ao CODPARC da nota
CODTIPOPER 421 Cód. Tipo operação. Se financeiro de pedido/nota
,então deve ter o mesmo valor da nota/pedido.
CODTIPTIT 1 Cód. do Tipo de título (Dinheiro, cheque, cartão,
etc)
CODEMP 1 Cód. empresa. Se financeiro de pedido/nota então
a empresa deve ser a mesma da nota.
CODCENCUS 0 Cód. do Centro de resultados
CODPROJ 0 Cód. do Projeto
CODNAT 0 Cód. da Natureza de receitas/despesas
DTNEG 14/10/2015 Data da negociação. Se financeiro de nota/pedido
então deve ser a mesma data de neg. da nota
DTVENC 01/12/2015 Data de vencimento.
VLRDESDOB 250.52 Valor do titulo.
DESDOBRAMENTO 1 Nro. do desdobramento. Para financeiros de nota/-
pedidos esse nro deve ser sequencial começando por
1
NUNOTA 103206 Nro. único da nota com a qual esse titulo financeiro
está vinculado.
ORIGEM E Origem do titulo financeiro. E = Estoque (nota),
F = Financeiro avulso.
PROVISAO S Determina se o título é uma provisão financeira ou
um título real. S = Provisão, N = Real
18 Utilizando chamadas da classe SW-
ServiceInvoker

Juntamente com essa documentação enviamos uma classe java chamada


SWServiceInvoker. Ela foi criada pela necessidade de testar as chamadas de web-
sevice de forma prática e simples. Ela exemplifica como se deve fazer a conexão
com o sankhya-W, fazer a chamada do serviço de login e usar o JSESSIONID nas
proximas chamadas. É um exemplo de forma a facilitar o login, a chamada de
services e a criação e tratamento do xml de envio e resposta.
Lembrando que essa classe é apenas um exemplo e não é obrigatorio a sua
utilização. Poderia ser desenvolvida em qualquer outra linguagem como por exemplo
PHP. É apenas uma exemplificação e seu uso e alteração é de responsabilidade do
desenvolvedor da integração.
Para facilitar a utilização desses métodos, junto a API é possível encontrar
outros três arquivos:

1. SWService.jar : JAR para ser inserido no Classpath do projeto que utilizará


a API.

2. SWServiceInvoker.java : arquivo fonte com a classe implementada, que pode


ser utilizada como base para transcrever a API para outra linguagem.

3. Main.java : classe Main utilizada como exemplos de chamadas. As linhas 26


a 34 contêm as modificações necessárias para realizar os diferentes tipos de
acesso ao serviço.

18.1 Construtor
SWServiceInvoker(String enderecoServidor, String nomeUsuario, String
senha);
18.1.1 Parâmetros
enderecoServidor = URL base para o servidor, exemplo: http://192.168.1.120:8080
nomeUsuario = nome de usuário no Sankhya-W, exemplo: SUP
senha = senha de usuário em texto puro

18.2 O Método de Chamada do Serviço


public Document call(String nomeServico, String modulo, String corpoRe-
quisicao).
Ao chamar este método, a API se encarrega de executar o login com os
parâmetros informados ao instanciar o objeto, realiza a chamada do serviço, e
efetua o logout. Tal processo é realizado para cada chamada de serviço.

18.2.1 Parâmetros
nomeServico: nome do serviço a ser consumido, exemplo: crud.save
modulo: modulo do Sankhya-W onde o serviço está registrado, exemplo:
mge, mgecom
corpoRequisicao: fragmento de XML, em string, que corresponde ao corpo
da requisição do serviço

18.2.2 Retorno
O método retorna um org.w3c.dom.Document que contém a resposta
completa do serviço, assim é possível usar o XPaths para pegar os resultados que
interessam. A estrutura do XML resultante depende do serviço chamado.

18.2.3 Utilização
Para usar basta colocar o JAR em anexo no seu ClassPath.

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy