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.