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


  • Sem rótulos

1 comentário

  1. Usuário desconhecido (felipe.raposo)

    A documentação diz o seguinte:

    "Após um SOFTLOCK() o registro deve ser liberado manualmente pela rotina que gerou este lock (...)"

    Porém, no exemplo abaixo, não há essa liberação. Se a função AlteraSA1() retornar falso, o registro vai ficar bloqueado?