API de Servicos para Integracoes
API de Servicos para Integracoes
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.
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
3 SERVIÇO DE AUTENTICAÇÃO . . . . . . . . . . . . . . . . 15
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
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
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.
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.
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.
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
• Encoder para MD5 on-line (útil para gerar strings MD5 para alguns serviços)
http://www.danstools.com/md5-hash-generator
– 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).
# Parametros de chamada:
• NOMUSU
• INTERNO
• INTERNO2
Quando bem sucedido, o serviço retorna um ID que deverá ser usado nas
chamadas de serviço subsequentes.
# Detalhes do HTTP
Headers HTTP:
Content-Type: text/xml;charset=ISO-8859-1
Corpo da requisição (utilizando senha em texto aberto):
Cookie: JSESSIONID=3EB77969C9BDF0BF68A9D8F39E733142
# Tempo de sessão
# Erros
# Parametros do serviço
NENHUM
# Detalhes do HTTP
Corpo da requisição:
Para este caso é possível notar que Não Existe um Corpo.
Resposta:
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
4.1 crud.find
http[s]://[ip_do_servidor][:porta]/mge/service.sbr?
serviceName=crud.find&mgeSession=[JSESSIONID]
RequestBody:
ResponseBody:
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:
ResponseBody:
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:
# 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
# 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.
# Detalhes do HTTP
Headers HTTP:
• Content-Type: text/xml;charset=ISO-8859-1
# Exemplo de uso
Corpo da requisição:
# 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
# Detalhes do HTTP
• Content-Type: text/xml;charset=ISO-8859-1
Corpo da requisição:
Corpo da requisição:
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.
# Parâmetros de chamada
• <query>
Elemento XML com campos solicitados, filtro, etc. Cada subelemento está
detalhado no exemplo abaixo.
# Dados modificados
Headers HTTP:
• Content-Type: text/xml;charset=ISO-8859-1
• <TIPLANCNOTA>:Digitação na Nota ;
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”
# Parâmetros de chamada
• <dataSet>
Elemento XML com campos solicitados, filtro, etc. Cada subelemento está
detalhado no exemplo abaixo.
# Dados modificados
# Detalhes do HTTP
Headers HTTP:
• Content-Type: text/xml;charset=ISO-8859-1
# 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
# Transação
# Detalhes do HTTP
• Content-Type: text/xml;charset=ISO-8859-1
# Exemplo de uso:
Corpo de requisição:
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.
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
• Contas à Pagar;
• Contas à Receber;
• Contas Pagas;
• Contas Recebidas;
• Provisão de Receitas;
• Provisão de Despesas.
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.
• <nota>
# 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
# Exemplo de uso
Corpo da requisição:
# Parâmetros de chamada
• <dataSet>
Elemento XML com campos solicitados, filtro, etc. Cada subelemento está
detalhado no exemplo abaixo.
# Detalhes do HTTP
• Content-Type: text/xml;charset=ISO-8859-1
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.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.