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 v12.0:
Client Gateway para versão v12.1:
Client Gateway para versão v12.2:
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
LogFilequanto oHealthFileaceitam 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.jsonStringConnection 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:latestpelo 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.
O Client Gateway é um executável que funciona como intermediário entre o servidor e o cliente, é através dele que cargas de dados remotas são possíveis. O Client Gateway busca dados conforme a configuração do servidor e retorna os dados solicitados.
O Client Gateway está disponível para os Sistemas Operacionais Windows e Linux, sem necessidade de instalar outros pacotes como pré-requisito.
Para o correto funcionamento do Client Gateway a partir da versão 12.0 do T6, é necessário instalar o .NET Core 8.0 Runtime & Hosting Bundle for Windows (v8.0.0), ter suporte a cifras TLS 1.2 ou 1.3 e efetuar a liberação da porta 443 no Firewall.
O download do Client Gateway pode ser efetuado através dos links específicos para cada versão (v12.0, v12.1, v12.2), para os sistemas operacionais Windows e Linux, disponíveis no manual Client Gateway.
Após realizar o download do Client Gateway no local desejado, efetue a descompactação da pasta, e no arquivo appsettings.json realize as configurações necessárias.
Para obter o ClientId, crie um objeto Carga de Dados Remota no T6, adicione a fonte de dados e salve o objeto. Abra o objeto de Carga de Dados Remota novamente e em seguida, copie o código gerado.
Com o Client Gateway é possível se conectar com as seguintes fontes de dados:
SQLServer;
Oracle;
CosmosDB;
REST;
MySQL;
PostgreSQL;
ODBC.
No arquivo appsettings.json do Client Gateway, adicione múltiplos blocos no array DataSources respeitando a formatação JSON, conforme o exemplo abaixo:
"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"
}
]
Para utilizar o CosmosDB no Client Gateway, utilize a ConnectionString fornecida pelo Azure (URL + Primary Key) e adicione o campo Configuration com Database e Container.
Por exemplo:
{
"DataSourceName": "CosmosDB",
"DataSourceType": "COSMOSDB",
"StringConnection": "AccountEndpoint=https://cosmodb-example.documents.azure.com:443/;AccountKey=bpuRR4tLLQO6M2RB1Jop1KBJbByDm1zLGp2LJHeZJLaSSkft5aCApY9T2tUKx9qg591XyaSLZ0hRDDiACDb44k1vkA==",
"Configuration": {
"Database": "SampleDB",
"Container": "SampleContainer"
}
}
Para conectar via ODBC com MSSQL no Client Gateway, configure DataSourceType como ODBC e use connectionString com driver ODBC Driver 17 for SQL Server.
Exemplo:
{
"DataSourceName": "ODBC MSSQL",
"DataSourceType": "ODBC",
"StringConnection": "Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword;"
}
Para conectar com arquivos Excel utilizando o Client Gateway, use ODBC com driver Microsoft Excel e especifique o caminho do arquivo em DBQ.
Por exemplo:
{
"DataSourceName": "ODBC EXCEL",
"DataSourceType": "ODBC",
"StringConnection": "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\\MyExcel.xls;"
}
Para rodar o Client Gateway via Docker, será necessário utilizar uma imagem pública, configure o arquivo .env com suas configurações e execute com docker docker run --env-file .env.sample --name ClientGateway -d ImagemPublica/ClientGateway:latest.
Será necessário criar um objeto do tipo Carga de Dados Remota no T6 para conectar com o Client Gateway via Docker.
A carga de dados incremental no Client Gateway substitui dados da tabela por período, primeiro excluindo e depois inserindo dados conforme período selecionado.
Para utilizar, crie um processo do Workflow com parâmetros de data (inicial e final) para definir o intervalo, configure uma tarefa de carga de dados remota com esses parâmetros e marque a opção de carga incremental.
Ao disparar o gatilho do processo, somente os registros dentro do intervalo definido serão afetados.
Para executar cargas de dados via REST no Client Gateway, no arquivo de configuração do Client Gateway, configure DataSourceType como DATALOADREST (deve ser este nome, não deve ser alterado) e DataSourceName contendo rest (qualquer nome, desde que contenha "rest").
Sempre que a versão do T6 for atualizada, é necessário atualizar o Client Gateway.