Vídeo Aula – AdvPL 010 – Gravação de Registros via RecLock

Olá pessoal…

Na vídeo aula de hoje, vou falar um pouco sobre gravação de registros (alteração e inclusão) utilizando RecLock e Controle de transações.



Abaixo o código fonte utilizado para os testes:

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zGravacao
Exemplo de gravação de dados via RecLock
@type function
@author Atilio
@since 25/11/2015
@version 1.0
	@example
	u_zGravacao()
/*/

User Function zGravacao()
	Local aArea := GetArea()
	
	//Abrindo a tabela de produtos e setando o índice
	DbSelectArea('SB1')
	SB1->(DbSetOrder(1)) //B1_FILIAL + B1_COD
	SB1->(DbGoTop())
	
	//Iniciando a transação, tudo dentro da transação, pode ser desarmado (cancelado)
	Begin Transaction
		MsgInfo("Antes da Alteração!", "Atenção")
		
		//Se conseguir posicionar no produto de código E00001
		If SB1->(DbSeek(FWxFilial('SB1') + 'E00001'))
			//Quando passo .F. no RecLock, o registro é travado para Alteração
			RecLock('SB1', .F.)
				B1_X_CAMPO := "XXX"
				B1_DESC := SB1->B1_DESC + "."
			SB1->(MsUnlock())
			
			/*
				Ao invés de só utilizar o :=, pode se também utilizar o comando Replace:
				Replace [CAMPO] With [CONTEUDO]
				Replace B1_X_CAMPO With "XXX"
			*/
		EndIf
		
		//Quando passo .T. no RecLock, o registro é travado para Inclusão
		RecLock('SB1', .T.)
			B1_FILIAL := FWxFilial('SB1')
		SB1->(MsUnlock())
		
		MsgInfo("Após a Alteração!", "Atenção")
		
		//Ao desarmar a transação, toda a manipulação de dados é cancelada
		DisarmTransaction()
	End Transaction
	
	//Se conseguir posicionar no produto de código E00001
	If SB1->(DbSeek(FWxFilial('SB1') + 'E00001'))
		//Quando faço a alteração fora de uma transação, automaticamente os dados são salvos
		RecLock('SB1', .F.)
			B1_DESC := Alltrim(SB1->B1_DESC) + "."
		SB1->(MsUnlock())
	EndIf
	
	RestArea(aArea)
Return

Se quiser fazer o download desse código ou do conteúdo mostrado na vídeo aula, acesse nosso GitHub pelo link github.com/dan-atilio/AdvPL (Exemplos > Vídeo Aulas > 010 – Gravação de Registros via RecLock).

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação