Integração Codin Telemática
Essa integração é diretamente com a base do CONEX. Se você já possui o owner da Telemática instalado no mesmo banco de dados onde está o Akita Soft basta executar o script abaixo no owner TELEMAT.
Ao executar o script será solicitado um usuário, você deverá informar o owner do Akita Soft.
PROMPT Aguarde, liberando privilegios...
DECLARE
--
vusuario varchar2(200) := '&usuario_ou_role';
--
cursor c_obj is
select 'GRANT SELECT, UPDATE, INSERT, DELETE ON '|| table_name ||' TO '|| vusuario comando
from user_tables
union
select 'GRANT SELECT ON '|| table_name ||' TO '|| vusuario comando
from user_tables
where table_name not like 'AUX%'
and table_name not like 'TEMP%'
union
select 'GRANT SELECT, INSERT, UPDATE, DELETE ON '|| table_name ||' TO '|| vusuario comando
from user_tables
where table_name like 'AUX%'
or table_name like 'TEMP%'
union
select 'GRANT SELECT ON '|| view_name ||' TO '|| vusuario comando
from user_views
union
select 'GRANT SELECT ON '|| sequence_name ||' TO '|| vusuario comando
from user_sequences
union
select 'GRANT EXECUTE ON '|| object_name ||' TO '|| vusuario comando
from user_objects
where object_type in ('PROCEDURE','FUNCTION','PACKAGE');
--
plt_cmd dbms_sql.varchar2s;
pl_id integer;
rt_vl integer;
--
BEGIN
--
open c_obj;
fetch c_obj into plt_cmd(1);
while c_obj%found loop
begin
pl_id := dbms_sql.open_cursor;
dbms_sql.parse(pl_id,plt_cmd,plt_cmd.first,plt_cmd.last,false,1);
rt_vl := dbms_sql.execute(pl_id);
dbms_sql.close_cursor(pl_id);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
fetch c_obj into plt_cmd(1);
end loop;
close c_obj;
--
END;
/
Configuração
Nos parâmetros gerais do sistema (ASW0140), existe uma opção Possui Integração Codin que deve ser marcada.
Feita a configuração acima, todos os cadastros de equipamentos (ASW0040) realizados no Akita Soft com o modelo Codin Telemática, informado o Endereço IP ou o número Arl-on e Term serão replicados/atualizados com a tabela do CONEX DAT07.
As replicações de perfis e locais de acesso, bem como o cadastro de pessoas e faixas horárias de acesso ocorrem de forma online para a base do CONEX, quando é atualizado alguma informação cadastral da pessoa no Akita, como associação de crachá, associação de perfil, setor de acesso, afastamentos e etc. Estas replicações ocorrem também em horários programados, conforme configuração de horários definida na tela ASW2210, onde são atualizados de forma geral todos os perfis, locais, faixas e bloqueios no CONEX.
Os horários de atualização geral acima são verificados pelo JOB que aciona a procedure PROC_ATZ_GERAL_RELOGIOS
Integração dos Acessos
Para que os registros de acessos efetuados nos equipamentos sejam integrados com a base do Akita é necessário cadastrar o novo job ATZ_ACESSOS_DAM00.job que está logo abaixo. Executar o script com o owner do Akita.
PROMPT Cadastrando JOB para atualização dos acessos com Telemática.
SET SERVEROUTPUT ON SIZE 100000
DECLARE
--
VJOB NUMBER;
VCJP_NRO NUMBER;
VATUALIZA BOOLEAN := TRUE;
VDESCRICAO CADASTROS_JOBS_PONTOS.DESCRICAO_JOB%TYPE := 'Carregar acessos da Telemática para o Akita';
VNOME_JOB CADASTROS_JOBS_PONTOS.NOME_JOB%TYPE := 'PROC_ATZ_ACESSOS_DAM00';
VACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE := 'PROC_ATZ_ACESSOS_DAM00';
VINTERVAL CADASTROS_JOBS_PONTOS.EXPRESSAO_INTERVALO%TYPE := 'SYSDATE+(1/1440)';
PACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE;
XACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE := 'BEGIN NULL; END;';
VDATA_INI CADASTROS_JOBS_PONTOS.DATA_INICIAL_EXECUCAO%TYPE := SYSDATE+(10/1440);
--
CURSOR CJOB IS
SELECT JOB
, INTERVAL
, NEXT_DATE
FROM USER_JOBS
WHERE UPPER(WHAT) LIKE '%'||VACAO_JOB||'%';
--
CURSOR C_CJP IS
SELECT CJP.NRO_JOB
FROM CADASTROS_JOBS_PONTOS CJP
WHERE CJP.NOME_JOB = VNOME_JOB;
--
BEGIN
--
OPEN CJOB;
FETCH CJOB INTO VJOB, VINTERVAL, VDATA_INI;
--
IF CJOB%FOUND THEN
--
DBMS_OUTPUT.PUT_LINE('JOB já existente no cliente: '|| TO_CHAR(VJOB));
--
VATUALIZA := FALSE;
--
PACAO_JOB := PACK_JOB_PONTO.MONTA_ACAO_JOB('J',VNOME_JOB,''''||VACAO_JOB||'''',VDESCRICAO,NULL,'S',VJOB);
--
DBMS_JOB.REMOVE(VJOB);
DBMS_JOB.ISUBMIT(VJOB, PACAO_JOB, VDATA_INI, VINTERVAL);
--
ELSE
--
DBMS_JOB.SUBMIT(VJOB, XACAO_JOB, VDATA_INI, VINTERVAL);
DBMS_JOB.REMOVE(VJOB);
--
PACAO_JOB := PACK_JOB_PONTO.MONTA_ACAO_JOB('J',VNOME_JOB,''''||VACAO_JOB||'''',VDESCRICAO,NULL,'S',VJOB);
--
DBMS_JOB.ISUBMIT(VJOB, PACAO_JOB, VDATA_INI, VINTERVAL);
--
DBMS_OUTPUT.PUT_LINE('JOB Criado: '|| TO_CHAR(VJOB));
--
END IF;
--
CLOSE CJOB;
--
BEGIN
--
OPEN C_CJP;
FETCH C_CJP INTO VCJP_NRO;
--
IF C_CJP%FOUND THEN
--
DBMS_OUTPUT.PUT_LINE('JOB já existente na versão Full Web: '|| TO_CHAR(VCJP_NRO));
--
ELSE
--
INSERT INTO CADASTROS_JOBS_PONTOS(NRO_JOB
,NOME_JOB
,ACAO
,DATA_INICIAL_EXECUCAO
,DATA_FINAL_EXECUCAO
,EXPRESSAO_INTERVALO
,HABILITADO
,DESCRICAO_JOB
,EMAIL
,GERA_LOG_SOMENTE_ERRO
,REINICIAVEL
,VERSION)
VALUES (SEQ_CADASTROS_JOBS_PONTOS.NEXTVAL
,VNOME_JOB
,VACAO_JOB
,SYSDATE+(10/1440)
,NULL
,VINTERVAL
,'S'
,VDESCRICAO
,NULL
,'S'
,'S'
,0)
RETURNING NRO_JOB
INTO VCJP_NRO;
--
DBMS_OUTPUT.PUT_LINE('JOB versão Full Web Cadastrado: '|| TO_CHAR(VCJP_NRO));
--
IF VATUALIZA THEN
--
PACK_JOB_PONTO.ATUALIZA_JOB_BANCO( 'I'
, VNOME_JOB
, ''''||VACAO_JOB||''''
, VDATA_INI
, NULL
, VINTERVAL
, 'S'
, VDESCRICAO
, NULL
, 'S'
, 'S'
, VJOB );
--
END IF;
--
END IF;
--
CLOSE C_CJP;
--
END;
--
COMMIT;
--
END;
/
O job busca a cada minuto os acessos na tabela DAM00 e sincroniza com o Akita, podendo ser consultados na tela CODINW001 se houve algum erro ou na tela de consulta de acessos ASW0500 os registros integrados.