Passo a passo: | Dica |
---|
| - Esta documentação tem como base a documentação do time de Desenvolvimento: Integração | Protheus x Quírons
- Os teste foram realizados com a ferramenta SOAPUI, porém pode ser realizado com o Postman ou qualquer outra ferramenta de mercado
|
Para realizar a integração, vamos precisar seguir alguns passos: Deck of Cards |
---|
| Card |
---|
label | 1. Configurando o Rest |
---|
| A integração entre o Protheus e o Quirons acontece atravás de arquivos Json, para que essa troca funcione precisamos de um serviço de REST configurado. A documentação oficial sobre a criação do REST, disponibilizada pela TOTVS se encontra em: Como criar um serviço REST no protheus Caso não tenha facilidade nesta etapa veja um vídeo do processo: Configurando o REST |
Card |
---|
label | 2. Configurando o SOAP UI |
---|
| O SOAPUI é uma ferramenta de mercado onde conseguimos simular o envio do Xml/Json na integração via Mensagem Única, simulando outros sistemas integrando com o Protheus. Ou seja, ao invés de termos que instalar o outro sistema e aprender como fazer o processo nele, nós pegamos um Xml/Json e enviamos para o Protheus usando esta ferramenta. Link para baixar o Soap: https://www.soapui.org/downloads/latest-release/
Veja detalhes sobra o uso e a configuração do SOAPUI neste vídeo: Configurando o SOAPUI Dica |
---|
| - A API RESTful é uma interface que dois sistemas usam para trocar informações de forma segura pela internet.
- Os Métodos existentes em uma API são como as ações que esta API permite que sejam realizadas através dela:
- DELETE: Método específico para remoção de dados, ou seja, permite deletar dados através da API;
- GET: Método para uma requisição que busca dados, ou seja, ele é usado para consultar dados através da API, não altera informações, apenas as carrega;
- POST: Método para uma requisição que envia dados, ou seja, é usado para inserir informações através da API;
- PUT: Método para atualização de dados, pode ser utilizado quando se deseja atualizar uma informação já existente.
|
|
Card |
---|
label | 03. Informações Complementares |
---|
| Nesta guia, gostaria de passar informações importantes do processo de integração que podem te ajudar na análise das ocorrências e na configuração das integrações: |
Card |
---|
label | 04. Testando o Recebimento |
---|
| Vamos chamar aqui de Recebimento as mensagens que são enviadas do Quirons para o Protheus. Precisamos seguir uma sequencia para podermos realizar as integrações: Deck of Cards |
---|
id | Recebimento de Mensagens |
---|
| Card |
---|
label | 1. Unidade de Medida |
---|
| Para que possamos realizar a integração do Produto e, posteriormente, das requisições e movimentações dele, é preciso termos integrado a Unidade de Medida. O adapter da Unidade de Medida é o "UNITOFMEASURE" (QIEA030). Abaixo temos o exemplo do Json e as Tags mais importantes:
Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"UNITOFMEASURE",
"StandardVersion":"1.000",
"Version":"2.002",
"UUID":"99b01fde-72a2-4c27-afbc-fe64e6afe94e",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T13:27:56Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"Code":"Q5",
"ShortName":"UNIDADE M",
"InternalId":"99|01|Q5",
"Description":"UNIDADE QUIRONS"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | Code | Código da Unidade de Medida (AH_UNIMED) | ShortName | Nome da Unidade de Medida (AH_UMRES) | InternalId | Id de identificação do Registro (XXF_EXTVAL) | Description | Descrição em Português da Unidad de Medida (AH_DESCPO) |
|
Agora vamos testar a integração da Unidade de Medida: Unidade de Medida | "UNITOFMEASURE" (QIEA030) |
Card |
---|
| Outro cadastro básico necessário para a integração é o do local de estoque (Armazém). O adapter do Armazém é o "WAREHOUSE" (AGRA045). Abaixo temos o exemplo do Json e as Tags mais importantes:
Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"WAREHOUSE",
"StandardVersion":"1.000",
"Version":"1.000",
"UUID":"4848af38-5962-d1c1-faeb-cfad85908058",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T13:44:20Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"BranchId":"01",
"Code":"33",
"Active":"true",
"Type":"1",
"Purpose":1,
"WarehouseClassification":"3",
"Event":"upsert",
"InternalId":"99|01|33",
"WorkCenterCode":" ",
"CompanyId":"99",
"StandardWarehouse":2,
"Entity":"WAREHOUSE",
"CompanyinternalId":"99|01",
"Description":"QUIRONS"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | Code | Código do Armazém (NNR_CODIGO) | Type | Tipo do Armazém (NNR_TIPO) | InternalId | Id de identificação do Registro (XXF_EXTVAL) | Description | Descrição do Armazém (NNR_DESCRI) |
|
Agora vamos testar a integração do Local de Estoque (Armazém): Local de Estoque | "WAREHOUSE" (AGRA045) |
Card |
---|
| Vamos agora para o cadastro principal necessário para a integração que é o Cadastro de Produto (MATA010). O adapter do Cadastro de Produto é o "ITEM" (MATA010). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"BusinessUnit":"",
"ProductName":"PROTHEUS",
"Transaction":"ITEM",
"Version":"4.005",
"UUID":"989bd96b-e333-0b74-f6da-2ac8d4c7f625",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T13:49:25Z",
"BranchId":"01",
"DeliveryType":"sync",
"Type":"BusinessMessage",
"CompanySharingMode":"",
"BusinessUnitySharingMode":"",
"StandardVersion":"1.000",
"BranchSharingMode":"",
"SubType":"event",
"Enterprise":"",
"SourceApplication":"QUIRONS",
"ProductVersion":"12"
},
"Content":{
"ItemStatus":"2",
"StandardWarehouseInternalId":"99|01|33",
"ItemTitle":" ",
"ItemWidth":"0",
"CompanyId":"99",
"UnitOfMeasureCode":"Q5",
"Code":"QUIRONS01",
"FiscalInformation":{
"CsllAliquot":"0",
"IrrfIncidence":"false",
"IssServiceCode":" ",
"PisRetaining":"false",
"CsllRetaining":"false",
"PisAliquot":"0",
"CofinsAliquot":"0",
"TaxSubstitutionCode":" ",
"CofinsRetaining":"false",
"IssAliquot":"0",
"MunicipalTaxCod":" "
},
"ItemLenght":"0",
"EconomicLot":"0",
"Name":"PRODUTO QUIRONS 01",
"MinimumLot":"0",
"ManufacturerCode":" ",
"ItemHeight":"0",
"NetWeight":"0",
"Values":{
"CostPrice":"0",
"SalesPrice":"0",
"AverageCostPrice":"0",
"StandardCostPrice":"0"
},
"Brand":"",
"ShortName":"PRODUTO QUIRONS 01",
"Active":"1",
"MultiplicationFactorValue":"0",
"CompanyinternalId":"99|01",
"InternalId":"99|01|QUIRONS01",
"ProductType":"10",
"GrossWeight":"0",
"ItemFeaturesTechnical":"",
"ItemDescription":"",
"ItemDimensions":"0",
"BranchId":"01",
"UnitOfMeasureInternalId":"99|01|Q5",
"StandardWarehouseDescription":"QUIRONS",
"TypeUMConversion":[
{
"type":"M",
"Description":"Multiplicador"
}
],
"StandardWarehouseCode":"33",
"Trail":"N",
"BinControl":"False",
"Origin":""
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | StandardWarehouseInternalId | Id externo do Armazém (XXF_EXTVAL) a ser preenchido no Produto (B1_LOCPAD) | StandardWarehouseDescription | Descriação do Armazém | StandardWarehouseCode | Código do Armazém | UnitOfMeasureCode | Código da Unidadde de Medida | UnitOfMeasureInternalId | Id externo da Unidade de Medida (XXF_EXTVAL) a ser preenchida no Produto (B1_UM) | Code | Código do Produto (B1_COD) | Name / ShortName | Descrição do Produto | InternalId | Internal Id do Produto |
|
Agora vamos testar a integração do Cadastro do Produto: Cadastro do Produto | "ITEM" (MATA010) |
Card |
---|
label | 4. Requisição de Armazém |
---|
| Agora vamos para para nossa primeira movimentação na integração que é a Requisição ao Armazém (MATA105) O adapter da Requisição é o "REQUEST" (MATA105). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"BranchId":"01",
"CompanyId":"99",
"DeliveryType":"Sync",
"Event":"upsert",
"GeneratedOn":"2022-04-20T11:37:53Z",
"ProductName":"PROTHEUS",
"ProductVersion":"1.0.0",
"SourceApplication":"QUIRONS",
"StandardVersion":"1.000",
"Type":"BusinessMessage",
"SubType":"event",
"UUID":"4d5f50b0-b423-11ec-9191-33b31221ae01",
"BranchSharingMode":"",
"BusinessUnitySharingMode":"",
"CompanySharingMode":"",
"Version":"1.009",
"Transaction":"REQUEST"
},
"Content":{
"Code":"",
"InternalId":"4d4cda20-b423-11ec-9191-33b17223ae01",
"CompanyId":"99",
"BranchId":"01",
"Number":"",
"RegisterDateTime":"2022-04-20T11:37:53Z",
"CompanyInternalId":"99|01",
"DeliveryDateTime":"2022-04-20T11:37:53Z",
"UserRequesterCode":"[email protected]",
"UserRequesterInternalId":"Estoque",
"Type":"001",
"ListOfRequestItem":[
{
"Event":"upsert",
"CostCenterCode":"01",
"Code":"01",
"InternalId":"4d1ace18-b423-11ec-b337-d3c1947b8001",
"DeliveryDateTime":"2022-04-20T11:37:53Z",
"ItemInternalid":"99|01|QUIRONS01",
"Quantity":"1",
"TotalPrice":"1",
"UnitPrice":"1",
"UnitOfMeasureInternalId":"99|01|Q5",
"WarehouseInternalId":"99|01|33",
"Observation":"Lorem ipsum dolor sit amet"
},
{
"Event":"upsert",
"CostCenterCode":"02",
"Code":"02",
"InternalId":"4d1e28f6-b423-11ec-b337-c18a880fb401",
"DeliveryDateTime":"2022-04-20T11:37:53Z",
"ItemInternalid":"99|01|QUIRONS01",
"Quantity":"1",
"TotalPrice":"1",
"UnitPrice":"1",
"UnitOfMeasureInternalId":"99|01|Q5",
"WarehouseInternalId":"99|01|33",
"Observation":"Lorem ipsum dolor sit amet"
}
]
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | Content > InternalId | Id externo da Solicitação (XXF_EXTVAL) que fará o De/Para com o campo CP_NUM | UserRequesterCode | Usuário que realizou a requisição (CP_SOLICIT) | UserRequesterInternalId | Id interno do Solicitante, o sistema vai absorver o código do usuário que está acessando o Rest (CP_CODSOLI) | CostCenterCode | Código do Centro de Custo (CP_CC) | CostCenterCode > InternalId | Id externo do Centro de Custo (XXF_EXTVAL) que fará o De/Para com o campo CP_CC | ItemInternalid | Id externo do Cadastro do Produto (XXF_EXTVAL) que fará o De/Para com o campo CP_PRODUTO | UnitOfMeasureInternalId | Id externo da Unidade de Medida (XXF_EXTVAL) a ser preenchida na Requisição (CP_UM) | WarehouseInternalId | Id externo do Armazém (XXF_EXTVAL) a ser preenchido na Requisição (CP_LOCAL) | Observation | Observação a ser preenchida no campo CP_OBS |
|
Agora vamos testar a integração da Requisição ao Armazém: Requisição ao Armazém | "REQUEST" (MATA105) |
Card |
---|
label | 5. Movimentação Interna |
---|
| Vamos agora para a nossa próxima movimentação na integração que é a Movimentação Interna (MATA241) O adapter da Movimentação é o "STOCKTURNOVER" (MATA241). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"STOCKTURNOVER",
"StandardVersion":"1.000",
"Version":"1.000",
"UUID":"63f4edf9-2f90-9e14-dc40-a05f25109e03",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T14:52:06Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"Number":"",
"Series":" ",
"BranchId":"01",
"Code":"TESTE00",
"Type":"S",
"MovementTypeCode":"599",
"DocumentType":"R",
"ListOfStockTurnoverItem":[
{
"NumberSeries":"",
"ItemReferenceCode":"QUIRONS01",
"UnitPrice":1,
"LotExpirationDate":"",
"InternalId":"99|01|TESTE00|107528",
"ItemInternalId":"99|01|QUIRONS01",
"UnitOfMeasureCode":"Q5",
"ProjectInternalId":"",
"WarehouseCode":"33",
"RequestItemInternalId":"99|01|PMS119|01|20220420",
"CostCenterCode":"01",
"Observation":"",
"LotOrSerialNumber":"",
"UnitOfMeasureInternalId":"99|01|Q5",
"Code":"TESTE00",
"ItemCode":"QUIRONS01",
"WarehouseInternalId":"99|01|33",
"DeliveryDateTime":"2022-04-20",
"CostCenterInternalId":"4d1ace18-b423-11ec-b337-d3c1947b8001",
"AccountantAcountInternalId":"",
"BinLocation":"",
"TaskInternalId":"",
"EmissionDate":"2022-04-20",
"TotalPrice":1,
"Quantity":1,
"TotalStock":100
},
{
"NumberSeries":"",
"ItemReferenceCode":"QUIRONS02",
"UnitPrice":1,
"LotExpirationDate":"",
"InternalId":"99|01|TESTE00|107529",
"ItemInternalId":"99|01|QUIRONS02",
"UnitOfMeasureCode":"M2",
"ProjectInternalId":"",
"WarehouseCode":"38",
"RequestItemInternalId":"99|01|PMS119|02|20220420",
"CostCenterCode":"02",
"Observation":"",
"LotOrSerialNumber":"",
"UnitOfMeasureInternalId":"99|01|M2",
"Code":"TESTE00",
"ItemCode":"QUIRONS02",
"WarehouseInternalId":"99|01|38",
"DeliveryDateTime":"2022-04-20",
"CostCenterInternalId":"99|01|02",
"AccountantAcountInternalId":"",
"BinLocation":"",
"TaskInternalId":"",
"EmissionDate":"2022-04-20",
"TotalPrice":1,
"Quantity":1,
"TotalStock":100
}
],
"DeliveryDateTime":"2022-04-20",
"InternalId":"99|01|TESTE00|107528",
"CompanyId":"99",
"RegisterDateTime":"2022-04-20",
"CompanyInternalId":"99|01",
"AbatementDateTime":"2022-04-20"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | CostCenterCode | Código do Centro de Custo (D3_CC) | CostCenterInternalId | Id externo do Centro de Custo (XXF_EXTVAL) que fará o De/Para com o campo D3_CC | ItemInternalid | Id externo do Cadastro do Produto (XXF_EXTVAL) que fará o De/Para com o campo D3_COD | UnitOfMeasureInternalId | Id externo da Unidade de Medida (XXF_EXTVAL) a ser preenchida na Movimentação (D3_UM) | WarehouseInternalId | Id externo do Armazém (XXF_EXTVAL) a ser preenchido na Movimentação (D3_LOCAL) |
|
Agora vamos testar a integração da Movimentação Interna: Movimentação Interna | "STOCKTURNOVER" (MATA241) |
Card |
---|
| Vamos agora para a rotina de Saldo Atual (MATA225) O adapter da Movimentação é o "STOCKLEVEL" (MATA225). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"STOCKLEVEL",
"StandardVersion":"1.000",
"Version":"3.004",
"UUID":"48997d98-0480-0109-f17e-1fc7d8c844b0",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T14:35:21Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"BranchId":"01",
"Active":"true",
"ListOfReturnItem":[
{
"CurrentStockAmount":"98",
"ReserveSource":" ",
"FutureStockAmount":"0",
"ValueOfCurrentStockAmount":"98",
"ListOfAddressStock":{
},
"CompanyId":"99",
"ItemInternalId":"99|01|QUIRONS01",
"AvailableStockAmount":"98",
"BookedStockAmount":"0",
"Amountcommittedstock":"0",
"UnitItemCost":"1",
"UnitOfMeasureInternalId":"99|01|Q5",
"BranchId":"01",
"TransitStockAmount":"0",
"CompanyInternalId":"99|01",
"AverageUnitItemCost":"98",
"SalesOrderQuantity":"0",
"ListOfWarehouseStock":[
{
"WarehouseInternalId":"99|01|33",
"CurrentStockAmount":"98",
"TransitStockAmount":"0",
"FutureStockAmount":"0",
"UnitItemCost":"1",
"ValueOfCurrentStockAmount":"98",
"AvailableStockAmount":"98",
"BookedStockAmount":"0",
"AverageUnitItemCost":"98",
"SalesOrderQuantity":"0",
"Amountcommittedstock":"0"
}
],
"ListOfLotStock":{
},
"ListOfSeriesStock":{
}
}
],
"Event":"upsert",
"CompanyId":"99",
"CompanyinternalId":"99|01",
"Entity":"StockLevel"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | CurrentStockAmount | B2_QATU | FutureStockAmount | B2_QACLASS | ValueOfCurrentStockAmount | B2_VATU1 | ListOfAddressStock | Lista dos endereços dos produtos (Caso utilize Endereçamento) | AvailableStockAmount | Estoque Disponível | BookedStockAmount | B2_RESERVA | Amountcommittedstock | B2_QEMP | UnitItemCost | B2_CM1 | AverageUnitItemCost | B2_VATU1 | SalesOrderQuantity | B2_QPEDVEN |
|
|
|
|
|
|