Olá. Construí uma browse utilizando o "wizard" do AppBuilder, selecionando as tabelas, critérios "where" e tudo mais. Criei uma procedure que é executada quando o usuário clica com o botão direito sobre um registro listado na browse. Nessa procedure, o objetivo é capturar o registro corrente e deletá-lo da tabela. Como a browse foi feita com o "wizard", o appBuilder coloca a instrução "NO-LOCK" na query da browse, e aí o sistema exibe a mensagem: O registro está com status de NO-LOCK. Delete não está disponível. (335) Como posso contornar isso? Não gostaria de refazer a browse com freeform query. Segue o trecho de código da procedure. Código: /* movimento corrente */ FIND CURRENT es-histvendas NO-ERROR. IF AVAIL es-histvendas THEN DO: /* pergunta */ RUN utp\ut-msgs.r ( INPUT "show", INPUT 27100, INPUT "Deseja excluir o movimento?" + "~~" + "Movimento para o item: (" + es-histvendas.it-codigo + ") " + item.desc-item). IF RETURN-VALUE = "yes" THEN DO: /* deleta reg. */ DELETE es-histvendas. /* atualiza grid */ {&OPEN-QUERY-BR-HISTORICO} END. END.
E se vc fizer isso: Código: /* movimento corrente */ FIND CURRENT es-histvendas NO-ERROR. IF AVAIL es-histvendas THEN DO: /* pergunta */ RUN utp\ut-msgs.r ( INPUT "show", INPUT 27100, INPUT "Deseja excluir o movimento?" + "~~" + "Movimento para o item: (" + es-histvendas.it-codigo + ") " + item.desc-item). IF RETURN-VALUE = "yes" THEN DO: def buffer b-es-histvendas for es-histvendas. find b-es-histvendas exclusive-lock where rowid(b-es-histvendas) = rowid(es-histvendas) no-error. /* deleta reg. */ DELETE b-es-histvendas. /* atualiza grid */ {&OPEN-QUERY-BR-HISTORICO} END. END.
Não sei se estou falando o obvio, mas parece que a solução é utilizar o find com EXCLUSIVE-LOCK. Código: FIND CURRENT es-histvendas EXCLUSIVE-LOCK NO-WAIT NO-ERROR. IF NOT AVAILABLE es-histvendas THEN DO: IF LOCKED es-histvendas THEN MESSAGE 'Registro esta sendo alterado por outro Usuario.' VIEW-AS ALERT-BOX ERROR BUTTONS OK. ELSE MESSAGE 'Registro excluido por outro Usuario.' VIEW-AS ALERT-BOX ERROR BUTTONS OK. RETURN NO-APPLY. END.
joelscampos, utilizei o buffer e deu certo. Muito obrigado. Mokwa, como o browse "herda" o NO-LOCK da query construída pelo Wizard do AppBuilder, acho que simplesmente usar o EXCLUSIVE-LOCK talvez não funcione. Mas vou fazer esse teste e já posto por aqui. De qualquer forma, obrigado a todos!!