Skip to main content
27 dezembro 2023
Follow Us

Power Apps: Como criar uma app de controlo de ponto a partir da leitura de etiquetas NFC [UPDATE]

Como abordado num post anterior, hoje iremos fazer uma versão aprimorada da nossa aplicação de controlo de ponto. Da primeira versão para esta versão mais recente, foi acrescentado mais um botão e fizemos a distinção de um NFC especifico para os restantes NFCs. Neste post iremos abordar a funcionalidade de cada um destes novos controlos assim como a lógica por detrás da nossa aplicação.

 

O Novo Botão

Com a criação deste botão passamos a ter um botão para registar a entrada e outro para registar a saída. Desta forma, deixou de ser necessário 2 etiquetas NFC, como anteriormente. O código para cada um dos botões é bastante semelhante, com a diferença na coluna 'Entrada/Saída' que para o botão de entrar, envia para o Sharepoint o texto "ENTRADA" e para o botão de sair é enviado o texto "SAÍDA".
 
Botão Entrar
ForAll(NDEFRecords, Patch('Controlo de Ponto', Defaults('Controlo de Ponto'), {'Entrada/Saída': "ENTRADA", Title: User().FullName, Email: User().Email, 'Dia e Hora': Now()}));
 
Botão Sair
ForAll(NDEFRecords, Patch('Controlo de Ponto', Defaults('Controlo de Ponto'), {'Entrada/Saída': "SAÍDA", Title: User().FullName, Email: User().Email, 'Dia e Hora': Now()}));
 

Registos Personalizados

Um dos upgrades elaborados foi quanto aos registos de entrada/saída na galeria. De forma a distinguir os registos feitos pelo próprio utilizador e os registos feitos pelos restantes colaboradores decidiu preenche-se de verde os registos referentes ao próprio utilizador. Isto é, todos os meus registos na aplicação vão aparecer a verde, enquanto que os restantes colegas irá aparecer o branco default. Assim como, para outro colega, que entre com a sua conta, fazendo o login no seu dispositivo móvel, os registos que lhe vão aparecer a verde são os dele mesmo e não os meus. Para se conseguir efetuar esta diferença de cor nos registos implementou-se o seguinte código:
 
If(ThisItem.Email = User().Email,
RGBA(54, 176, 75, 1),
RGBA(255, 255, 255, 1)
)
 

Ler um NFC específico

Um problema que surgiu com a 1ª versão da app de controlo de ponto foi o de leitura de NFC. Na versão original a app necessitava de ler um NFC especifico para entrada e outro para saída. Para que se pudesse fazer a leitura com apenas uma etiqueta foi necessário especificar qual etiqueta NFC ler. Para cumprir este objetivo foi necessário dar um update ao nosso código para os botões, obtendo este resultado:
 
With(ReadNFC(),
Set(id, Coalesce(Identifier, "No ID"));
ForAll(NDEFRecords,
If(Coalesce(Text, URI) = "SWELL",
ForAll(NDEFRecords, Patch('Controlo de Ponto', Defaults('Controlo de Ponto'), {'Entrada/Saída': "ENTRADA", Title: User().FullName, Email: User().Email, 'Dia e Hora': Now()}));
)));
 
O que foi então feito? De forma resumida e simples criamos uma condição. Esta avalia se a etiqueta NFC tem no seu código a propriedade Text ou URI igual a SWELL.
 
If(Coalesce(Text, URI) = "SWELL",
 
Pensemos em SWELL como a palavra passe da nossa etiqueta. Se a condição for verificada como verdadeira, então a partir desse momento iremos sim mapear os campos da nossa lista de Sharepoint. Caso esta condição não se verifique então a leitura do NFC não irá ter qualquer resultado.
 
Seguindo estes passos e fazendo os ajustes necessários devem ter agora uma app de controlo de ponto, ou uma versão da anterior, melhorada. O resultado final deve ter sido semelhante a este:
 
1
Rui Couto

Assine a nossa newsletter e receba o nosso conteúdo diretamente no seu email