Histórico da Página
Sintaxe
SOFTLOCK( <cAlias> )
Propósito
Trava o registro do arquivo de dados que está posicionado.
Argumentos
< cAlias >
Define o alias de referência da área de trabalho ativa, para o qual o registro posicionado será travado.
Utilização
Permite a reserva do registro posicionado na área de trabalho ativa, de forma que outras operações, com exceção da atual, não possam atualizar esse registro.
Ela difere da função RECLOCK(), pois não gera uma obrigação de atualização, e pode ser sucedida por ele.
No ERP Protheus, o SOFTLOCK() é utilizado nos browses, antes da confirmação da operação de alteração e exclusão, pois neste momento a mesma ainda não foi efetivada, mas outras conexões não podem acessar aquele registro pois o mesmo está em manutenção, o que garante a integridade da informação.
Após um SOFTLOCK() o registro deve ser liberado manualmente pela rotina que gerou este lock, pois ele não é liberado pelas rotinas padrões de liberação de registros nem passa pelo controle de transações do ERP. Por este motivo, após um SoftLock a função RecLock deve ser utilizada.
Exemplos
LOCAL lConfirma := .F.
dbSelectArea(“SA1”)
dbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
dbSeek(xFilial(“SA1”) + “900001” + “01”) // Busca exata
IF FOUND() // Avalia o retorno da pesquisa realizada
SOFTLOCK() // Reserva o registro localizado
// Função ilustrativa que exibe os dados do registro posicionado e permite a alteração dos mesmos.
lConfirma := AlteraSA1()
IF lConfirma
RECLOCK(“SA1”, .F.)
SA1->A1_NOME := “MARCOS AURELIUS TERCEIRUS”
SA1->A1_NREDUZ := “MARCOS AURELIUS”
MSUNLOCK() // Destrava o registro, liberando o RECLOCK() e o SOFTLOCK() do registro
ENDIF
ENDIF