O Client Gateway é um executável criado pela T6 Planning para ser instalado no ambiente do cliente. E é através dele que tarefas de cargas de dados remotos são possíveis. Ele funciona como um intermediário entre o servidor e o cliente, buscando dados de acordo com a configuração fornecida pelo servidor e devolvendo os dados solicitados.
O Client Gateway está disponível para o sistema operacional Windows e Linux. Instale-o de acordo com o seu sistema operacional. Não há necessidade de instalar outros pacotes como requisitos.
O Client Gateway é uma aplicação que ficará rodando em segundo plano no terminal. Para encerrar a aplicação basta alternar para a janela onde ela está rodando e enviar o comando CRTL+C
.
Antes de iniciar a instalação é necessário baixar o arquivo do Client Gateway de acordo com o seu sistema operacional Linux ou Windows. Porém é necessário que o SO contenha uma das cifras de TLS 1.2 ou 1.3 utilizadas pelo T6 Planning:
Para o correto funcionamento do ClientGateway para v12.0, é necessário a instalação do .NET Core 8.0 Runtime & Hosting Bundle for Windows (v8.0.0). Para mais informações sobre os pré requisitos da versão 12.0 acesse Guia de Instalação - v12.0.
Client Gateway para versão v11.11:
Client Gateway para versão v12.0:
Client Gateway para versão v12.1:
TLS 1.2:
TLS 1.3:
É necessário efetuar a liberação de firewall referente a porta 443.
Na pasta descompactada, onde encontram-se os arquivos do Client Gateway, procure pelo arquivo appsettings.json
. Abra-o em um editor de texto, de preferência um editor que lê arquivos json.
Abaixo segue uma imagem enquadrando todos os parâmetros que constam atualmente no Client Gateway, baseando-se na versão que foi usada neste manual.
{
"DataLoadGatewayConfig": {
"LogFile": "ppGateway.log",
"HealthFile": "ppHealth.log",
"HealthInterval": 20,
"Url": "http://localhost/Sysphera/dataloadhub",
"Key": "",
"Issuer": "https://sysphera.com/dataloadhub/issuer",
"Audience": "https://sysphera.com/dataloadhub/audience",
"ClientId": "",
"DataSources": [
{
"DataSourceName": "",
"DataSourceType": "",
"StringConnection": ""
},
]
}
}
Sempre que for utilizar o Client Gateway faça a verificação do
appsettings.json
, principalmente quando houver troca de versões do Gateway
Descrição dos parâmetros:
Tanto o
LogFile
quanto oHealthFile
aceitam caminhos completos onde espera-se que os arquivos sejam salvos. Porém, caminhos relativos também são aceitos e neste caso será considerado a pasta de onde o Client Gateway foi chamado para formar o caminho absoluto.
/dataloadhub/
. Esse parâmetro informa onde está localizado a parte que está no servidor, com a qual o Client Gateway irá se comunicar.Temos 3 parâmetros que não necessitam de alteração:
Para os próximos parâmetros precisaremos acessar o T6 e criar um objeto do tipo Carga de Dados Remota.
Podemos ter vários datasources. Basta adicionarmos no arquivo respeitando a formatação do JSON.
Podemos nos conectar através de SQLserver, Oracle, CosmosDB, REST, MySQL, Postgree e ODBC.
Para conseguirmos os dados para o preenchimento dos parâmetros citados acima, precisaremos seguir os seguintes passos:
00000000-0000-0000-0000-000000000000
pois nenhum datasource foi salvo;DataSourceName
do arquivo appsettings.json
StringConnection
do arquivo appsettings.json
;StringConnection
do arquivo appsettings.json
;Vamos atribuir estes valores aos parâmetros mencionados, segue abaixo um exemplo com os datasources do tipo SQLSERVER, ORACLE, POSTGRE, MySQL, CosmosDB e DATALOADREST:
"ClientId": "A1A1A1A1-B2B2-C3C3-D4D4-E5E5E5E5E5E5",
"DataSources": [
{
"DataSourceName": "SQLServer",
"DataSourceType": "SQLSERVER",
"StringConnection": "Data Source=SQLServerConnection;Initial Catalog=DataBaseName;Trusted_Connection=false;Persist Security Info=True;User ID=User;Password=pwd"
},
{
"DataSourceName": "Oracle",
"DataSourceType": "ORACLE",
"StringConnection": "Data Source=OracleConnection;User ID=user;Password=pwd"
},
{
"DataSourceName": "PostgreSQL",
"DataSourceType": "POSTGRESQL",
"StringConnection": "Server=host.docker.internal;Port=5432;Database=mydb;User Id=user;Password=pwd;"
},
{
"DataSourceName": "MySQL",
"DataSourceType": "MYSQL",
"StringConnection": "Server=host.docker.internal;Database=myDataBase;Uid=user;Pwd=pwd;"
},
{
"DataSourceName": "CosmosDB",
"DataSourceType": "COSMOSDB",
"StringConnection": "AccountEndpoint=https://cosmodb-example.documents.azure.com:443/;AccountKey=bpuRR4tLLQO6M2RB1Jop1KBJbByDm1zLGp2LJHeZJLaSSkft5aCApY9T2tUKx9qg591XyaSLZ0hRDDiACDb44k1vkA==",
"Configuration": {
"Database": "SampleDB",
"Container": "SampleContainer"
}
},
{
"DataSourceName": "Data Load Rest",
"DataSourceType": "DATALOADREST"
}
]
No caso do CosmosDB a própria engine do Azure fornece a ConnectionString, sendo ela uma junção da sua URL com o campo Primary Key (ou Second Key) exibidos na aba Keys do seu portal Azure. Temos também o campo Configuration, que não é solicitado em outros datasources, os dados para preenchimento deste campo são o nome do Database criado no portal do Azure e o nome do Container utilizado.
Utilizando a carga de dados remota em uma conexão com um banco de dados NoSQL (CosmosDB), podemos garantir a existência de uma coluna, mesmo que sem dados:
Para visualizar, vamos criar um processo do Workflow:
SELECT
Container.ID AS itemId, Container.price, Container.tags, Container.custom ? (Container.custom): null AS custom
FROM Container;
Esta sintaxe, fará a consulta no banco e irá trazer uma coluna chamada "custom", ela existindo no banco ou não, caso exista e contenha dados, os mesmos serão retornados, caso não contenha, a coluna irá retornar com valor "null".
Podemos selecionar em Destino uma tabela de dados já constante em nosso sistema, porém é necessário que o número de colunas e o nome em seus cabeçalhos sejam iguais ao da tabela de origem;
Podemos marcar a checkbox Reestruturar tabela de dados automaticamente que fará o ajuste automático da tabela de destino, sem a necessidade de ter o mesmo número e nome de colunas da tabela de origem;
Primeiramente é necessário prepararmos um container para o gateway;
src
do projeto PowerPlaning cd C:...\powerplaning\src;ImagemPublica/ClientGateway:latest
);Substitua
ImagemPublica/ClientGateway:latest
pelo nome correto da imagem pública que você está utilizando.
.env
de exemplo cp ClientGateway/.env.sample ./;
src
;.env.sample
com as suas configurações code .env.sample;O clientID é obtido através do T6, quando criamos um objeto do tipo "Carga de Dados Remota", ao abrí-lo, teremos um código que deverá ser inserido na parte de configuração
DataLoadGatewayConfig__ClienId=********-****-****-****-***********
;
docker run --env-file .env.sample --name ClientGateway -d ImagemPublica/ClientGateway:latest
Será criada dentro do T6 uma Tabela de Dados com o nome da conexão criada no objeto Carga de Dados Remota Load Postgres;
Podemos marcar a checkbox Reestruturar tabela de dados automaticamente que fará o ajuste automático da tabela de destino, sem a necessidade de ter o mesmo número e nome de colunas da tabela de origem;
Ao adicionarmos dados à tabela de forma externa (através do banco de dados) e executarmos o gatilho novamente essas alterações serão refletidas na tabela de dados criada no T6.
appsettings.json
dentro da pasta ClientGateway;Na configuração temos 2 parâmetros principais que devemos dar atenção:
- URL: Necessariamente deverá conter o endpoint /dataloadhub
- ClientID: É o código gerado ao salvarmos o objeto do tipo Carga de Dados Remota no T6;
appsettings.json
vamos inserir mais um bloco de informações{
"DataSourceName": "ODBC MSSQL",
"DataSourceType": "ODBC",
"StringConnection": "Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword;"
}
Após configurado, vamos voltar ao T6, onde iremos criar um Processo do Workflow para podermos visualizar o funcionamento.
Podemos selecionar em Destino uma tabela de dados já constante em nosso sistema, porém é necessário que o número de colunas e o nome em seus cabeçalhos sejam iguais ao da tabela de origem;
Podemos marcar a checkbox Reestruturar tabela de dados automaticamente que fará o ajuste automático da tabela de destino, sem a necessidade de ter o mesmo número e nome de colunas da tabela de origem;
Vamos criar um objeto no T6 do tipo Carga de Dados Remota (ou, adicionar mais uma conexão caso já tenha um objeto deste tipo);
appsettings.json
dentro da pasta ClientGateway;appsettings.json
vamos inserir mais um bloco de informações{
"DataSourceName": "ODBC EXCEL",
"DataSourceType": "ODBC",
"StringConnection": "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\\MyExcel.xls;"
}
Em StringConnection, DBQ é o local onde o arquivo do Excel está salvo
Após configurado, vamos voltar ao T6, onde iremos criar um Processo do Workflow para podermos visualizar o funcionamento.
Ocorrerá erro caso haja alterações nas colunas existentes no arquivo do Excel, deve-se manter o mesmo nome no cabeçalho das colunas, assim como o número de colunas não deve ser alterado.
DataLoadGatewayConfig
será necessário incluir uma nova entrada:DataSourceName: "Data Load Rest",
DataSourceType: "DATALOADREST"
Os passos para registrar o Client Gateway como um serviço do Windows.
O SC.exe
tem outros parâmetros que podem ser usados na criação de um serviço. No passo a passo descrito acima, esses são os parâmetros mínimos obrigatórios para se registrar um serviço. Você pode saber mais sobre os outros parâmetros clicando no link: Microsoft Learn - SC.exe create
Para removermos o serviço criado, o comando é: sc delete ServiceName, onde ServiceName é o nome do serviço desejamos remover.
Em alguns casos, pode ocorrer erro ao iniciar o serviço do windows, se isso vier a ocorrer, será necessário executarmos o Client Gateway através de um prompt de comando para identificarmos o erro.
Para isso, vamos seguir os seguintes passos:
cmd
);ClientGateway.exe
;Ao executar este passo a passo, estaremos executando o Client Gateway, e possivelmente veremos uma mensagem de erro que estará logada no terminal, com isso poderemos identificar o que está ocasionando o erro ao executar o Client Gateway como serviço do Windows.
Após efetuarmos o download do arquivo do ClientGateway para Linux na seção 2.1 deste manual, precisaremos criar um serviço no diretório /etc/systemd/system/
, que iremos nomear como ClientGateway.service
.
nano
, vi
, vim
. Neste manual iremos utilizar o nano
;
sudo nano /etc/systemd/system/ClientGateway.service
# ClientGateway.service
[Unit]
Description=T6 Enterprise Client Gateway
[Service]
ExecStart=dotnet /home/azureuser/ClientGateway/ClientGateway.dll
SyslogIdentifier=T6ClientGateway
User=azureuser # Nome do usuário Linux que irá executar o serviço
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
nano
podemos fazer isso pressionando CTRL + O);nano
podemos fazer isso pressionando CTRL + X);Para garantirmos que o serviço está funcionando corretamente, podemos verificar o status dele realizando o seguinte comando: sudo systemctl status ClientGateway.
A carga de dados incremental faz a substituição dos dados da tabela no Banco de Dados, primeiro fazendo a exclusão dos dados, e depois, fazendo a inserção, conforme o período selecionado.
Para utilizar a carga de dados incremental vamos seguir os seguintes passos:
StartDate
e EndDate
; (Para informações complementares sobre Workflow, Gatilhos e Parâmetros, acesse: Workflow BPM)Podemos selecionar em Destino uma tabela de dados já constante em nosso sistema, porém é necessário que o número de colunas e o nome em seus cabeçalhos sejam iguais ao da tabela de origem;
Podemos marcar a checkbox Reestruturar tabela de dados automaticamente que fará o ajuste automático da tabela de destino, sem a necessidade de ter o mesmo número e nome de colunas da tabela de origem;
StartDate
, referente a data de início dos registros que queremos;EndDate
, referente a data final dos registros selecionados;Essas configurações vão definir somente os registros que serão deletados da tabela de destino, a parte de inserção vai depender do que for definido no comando SQL adicionado acima (caso faça somente o "SELECT", todos os registros serão carregados, independente da quantidade).
Exemplo do comando SQL aplicando os parâmetros:
SELECT * FROM REP_EXPLORER_OBJECT
WHERE
datModified >= COALESCE(NULLIF('Instance(StartDate)',"),'1970-01-01')
AND
datModified < COALESCE(NULLIF('Instance(EndDate)',"),'5000-01-01')
StartDate
e EndDate
, com a data inicial e a data final, respectivamente;Sempre que for atualizada a versão do T6, é estritamente necessário atualizar a versão do Client Gateway.
Para utilizar a carga de dados para criação dinâmica da tabela de dados, vamos seguir os seguintes passos:
TableName
(Este parâmetro será utilizado no item 8. deste tópico); (Para informações complementares sobre Workflow, Gatilhos e Parâmetros, acesse: Workflow BPM)TableName
;TableName
definirá o nome da tabela de dados de destino.Caso não conste nenhuma tabela de dados com o nome definido, a mesma será criada de forma dinâmica e salva na pasta Raiz do T6.
Atenção, caso exista alguma tabela de dados com o nome definido no parâmetro, a mesma terá seus dados sobrescritos;
Após concluir a configuração do processo, clique em Salvar e publique o cubo;
No gatilho do processo, vamos definir no parâmetro TableName
o nome da tabela de dados de destino;
Para finalizar, após inserir o valor no parâmetro, vamos disparar o gatilho.