22593 - Integração Financeira ERP - Processar": Processo "xxxxxxx" não encontrado
Problema: A conexão com o ERP ocorre com sucesso, os CIF´s foram cadastrados, os dados são retornados do ERP com sucesso.
Porém, ao enviar uma integração financeira, a tela de ACOMPANHAMENTO fica ZERADA, sem nenhuma informação relativa ao processo.


Solução: Foi identificado um parâmetro do Banco SQL Server, denominado XACT_ABORT, que gera esta inconsistência. Este parâmetro, segundo a documentação da Microsoft, tem o seguinte comportamento:
- Especifica se o SQL Server reverte automaticamente a transação atual quando uma instrução Transact-SQL gera um erro em tempo de execução.
Fonte: http://msdn.microsoft.com/pt-br/library/ms188792.aspx
Por padrão este recurso vem OFF (desligado). Porém, nesta situação identificamos que o mesmo estava configurado como ON.
Um teste que pode ser efetuado com este comando é o seguinte:
CREATE TABLE TestingTransactionRollbacks (
ID INT NOT NULL PRIMARY KEY ,
SomeDate DATETIME DEFAULT GETDATE()
) ;
GO
/**Usar aqui conforme o teste desejado
Porém, ao enviar uma integração financeira, a tela de ACOMPANHAMENTO fica ZERADA, sem nenhuma informação relativa ao processo.

Ao consultar o log do Glassfish, apresenta mensagem de Ocorreu um erro ao executar o serviço AP - Integração Financeira ERP - Processar: Processo INTFIN20181101091120 não encontrado. Verifique!
A mesma mensagem é apresentada na tela de Recursos > Web Services > Console ao clicar com botão direito em Visualizar Erro:

Rotina / Tela: Integração ERP > Integração Financeira
Solução: Foi identificado um parâmetro do Banco SQL Server, denominado XACT_ABORT, que gera esta inconsistência. Este parâmetro, segundo a documentação da Microsoft, tem o seguinte comportamento:
- Especifica se o SQL Server reverte automaticamente a transação atual quando uma instrução Transact-SQL gera um erro em tempo de execução.
Fonte: http://msdn.microsoft.com/pt-br/library/ms188792.aspx
Por padrão este recurso vem OFF (desligado). Porém, nesta situação identificamos que o mesmo estava configurado como ON.
Um teste que pode ser efetuado com este comando é o seguinte:
CREATE TABLE TestingTransactionRollbacks (
ID INT NOT NULL PRIMARY KEY ,
SomeDate DATETIME DEFAULT GETDATE()
) ;
GO
/**Usar aqui conforme o teste desejado
SET XACT_ABORT ON
Ou
SET XACT_ABORT OFF
GO*/
BEGIN TRANSACTION
-- sucesso
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (1)
--Falha pois tenta inserir um valor null numa coluna não nula
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (NULL)
-- sucesso
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (2)
-- falha por chave duplicada
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (2)
-- sucesso
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (3)
COMMIT TRANSACTION
GO
SELECT ID, SomeDate FROM TestingTransactionRollbacks
//**
O select acima com XACT_ABORT ON, retorna 0 linhas, pois na falha por valor null faz rollback e interrompe a execução.
Utilizando o XACT_ABORT OFF retorna 3 linhas, que são as que funcionaram
*/
GO
DROP TABLE TestingTransactionRollbacks
---------------------------------------------------
Ou
SET XACT_ABORT OFF
GO*/
BEGIN TRANSACTION
-- sucesso
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (1)
--Falha pois tenta inserir um valor null numa coluna não nula
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (NULL)
-- sucesso
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (2)
-- falha por chave duplicada
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (2)
-- sucesso
INSERT INTO TestingTransactionRollbacks (ID)
VALUES (3)
COMMIT TRANSACTION
GO
SELECT ID, SomeDate FROM TestingTransactionRollbacks
//**
O select acima com XACT_ABORT ON, retorna 0 linhas, pois na falha por valor null faz rollback e interrompe a execução.
Utilizando o XACT_ABORT OFF retorna 3 linhas, que são as que funcionaram
*/
GO
DROP TABLE TestingTransactionRollbacks
---------------------------------------------------