Mudanças entre as edições de "Novo sincronismo"
| Linha 140: | Linha 140: | ||
GO | GO | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | USE [bd_ssm_hugocini] | ||
| + | GO | ||
| + | |||
| + | /****** Object: UserDefinedFunction [dbo].[fn_STRING_JSON] Script Date: 10/11/2016 17:11:51 ******/ | ||
| + | SET ANSI_NULLS ON | ||
| + | GO | ||
| + | |||
| + | SET QUOTED_IDENTIFIER ON | ||
| + | GO | ||
| + | |||
| + | CREATE FUNCTION [dbo].[fn_STRING_JSON](@ID_VENDEDOR int, @DT_LAST_SINC datetime, @FN VARCHAR(256) ) | ||
| + | RETURNS VARCHAR(MAX) | ||
| + | BEGIN | ||
| + | --DECLARE @ID_VENDEDOR int = 99 | ||
| + | --DECLARE @DT_LAST_SINC datetime = NULL | ||
| + | --DECLARE @FN varchar(256) = 'fn_REGISTRO_SYNC_VALIDADE_TJ' | ||
| + | |||
| + | DECLARE @LIN INT = 0 | ||
| + | DECLARE @I INT | ||
| + | DECLARE @NAME VARCHAR(256) | ||
| + | DECLARE @system_type_id tinyint | ||
| + | DECLARE @CMD VARCHAR(MAX) = ' SELECT ''{''' | ||
| + | DECLARE @AUX TABLE ( | ||
| + | NAME VARCHAR(256), | ||
| + | LIN SMALLINT, | ||
| + | system_type_id tinyint | ||
| + | ) | ||
| + | |||
| + | INSERT INTO @AUX | ||
| + | SELECT C.NAME, | ||
| + | ROW_NUMBER() OVER(ORDER BY C.column_id) LIN, | ||
| + | C.system_type_id | ||
| + | FROM SYS.objects O | ||
| + | INNER JOIN SYS.COLUMNS C ON C.OBJECT_ID = O.OBJECT_ID | ||
| + | WHERE O.NAME = @FN | ||
| + | |||
| + | SET @I = ISNULL((SELECT MAX(LIN) FROM @AUX),0) | ||
| + | |||
| + | WHILE @I > @LIN | ||
| + | BEGIN | ||
| + | |||
| + | SET @LIN = @LIN + 1 | ||
| + | |||
| + | SELECT @NAME = NAME, @system_type_id = system_type_id | ||
| + | FROM @AUX | ||
| + | WHERE LIN = @LIN | ||
| + | |||
| + | SET @CMD = @CMD + ' + | ||
| + | CASE WHEN '+ @NAME +' IS NOT NULL THEN | ||
| + | ''"'+lower(@NAME)+'"'' + '':"'' + ' + | ||
| + | case when @system_type_id = 61 then | ||
| + | 'convert(varchar, ' + @NAME + ', 126)' | ||
| + | else | ||
| + | 'replace(cast('+@NAME+' as varchar) collate SQL_Latin1_General_CP1_CI_AI, ''"'', ''\"'')' | ||
| + | end | ||
| + | + ' + ''",'' | ||
| + | ELSE '''' | ||
| + | END ' | ||
| + | |||
| + | END | ||
| + | |||
| + | |||
| + | |||
| + | SET @CMD = @CMD + '+''}'' as json FROM ' + @FN + '('+CONVERT(VARCHAR(30),@ID_VENDEDOR)+','+ ISNULL(quotename(convert(varchar, @DT_LAST_SINC, 126),char(39)),'NULL')+')' | ||
| + | |||
| + | |||
| + | RETURN @CMD | ||
| + | END | ||
| + | |||
| + | GO | ||
</pre> | </pre> | ||
Edição das 13h29min de 25 de janeiro de 2017
O novo sincronismo é uma estratégia de marcação horizontal de dados, envio flexível e otimizado para compactação.
O nome do projeto do novo sincronismo é TamoJunto.
Ambiente de teste/beta
O host do TamoJunto é o host do beta. Na versão 4.0.1 4.0.2 4.0.3 4.0.6, o mesmo host usado para o SyncServer será usado para o TamoJunto, de tal sorte que o usuário não precisará entrar com dados novos no momento do sincronismo, e a porta está fixada como 8015 sempre.
No ambiente beta, existe um SyncServer e um TamoJunto configurado. O endereço do host é beta.softsitemobile.com, a porta do SyncServer é 8016.
A base HugoCini2 está configurada devidamente para o novo sincronismo.
Teste comparativo
A versão básica para comparação é a 3.22.9. Ela é a base para ver se tem algum dado faltoso ou se tem algum comportamento distinto.
Por hora, a única tabela que está no novo esquema é ORG_VENDA_CLIENTE
Criando novos ambientes
O primeiro passo no novo sincronismo é subir o servidor do TamoJunto na porta 8015. O TamoJunto roda sobre o Java 7, homologado no container Tomcat 8.
Cadastro de novas empresas
Dado um ambiente conhecido (no caso, Ares), vamos colocar uma empresa para esse novo sincronismo.
O primeiro ponto é travar totalmente a base. Importação, Claudus, Portal e qualquer outro serviço precisa ser parado para essa base, TOTALMENTE.
Aplique o script de migração na base. Então faça as verificações de que tudo está no canto.
Depois dessa migração, religue TODOS os sistemas.
Cadastre a versão 4.0.3 para sincronizar (ou a última versão 4.x.y) para a empresa. Coloque para sincronizar as tabelas desejadas. As tabelas disponíveis são:
ORG_VENDA_CLIENTE
Códigos de erro
Ao terminar um sincronismo mal sucedido, o sincronismo do TamoJunto lança um código na tela do usuário. O código tem o seguinte formato: IXHHH. A parte I se refere ao instante, a parte X se refere ao erro lançado, e a parte HHH se refere ao retorno HTTP.
Os possíveis valores pra I são:
- 1 : autenticação
/auth - 2 : sincronismo
/sync - 3 : truncagem
/truncate - 8 : desconhecido
- 9 : não relacionado ainda
Os possíveis valores pra X são:
- 0 : erro de IO
- 1 : erro de HTTP; o código HTTP de erro segue na parte
HHH - 2 : erro de host
- 3 : erro de SQL
- 9 : erro desconhecido
Os códigos de erro HTTP podem ser encontrados na página da Wikipedia, ou então tem ainda uma lista rápida com gatos.
Caso alguma chamada do TamoJunto retorne um código HTTP diferente de 200, o protocolo reconhece como erro.
Os erros HTTP mais comuns (e seus respectivos significados comuns) retornados pelo TamoJunto são:
- 000 : possivelmente não se conectou num servidor HTTP?
- 400 : o dispositivo falhou ao montar a requisição; deve-se contatar imediatamente o Anderson e reportar essa problema; também pode ser um sinal de que o usuário esqueceu de preencher o ID palm ou a senha
- 401 : erro de usuário e senha; o ID palm não confere com a senha para aquela empresa, ou o usuário colocou um ID palm errado
- 404 : empresa não cadastrada
- 500 : internal server error; deve-se contatar imediatamente o Anderson e reportar essa problema
Passo a passo migração para o novo Sincronismo
- Passo 1
- Executar os seguintes scripts
CREATE TABLE [dbo].[TAMOJUNTO_TABELA_FUNCAO]( [ID] [int] IDENTITY(-2147483648,1) PRIMARY KEY NOT NULL, [NM_TABLE] [varchar](256) NOT NULL, [NM_FN] [varchar](256) NOT NULL, [FL_ATIVA] [bit] NULL )
CREATE TABLE [dbo].[tamojunto_auth]( [cd_vendedor] [int] NOT NULL, [token] [varchar](255) NULL, [dt_criacao] [datetime] NULL, [dt_validade] [datetime] NULL )
CREATE TABLE [dbo].[tamojunto_data_geracao_registro]( [id] [int] IDENTITY(-2147483648,1) PRIMARY KEY NOT NULL, [dt_geracao] [datetime] NOT NULL, [cd_vendedor] [int] NOT NULL )
--USE [bd_ssm_hugocini]
GO
/****** Object: StoredProcedure [dbo].[sp_get_auth_token] Script Date: 10/11/2016 17:15:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
if exists (select top 1 1 from sys.sysobjects where name = 'sp_get_auth_token')
begin
drop proc [sp_get_auth_token]
end
go
CREATE PROCEDURE [dbo].[sp_get_auth_token] (@id_palm CHAR(10),
@ds_senha VARCHAR(20))
AS
BEGIN
;WITH mysource
AS (SELECT dv.cd_vendedor,
substring(convert(varchar, hashbytes('SHA1', Cast(dv.cd_vendedor AS VARCHAR)
+ CONVERT(VARCHAR, Getdate(), 126)), 1), 3, 128) AS token,
Getdate() AS dt_criacao,
Dateadd(hh, 1, Getdate()) AS dt_validade
FROM dados_vendedor dv
LEFT JOIN tamojunto_auth tau
ON ( dv.cd_vendedor = tau.cd_vendedor )
WHERE dv.id_palm = @id_palm
AND dv.ds_senha = @ds_senha)
MERGE tamojunto_auth AS mytarget
using mysource
ON mysource.cd_vendedor = myTarget.cd_vendedor
WHEN matched THEN
UPDATE SET token = mysource.token,
dt_criacao = mysource.dt_criacao,
dt_validade = mysource.dt_validade
WHEN NOT matched THEN
INSERT ( cd_vendedor,
token,
dt_criacao,
dt_validade )
VALUES ( mysource.cd_vendedor,
mysource.token,
mysource.dt_criacao,
mysource.dt_validade )
output mysource.token;
END
GO
USE [bd_ssm_hugocini]
GO
/****** Object: UserDefinedFunction [dbo].[fn_STRING_JSON] Script Date: 10/11/2016 17:11:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_STRING_JSON](@ID_VENDEDOR int, @DT_LAST_SINC datetime, @FN VARCHAR(256) )
RETURNS VARCHAR(MAX)
BEGIN
--DECLARE @ID_VENDEDOR int = 99
--DECLARE @DT_LAST_SINC datetime = NULL
--DECLARE @FN varchar(256) = 'fn_REGISTRO_SYNC_VALIDADE_TJ'
DECLARE @LIN INT = 0
DECLARE @I INT
DECLARE @NAME VARCHAR(256)
DECLARE @system_type_id tinyint
DECLARE @CMD VARCHAR(MAX) = ' SELECT ''{'''
DECLARE @AUX TABLE (
NAME VARCHAR(256),
LIN SMALLINT,
system_type_id tinyint
)
INSERT INTO @AUX
SELECT C.NAME,
ROW_NUMBER() OVER(ORDER BY C.column_id) LIN,
C.system_type_id
FROM SYS.objects O
INNER JOIN SYS.COLUMNS C ON C.OBJECT_ID = O.OBJECT_ID
WHERE O.NAME = @FN
SET @I = ISNULL((SELECT MAX(LIN) FROM @AUX),0)
WHILE @I > @LIN
BEGIN
SET @LIN = @LIN + 1
SELECT @NAME = NAME, @system_type_id = system_type_id
FROM @AUX
WHERE LIN = @LIN
SET @CMD = @CMD + ' +
CASE WHEN '+ @NAME +' IS NOT NULL THEN
''"'+lower(@NAME)+'"'' + '':"'' + ' +
case when @system_type_id = 61 then
'convert(varchar, ' + @NAME + ', 126)'
else
'replace(cast('+@NAME+' as varchar) collate SQL_Latin1_General_CP1_CI_AI, ''"'', ''\"'')'
end
+ ' + ''",''
ELSE ''''
END '
END
SET @CMD = @CMD + '+''}'' as json FROM ' + @FN + '('+CONVERT(VARCHAR(30),@ID_VENDEDOR)+','+ ISNULL(quotename(convert(varchar, @DT_LAST_SINC, 126),char(39)),'NULL')+')'
RETURN @CMD
END
GO