Sistema para alertas de veículos roubados.

Há 4 anos tive um veículo furtado. Naquele momento construi um sistema que capaz de realizar a leitura em tempo real de placas de carros, utilizando imagens e vídeos, e ao mesmo tempo integrando com: Detran, Telegram, PagSeguro; Proxys ; e endpoint próprio.

O código estará disponível em meu GitHub.

Sobre o Sistema

Os perfis

O sistema consiste em um portal, onde há três perfis de cadastros: Agente ; Usuário ; e Desenvolvedor.

  • Usuário é a pessoa que acessa e cadastra um veículo com o status de roubado e deixa suas informações pessoais, assim como a localização do roubo/furto. O usuário também realiza um pagamento com um valor à escolha dele. Deste valor uma porcentagem é direcionada ao website e a outra é direcionada aos agentes.
  • Agente é a pessoa que se cadastra no sistema com o intuito de receber alertas. A cada alerta recebido o agente recebe uma parte do pagamento feito pelo usuário.
  • Desenvolvedor é a pessoa que se cadastra para utilizar o sistema como integração.
As integrações
  • Telegram e pagseguro– Integração Oficial.
  • Detran – A consulta ao detran foi escrita em php, utilizando uma base de dados de proxys abertos brasileiros
  • Detran – Biblioteca python chamada SinespClient link do GitHub. Esta biblioteca foi desenvolvida baseada no aplicativo Sinesp Cidadão.
  • Leituras de Placas – Foi utilizado a biblioteca OpenALPR.

Os Fluxos

Consulta de Veículos.
Cadastro de Ocorrência.
Fluxo de cadastro de Ocorrência.

O modelo entidade Relacionamento.

O banco de dados.

As tecnologias escolhidas foram:

  • Framework CodeIgniter (PHP);
  • Bootstrap para a interface;
  • Mysql para o Banco de Dados;
  • Leitura de placas do sistema:

Palavras Chave

Sistema para gestão de veículos roubados

Sistema para veículos roubados.

Análise de Placas por imagem.

Como acessar o ECM à partir de janeiro de 2021.

Se você é usuário do ECM, você pode estar enfrentando um problema. No dia 12/01/2021 o flash player foi descontinuado, por isso a aplicação legada ECM finalmente deixou de funcionar. Entretanto muitas empresas ainda possuem processos desenvolvidos na plataforma ECM e isso é um grande problema.

Uma solução alternativa para acessar o ECM, agora em 2021 é encontrar um computador que possua o flash instalado, ou um instalador do flash, e neste computador configurar a data para o dia 11/01/2021.

Essa ação permitirá um acesso alternativo e temporário, mas será suficiente para que seja possível estudar finalizar a migração dos dados do ECM para o Fluig.

Entre em contato caso deseje migrar seus processos do ECM para o Fluig.

Palavras Chave

Como converter processos do ECM para o Fluig.

Migrar ECM para Fluig.

Como acessar o ECM sem flash player

Leia arquivos BLOB , MEMO, BASE64 no Fluig.

Em caso de dúvidas entre em contato.

Este artigo tem o objetivo de auxiliá-lo na consulta de arquivos, armazenados em colunas do banco de dados do tipo BLOB, MEMO e BASE64 .

Por enquanto testei essa possibilidade apenas em conexões que forame realizadas através da configuração de acesso Externo, disponível nesta documentação documentação . Este tipo de conexão consiste em configurar um arquivo XML, e o dataset irá ler este arquivo e carregar essa configuração para ser acessado pelo driver jdbc.

O dataset abaixo, disponível no site da TOTVS, utiliza o driver JDBC para conectar ao banco de dados através da configuração previamente realizada.

Se observarmos a linha 12 podemos ver que a variável ‘rs’ recebe o metodo executeQuery da classe Statement.

Fluig datasetquery jdbc

Ao conferir esta documentação da Oracle, podemos ver que o método executeQuery tem como retorno uma classe chamada ResultSet.

Execute query – java.sql.Statement

Bastou verificar agora os métodos disponíveis na documentação da classe ResultSet .

Neste teste foi utilizado o método getBytes para acessar uma coluna do tipo BLOB que armazenava uma string BASE64.

var arquivo_bytes = rs.getBytes(rs.getMetaData().getColumnName(w));
resultado =  new java.lang.String(rs, "UTF-8");

Upload Automático no Fluig.

Para realizar o upload automático em processos no fluig veja este post.

Blob , Memo, Base64..

BLOB significa Binary Large Object. Podemos entender que o BLOB é um campo que aceita uma grande quantidade de caracteres, utilizado para gravar arquivos digitais dentro de colunas no banco de dados.

Supondo que você precise armazenar um arquivo, ou até mesmo o hash base64 que representa este arquivo em um banco de dados, você provavelmente vai querer usar este tipo de dado.

Referências.

https://stackoverflow.com/questions/29887351/java-the-method-encodebase64

https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

https://docs.oracle.com/javadb/10.8.3.0/ref/rrefblob.html

As boas práticas fluig.

Aviso

O fluig é um produto da marca TOTVS. Confira mais detalhes em www.totvs.com

Os perfis de desenvolvimento no fluig.

Desenvolver no fluig é um grande desafio e é necessário abusar da criatividade para resolver alguns problemas, como por exemplo: arquitetura e reaproveitamento de código.

O desenvolvimento dos principais CARDs – que eu considero sendo formulários e processos – no fluig pode ser feito de duas formas: a simplificada e a avançada.

  • Simplificada:
    • a forma simplificada de desenvolvimento no fluig necessita apenas do próprio fluig, pois todo o desenvolvimento de formulários e processos são feitos através da ferramenta que a plataforma disponibiliza.
    • Se você possuir uma noção lógica conseguirá utilizar esta ferramenta. Entretanto eu recomendo utilizar esse recurso apenas para estudo, ou utilizá-lo apenas em casos que seja extremamente necessário, que não possua tempo e ainda não esteja com o ambiente de desenvolvimento devidamente configurado.
    • Neste modelo simplificado você fica à mercê do que a ferramenta constrói e te entrega.
  • Avançada:
    • A forma avançada de desenvolvimento no Fluig consiste em configurar um ambiente de desenvolvimento utilizando plataformas de desenvolvimento conhecidas no mercado, como por exemplo Eclipse e Visual Code.
    • O uso da opção de desenvolvimento avançado exige um conhecimento em programação, configuração de componentes e entendimento da plataforma e análise de logs.
    • A vantagem de se utilizar essa opção é que você tem total controle do que será desenvolvido.

Boas práticas

A totvs fornece a documentação abaixo para abordar as boas práticas e sugerir um padrão para o desenvolvimento de datasets, formulários e processos.
Há recursos de integrações nativas entre ERP e fluig, disponibilizados pela própria TOTVS que não seguem essas boas práticas, como por exemplo a aprovação de movimentos do RM Nucleus. Nestes casos é necessário avaliar este ajuste.

https://tdn.totvs.com/pages/releaseview.action?pageId=244448460

Os problemas ao salvar processos no Fluig

Geralmente acontecem vários problemas ao tentar salvar um processo, geralmente o erro está associado a erros no desenho do BPM ou da definição das atribuições do Fluig.

A forma mais prática de analisar os erros do BPM do fluig é observar a aba Problems, do Eclipse. Entretanto poderá haver casos que o sistema não apresenta o erro, mas o processo fica acusando falha e não permite que seja exportado para o servidor.

Problems – Eclipse Fluig
Erro em processos do Fluig.

O que deve ser feito é verificar todas as atividades e conferir os mecanismos de atribuições de cada atividade e também do processo, principalmente se o processo foi originado da importação de outro servidor.

Após fazer esta verificação, confira também se o formulário está vinculado ao processo e se todas as setas do processo estão conectadas corretamente nas atividades do processo.

Resumo

  • Conferir todas as setas e verificar se as atividades estão bem conectadas.
  • Conferir todas as atividades e seus respectivos mecanismos de atribuição.
  • Conferir o mecanismo de atribuição do processo.
treinamento-fluig
Cursos e treinamentos para o software Fluig

A empresa TOTVS disponibiliza, em seus portais, o acesso a cursos online de diferentes temas, que abordam da instalação até a implantação de novos processos no Fluig que podem ser conferidos neste link: https://fluig.eadbox.com/

O curso gratuito apresentado é bom te apresentará uma visão geral da plataforma, portanto nada melhor que aplicar na prática e usar no dia a dia.

Entre em contato e contrate uma consultoria e treinamentos através de uma consultoria independente.

Participe de nosso grupo de whatsapp para Fluig.

Acessar WebService TOTVS RM pelo JAVA.

Neste tutorial vou demonstrar como acessar os webservices do TOTVS RM utilizando a linguagem de programação Java.

Entre em contato e faça um orçamento.

Após configurar seu ambiente de desenvolvimento crie um novo projeto java.

Em seguida, na pasta do seu projeto clique com o botão direito do mouse e em seguida vá em NEW > Other > Web Service Client.

criar novo > outro
web service client

Nesta janela inclua o endereço do seu webservice. Exemplo: http://localhost:8054/wsConsultaSQL/MEX?wsdl

Caso tenha dificuldades para entendimento desta URL, confira este artigo: Como configurar o webservice pelo RM Host ( Recomendado )

Configurar webservice.

Após o preenchimento clique em Finish.

Erros no Eclipse

Em meu ambiente aconteceram alguns erros, entre eles cito os dois abaixo:

The package javax.xml.namespace is accessible from more than one module: <unnamed>, java.xml

The type javax.xml.rpc.ServiceException cannot be resolved. It is indirectly referenced from required .class files

Para os erros citados acima a solução aplicada no meu ambiente foi remover o arquivo javaxrpc.jar e importar este: Javaxrpc-api-1.1

As etapas para este processo são: Clicar com botão direito do mouse nas propriedades do seu projeto, vá em java build path, remova o javaxrpc.jar e após baixar o arquivo indicado acima vá em add external Jar e importe o arquivo JAR que você baixou do repositório Maven.

wsConsSQL

Para realizar consultas SQL é necessário utilizar o webservice exclusivo para esta finalidade. Ele pode ser encontrado na sua url, conforme exemplo: http://localhost:8054/wsConsultaSQL/MEX?wsdl

Realize a primeira etapa, criando o webservice Client utilizando este endereço.

Em seguida, crie um novo arquivo java, chamado Principal, e inclua o seguinte código.

Atenção para dois itens, a variável endpoint deverá ser adaptada conforme seu ambiente foi configurado e o método realizarConsultaSQL recebe como parâmetro: sqlStub.realizarConsultaSQL(Código da Consulta SQL no RM, Código da Coligada de onde a Consulta foi Criada, Letra do Sistema onde a consulta foi criada, Parâmetros);

package br.eti.willian;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import com.totvs.www.RM_IRMSServerStub;
import com.totvs.www.RM_IwsConsultaSQLStub;

public class Principal {

	public static void main(String[] args) {
		
		String xml="";
		try {
	    	URL endpoint = new URL("http://localhost:8054/wsConsultaSQL/IwsConsultaSQL/");
	    	
	    			
	    	        RM_IRMSServerStub r = new RM_IRMSServerStub();      	        
	    	        
	    	        RM_IwsConsultaSQLStub sqlStub = new RM_IwsConsultaSQLStub(endpoint, r._getService());
	    	       sqlStub.setUsername("usuarioDoRm");
	    	       sqlStub.setPassword("senhaDoRm");
	    	        
			   xml = sqlStub.realizarConsultaSQL("teste", 1, "T", "");
			 
			
		} catch (RemoteException | MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		System.out.println(xml);
		
	}
}

Veja o tópico Conclusão deste artigo.

RMDataServer

Neste tópico será demonstrado como utilizar o RMDataServer implementado no Java.

Para realizar a leitura do DataServer com java é necessário utilizar o webservice exclusivo para esta finalidade. Ele pode ser encontrado na sua url, conforme exemplo: http://localhost:8054/wsDataServer/MEX?wsdl

Ajuste a variável endpoint, conforme seu endereço.

package br.eti.willian;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import com.totvs.www.RM_IRMSServerStub;
import com.totvs.www.RM_IwsDataServerStub;





public class Principal {

	public static void main(String[] args) {
		
		String xml = "";
		URL endpoint;
		try {
			endpoint = new URL("http://localhost:8054/wsDataServer/IwsDataServer");
			RM_IRMSServerStub r = new RM_IRMSServerStub();      	        
	       
			
			RM_IwsDataServerStub dataServerStub = new RM_IwsDataServerStub(endpoint, r._getService());
			dataServerStub.setUsername("usuarioDoRM");
			dataServerStub.setPassword("senhaDoRM");
			
			xml = dataServerStub.readView("MovTmvData", "TTMV.CODCOLIGADA=1", "CODCOLIGADA=1;CODSISTEMA=T");
		
			System.out.println(xml);
			
		} catch (MalformedURLException | RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
        
       
		
		
		
	}
}

Conclusão

O TOTVS RM tem evoluído nas integrações REST, entretanto não consigo dizer se todos os recursos já são homologados neste método. O objetivo deste documento é demonstrar de forma prática como executar as rotinas de webservices do TOTVS RM através da linguagem de programação java e utilizando os webservices em XML.

Após concluir a integração com o RM você perceberá que o retorno das funções são registros, do tipo string, que contém o conteúdo em XML.

Caberá agora a você buscar meios de Converter este XML em um Objeto java e em seguida continuar com seu projeto.

Obrigado.

Entre em contato e faça um orçamento.

Pesquisador genérico de dados de processos no Fluig.

Não é novidade que o Fluig é uma ferramenta de bpm poderosa. Nos permite criar diversas soluções em um curto período de tempo.

Entretanto, em alguns momentos a abstração gerada pelo fluig nos coloca muitos desafios, e você com certeza irá se questionar várias coisas, uma delas por exemplo será: Como buscar os dados dos meus processos no Fluig?

Como buscar os dados dos seus processos no Fluig?

Obs: a solução abaixo ainda não realiza pesquisas na widget, porém será resolvido em breve. Também sera adicionados mais recursos ao formulário de configuração para facilitar esta etapa.

Recentemente tive contato com um profissional de processos e conversamos sobre um problema: a dificuldade de buscar as informações que são geradas nos formulários e processos do sistema Fluig.

A partir deste problema foi idealizada uma solução. O que proponho abaixo foi chamado de Pesquisador Fluig.

A ideia é principal é fornecer acesso aos dados que forem inseridos no Fluig de forma mais prática e totalmente configurável e adaptável a qualquer ambiente.

Como instalar o Pesquisador Fluig

Abaixo o passo a passo de como instalar e utilizar o Pesquisador Fluig.

Acesse esta página do GITHUB para ter acesso ao código fonte e seguir o passo a passo abaixo.

O primeiro passo é exportar exportar o formulário

Acessar a pasta forms/ e exportar o formulário ConfiguraPesquisador . Durante a primeira exportação será necessário definir o dataset do formuário com o nome DSConfiguraPesquisador

O segundo passo é exportar o dataset DSConfiguraPesquisadorItem

Acessar a pasta datasets/ e exportar o dataset DSConfiguraPesquisadorItem

Este dataset será o responsável por buscar a lista de itens definidas no Formulário e em seguida carregar de forma dinâmica na Widget.

O terceiro passo é exportar a widget.

Exporte a widget chamada Pesquisador

O quarto passo é configurar o Pesquisador

Para configurar o Pesquisador é necessário abrir o formulário exportado no passo 1, e inserir um novo registro de formulário.

Em nome do dataset informe o nome do dataset que quer configurar para aparecer no Pesquisador e em seguida adicione uma descrição para este dataset ( pode ser o nome do processo )

Depois, no botão ‘Adicionar Filho’ insira novas linhas, estas linhas serão os campos do dataset que deverão aparecer na tabela da widget.

Após inserir estas informações clique em salvar.

O quinto passo é configurar o pesquisador

Após exportar o pesquisador para o fluig , acrescente o widget em uma página de preferência e consulte como será gerado.

Escolha na lista de opções o processo que será consultado, em seguida a datatable será formatada conforme desejado.

Palavras Chave

Como consultar meus processos no fluig
Como pesquisar meus processos no fluig
Como pesquisar meus datasets no fluig

Referências

Como habilitar o campo ZOOM na Widget – https://forum.fluig.com/686-como-criar-um-zoom-e-um-select-em-um-widget

Criando e configurando o recurso filter na widget – https://style.fluig.com/miscellaneous.html#filter

Dataset Pai X Filho – “O código do dataset responsável por listar os dados do ‘pai x filho’ é o código padrão da TOTVS e foi gerado através do acelerador de código disponível no eclipse (Snippets > Dataset > Dataset consulta pai-filho)

Demais consultas nas documentações do Fluig para criar a solução.

Como atualizar o script de processos dentro do Fluig?

O Fluig permite criar processos e criar condicionais e tratativas utilizando scripts.

Em determinados momentos você poderá se deparar com algum processo que por vezes está sendo executados sobre uma versão de script que não está completamente correta – contendo bugs – e inviabilizando a execução correta do processo.

A primeira atitude a ser tomada é realizar o ajuste do script e em seguida atualizar o processo. Esta ação irá gerar uma nova versão de processo, entretanto os processos antigos estarão sendo executados na versão antiga. Será necessário então converter o processo utilizando esta ferramenta para a nova versão.

Não deu certo?

Se por algum motivo você não conseguir realizar a conversão do processo, existe uma outra possibilidade que poderá te auxiliar, que é editar diretamente o script no banco de dados.

Os passos abaixo deverão ser realizados somente em ambiente de testes. O artigo tem propósito didático, as ações decorrentes das alterações são de inteira responsabilidade do usuário.

Neste exemplo de testes, temos um processo simples, apenas um início, uma atividade e um fim.

Para este processo, foi criado um script do tipo beforeStateEntry que verifica se o resultado de 1!==2 . Esta afirmação é verdadeira, portanto o script irá executar uma função apenas por propósitos didáticos, com objetivo de travar o processo.

O resultado desta execução será esta mensagem.

Para contornar este problema pode ser feito um teste alterando o script no campo DSL_EVENT da tabela EVENT_PROCESS e observando o resultado.

Antes da alteração.

Após alteração, observe que a linha 3 foi alterada, permitindo a continuação do processo.

Palavras chave

Como alterar o script de uma versão do processo.

Alterar o script do fluig de uma versão do processo.

Possíveis erros na atualização do Fluig 1.7 (Lake)

A atualização do Fluig 1.7 pode trazer alguns erros. Listarei eles abaixo para facilitar na solução do problema.

Deixe / consulte os comentários para erros não listados aqui.

Após atualizar para o 1.7 o Fluig parou de enviar notificações.

O fluig possui 3 serviços, são eles o Fluig, Fluig_realtime, fluig_indexer.

Para o correto funcionamento do Fluig é necessário que estes três serviços esteja funcionando. Durante a instalação pode ser que algum destes serviços não seja recriado.

Em um ambiente de testes simule executar o Fluig com o Fluig_Realtime ou Fluig_Indexer desabilitado e veja o comportamento.

Caso seja necessário recrie estes serviços utilizando esta documentação: https://tdn.totvs.com/pages/releaseview.action?pageId=285662306

Palavras chave

Erro ao atualizar o Fluig para a versão 1.7
O Fluig não gera notificações.