A maioria das organizações protege seus bancos de dados remotos usando firewalls. Se você estiver procurando uma maneira de navegar por esses firewalls para acessar bancos de dados remotos, o Bridge pode ser útil.
Vamos tentar resolver um caso de negócios em tempo real em que o Bridge é usado para acessar um banco de dados MySQL dentro de uma rede privada.
Cenário de negócios
A Zylker Corp mantém todos os seus dados em um banco de dados MySQL dentro de sua rede privada segura. Eles usam Qntrl para automatizar diferentes fluxos de trabalho. Em um desses fluxos de trabalho, Aprovação de licença, eles procuram obter o saldo de licença restante dos funcionários para o ano atual e exibi-lo no Qntrl. Se o saldo de licenças for suficiente, o cartão será enviado ao gerente do funcionário para aprovação. Caso contrário, se o saldo de licenças for nulo ou menor do que o número solicitado de licenças, o cartão deverá ser rejeitado automaticamente.
Além disso, uma vez que a licença é aprovada no Qntrl, o saldo restante da licença também deve ser atualizado no banco de dados MySQL do cliente, mantendo assim dados uniformes durante todo o processo.
Solução
Esse caso de negócios pode ser resolvido usando a combinação de Bridge e função personalizada.
O Bridge é um aplicativo java instalável que é executado na rede local do cliente para facilitar a comunicação entre a instância do Qntrl e o aplicativo do cliente dentro do firewall.
Crie um Bridge e configure o agente do Bridge a partir da máquina do Windows ou do Linux. Conheça o processo passo a passo para executar um Bridge a partir de nossa
documentação de ajuda.
Etapa 2: criar mensagens no Bridge
Crie 2 mensagens no Bridge para manter detalhes básicos, como módulo usado, consulta de banco de dados, valores de bridge etc. Posteriormente, usaremos essas mensagens para nos comunicar com o banco de dados.
Mensagem 1: buscar detalhes do funcionário
Mensagem 2: atualizar as licenças restantes
Etapa 3 - criar uma função personalizada
Codifique as funções personalizadas para
- Buscar dados do servidor MySQL e
- Atualizar dados no servidor MySQL
Aqui está o código de exemplo para buscar detalhes do funcionário do banco de dados SQL:
- //Fetching selected employee details from local database
- params = Map();
- data = '{"task_name": "db_task","credential": {"name": "mssql1"},"task_details": {"database": "Employee","db_query":
- "SELECT * FROM Employee where Employee_id =' + "'" + emp_id + "'" + '","port": 1433,"query_timeout": 10000,"host":
- "localhost","sql_type": 3,"connection_timeout": 10000,"allow_multiple_columns": true}}';
- params.put("data",data);
- resp = invokeurl
- [
- url :" https://core.qntrl.com/blueprint/api/spacebugs/message/2403000000770088"
- type :POST
- parameters:params
- connection:"<connection_name>"
- ];
- info resp;
- response = resp.get("response_to").getJSON("results");
- //Updating employee details in the current job
- if(response != null)
- {
- d = response.get(0);
- job_params = Map();
- name = d.get(1);
- job_params.put("customfield_shorttext24",name);
- email = d.get(2);
- job_params.put("customfield_shorttext26",email);
- remaining_leaves = toNumber(d.get(3));
- job_params.put("customfield_integer10",remaining_leaves);
- r = invokeurl
- [
- url :" https://core.qntrl.com/blueprint/api/spacebugs/job/" + job_id
- type :POST
- parameters:job_params
- connection:"<connection_name>"
- ];
- //check for leave count. if leave count exceeds available leaves then 'Rejected' transition will be performed.
- leave_days = daysBetween(from_date,to_date);
- if(leave_days > remaining_leaves)
- {
- trans_params = Map();
- trans_params.put("transition_id","2403000000763175");
- trans_params.put("is_form","true");
- trans_params.put("content","Leave count exceeded.");
- r = invokeurl
- [
- url :" https://core.qntrl.com/blueprint/api/spacebugs/job/transition/" + job_id
- type :POST
- parameters:trans_params
- connection:"<connection_name>"
- ];
- }
- }
Aqui está o código de exemplo para atualizar os detalhes do funcionário no banco de dados SQL:
- leave_days = daysBetween(from_date,to_date);
- remaining_days = remaining_leaves.toLong() - leave_days +1;
- params = Map();
- data = '{"task_name": "db_dml_task","credential": {"name": "mssql1"},"task_details": {"database": "Employee","db_query": {"update":["UPDATE Employee set Remaining_leaves = ' + "'" + remaining_days + "'" + ' where Employee_id =' + "'" + emp_id + "'" + '"]},"port": 1433,"query_timeout": 10000,"host": "localhost","sql_type": 3,"connection_timeout": 10000}}';
- params.put("data",data);
- resp = invokeurl
- [
- //Upadte org name and message ID here
- url :" https://core.qntrl.com/blueprint/api/<org-name>/message/<message_ID>"
- type :POST
- parameters:params
- connection:"<connection_name>"
- ];
- info resp;
- job_params = Map();
- job_params.put("<parameter-for-custom-field-remaining leaves>",remaining_days);
- r = invokeurl
- [
- //Upadte org name here
- url :" https://core.qntrl.com/blueprint/api/<org-name>/job/" + job_id
- type :POST
- parameters:job_params
- connection:"<connection_name>"
- ];
- info r;
Ao criar uma conexão, use os seguintes escopos:
- Orchestly.job.ALL
- Orchestly.message.CREATE
- Orchestly.message.UPDATE
Etapa 4: criar um cartão na orquestração de solicitação de licença
Este é o formulário de solicitação de licença criado pela Zylker.
O cartão Leave Request (Solicitação de licença) contém campos como "Employee ID" (ID do funcionário), "Date from" (Data de), "Date to" (Data até) e "Reason for leave" (Motivo da licença). Quando o ID funcionário é preenchida, outros detalhes do funcionário são extraídos automaticamente do banco de dados.
Ao preencher os campos "Data de" e "Data até", a diferença entre eles é calculada e validada com o campo "Licenças restantes". Se a diferença for menor ou igual às licenças restantes, o cartão será enviado ao gerente para aprovação. Caso contrário, o cartão será rejeitado automaticamente.
Depois que o gerente aprova o cartão, o campo Licenças restantes é atualizado e, além disso, a segunda função personalizada é acionada para atualizar o mesmo valor no banco de dados do cliente.