Erro integração ERP - Envio de departamento

Boa tarde,

Estou realizando a integração da VTEX com meu ERP, ao testar o cadastro de departamentos, envio o seguinte XML, seguindo o modelo da documentação:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:vtex="http://schemas.datacontract.org/2004/07/Vtex.Commerce.WebApps.AdminWcfService.Contracts"><soapenv:Header/><soapenv:Body><tem:CategoryInsertUpdate> <tem:category> <vtex:Description>Departamento de testes</vtex:Description> <vtex:IsActive>true</vtex:IsActive> <vtex:Keywords>Departamento keywords</vtex:Keywords> <vtex:Name>Departamento teste</vtex:Name> <vtex:Title>Departamento teste</vtex:Title> </tem:category> </tem:CategoryInsertUpdate></soapenv:Body></soapenv:Envelope>

Porém recebo a seguinte resposta:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <s:Fault> <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode> <faultstring xml:lang="pt-BR">Data is Null. This method or property cannot be called on Null values.</faultstring> <detail> <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <HelpLink i:nil="true"/> <InnerException i:nil="true"/> <Message>Data is Null. This method or property cannot be called on Null values.</Message> <StackTrace>Server stack trace: at System.Data.SqlClient.SqlBuffer.get_Int32() at Vtex.Commerce.CatalogSystem.DataStore.SqlServer.CategoryDalc.GetMaxId() in F:\BuildAgent\work\67af720f163d9625\src\Catalog System\Vtex.Commerce.CatalogSystem.DataStore\SqlServer\Generated\CategoryDalc.cs:line 352 Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Vtex.Commerce.CatalogSystem.CategoryFactory.GetMaxId() at Vtex.Commerce.WebApps.AdminWcfService.Service.CategoryInsertUpdate(CategoryDTO category) in F:\BuildAgent\work\67af720f163d9625\src\Web Applications\Vtex.Commerce.WebApps.AdminWcfService\Service.svc.cs:line 3511 at SyncInvokeCategoryInsertUpdate(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace> <Type>System.Data.SqlTypes.SqlNullValueException</Type> </ExceptionDetail> </detail> </s:Fault> </s:Body> </s:Envelope>

O mesmo ocorre testando pelo SoapUI. Alguém saberia dizer o que posso estar fazendo de errado? Desde já agradeço.

@Bruno Almeida​ Estranho, testei enviar esse mesmo XML num ambiente, pelo Postman, e funcionou. Não consegui identificar algum erro na sua requisição...

@Eduardo Gomes​ antes de mais nada obrigado pela atenção.

Eu testei pelo Postman também, ocorreu o mesmo erro que no SoapUI e no meu código de integração. Segue algumas informações a mais:

A URL que estou utilizando é: http://webservice-lojainfox.vtexcommerce.com.br/AdminWebService/Service.svc?wsdl

Estou definindo também a SOAPAction assim: http://tempuri.org/IService/CategoryInsertUpdate

Utilizando Basic Authentication, o usuário que estou usando possui a role webservice no meu License Manager.

OBS: Meu ambiente é novo, apenas para integração, não tenho nada cadastrado nele ainda, por isso estou começando os testes agora, só testei o envio de departamentos e já ocorreu este erro, não testei qualquer outro envio além de departamentos ainda.

@Bruno Almeida​ Parece-me tudo certo com os passos que seguiu. Tentei mais uma vez com seu XML e foi. Inseriu os headers desta forma? https://snag.gy/3gBkCu.jpg

Para referência, quando cadastro categorias via Postman, parto do XML abaixo. Por ser departamento, excluo a linha FatherCategoryId e o ID, se não precisar forçar, pode excluir também.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:vtex="http://schemas.datacontract.org/2004/07/Vtex.Commerce.WebApps.AdminWcfService.Contracts"><soapenv:Header/><soapenv:Body><tem:CategoryInsertUpdate><!--Optional:--><tem:category><!--Optional:--><vtex:Description>{{vtexDescription}}</vtex:Description><!--Optional:--><vtex:FatherCategoryId>{{vtexFatherCategoryId}}</vtex:FatherCategoryId><!--Optional:--><vtex:Id>{{vtexId}}</vtex:Id><!--Optional:--><vtex:IsActive>{{vtexIsActive}}</vtex:IsActive><!--Optional:--><vtex:Name>{{vtexName}}</vtex:Name><!--Optional:--><vtex:Title>{{vtexTitle}}</vtex:Title></tem:category></tem:CategoryInsertUpdate></soapenv:Body> </soapenv:Envelope>

Detalhe: não sei se faz diferença, mas utilizo a URL http://webservice-loja.vtexcommerce.com.br/Service.svc?wsdl

@Eduardo Gomes​ , segue um print de como estou fazendo a requisição no Postman:https://snag.gy/U19P3C.jpg

Pelo que eu vi a diferença é que no header você mandou a propriedade authentication duas vezes, eu coloquei meu usuário e senha na aba Authorization do Postman como Basic Authentication, mas acho que não é este o problema pois quando informo uma senha errada ele retorna status 401.

@Eduardo Gomes​ , testei com o endpoint no formato que você passou, apenas mudando para o meu ACCOUNT-NAME, porém obtive o mesmo erro. Fiquei na dúvida apenas referente a parte de autenticação que você informou no header do Postman, gerou duas propriedades authentication com dados diferentes aparentemente.

Aparentemente o que está acontecendo não é nem um erro de comunicação, e sim uma exceção da aplicação, vendo por essa parte:

Server stack trace: at System.Data.SqlClient.SqlBuffer.get_Int32() at Vtex.Commerce.CatalogSystem.DataStore.SqlServer.CategoryDalc.GetMaxId() in F:\BuildAgent\work\67af720f163d9625\src\Catalog System\Vtex.Commerce.CatalogSystem.DataStore\SqlServer\Generated\CategoryDalc.cs:line 352

Sabe o que poderia ser?

Bom dia,

Consegui resolver simplesmente forçando o cadastro do Id com a tag:

<vtex:Id>{{vtexId}}</vtex:Id>

Pela documentação, vi que a plataforma gera o Id, porém eu não tinha nenhum departamento cadastrado ainda. Pelo erro apresentado, imagino que ele tenha tentado pegar o máximo Id cadastrado para gerar o próximo, e como não tinha nenhum, ocorreu erro ao tentar converter Null para Int32. Ao forçar o cadastro do Id, funciona normalmente. Porém vejo isto como sendo um bug da plataforma.

Obrigado pela atenção

@Bruno Almeida​ Oi Bruno, bom dia!

Que ótimo, confesso não sabia dessa também, vamos aprendendo sempre. Acho válido reportar para a VTEX, podem abrir um artigo nos Problemas Conhecidos.

Qualquer dúvida, fico à disposição. até mais