Comandos Parte 5
12/05/2019
TODAY
Retornar a data atual
MESSAGE TODAY.
TIME
Retornar o horário atual. Utilizado junto com STRING.
MESSAGE STRING(TIME,'hh:mm:ss')
LOCKED
Retornar se o registro está locado. Utilizado junto com NO-WAIT.
/* exemplo 1 - menor código possível */
FIND FIRST customer EXCLUSIVE-LOCK NO-WAIT.
MESSAGE LOCKED customer.
/* exemplo 2 - apresentar mensagem caso registro 1000 esteja locado */
FIND customer WHERE
customer.custnum = 1000 EXCLUSIVE-LOCK NO-ERROR NO-WAIT.
IF LOCKED customer
THEN MESSAGE 'Registro customer 1000 está locado'.
DO WHILE
Criar repetição para um bloco de comandos até uma determinada condição deixar de ser verdadeira.
/* exemplo 1 - menor código possível */
DO WHILE TRUE:
/* comandos aqui */
END.
/* exemplo 2 - mostrar números até 10 */
DEF VAR wi AS INT NO-UNDO.
DO WHILE wi < 10:
ASSIGN wi = wi + 1.
MESSAGE wi.
END.
AVAILABLE
Retornar se um registro está disponível. Sempre utilizar após fazer um FIND. Abreviar: AVAIL.
/* exemplo 1 - menor código possível */
FIND FIRST customer.
MESSAGE AVAIL customer.
/* exemplo 2 - mostrar mensagem caso ache o customer 3000 */
DEF VAR c AS INT.
c = 3000.
FIND customer WHERE
customer.custnum = c NO-ERROR.
IF AVAILABLE customer
THEN MESSAGE 'Nome do customer' c customer.name.
BUFFER-COPY
Copiar dados entre tabelas ou buffers. As tabelas/buffers origem e destino devem estar no buffer de registro. Não há alteração na tabela/buffer origem.
/* exemplo 1 - menor código possível */
/* copiar dados de uma tabela para uma temp-table */
DEF TEMP-TABLE tt LIKE customer.
FIND FIRST customer.
CREATE tt. /* criar um registro na temp-table */
BUFFER-COPY customer TO tt. /* copiar os dados da tabela para a temp-table */
/* exemplo 2 - criar um registro de tabela e copiar todos os dados do primeiro */
/* exceto a chave primária que não pode ser duplicada */
DEF BUFFER buf_customer FOR customer.
FIND FIRST customer NO-LOCK NO-ERROR.
CREATE buf_customer.
BUFFER-COPY customer EXCEPT custnum TO buf_customer.
buf_customer.custnum = 10000. /* chave primária que não coincida com outras */
NEXT
Parar a execução do laço de execução atual e forçar o início do próximo laço. Usado em laços de repetição ou FOR EACH.
/* exemplo 1 - menor código possível */
FOR EACH customer:
/* comandos que serão executados */
NEXT.
/* comandos que não serão executados */
END.
/* exemplo 2 - mostrar todos número até 10, menos o 2 e 3 */
DEF VAR i AS INT NO-UNDO.
DO WHILE i < 10:
ASSIGN i = i + 1.
IF i = 2 OR i = 3
THEN NEXT.
MESSAGE i.
END.
LEAVE
Parar a execução do laço de repetição atual e sair do laço.
/* exemplo 1 - menor código possível */
FOR EACH customer:
/* comandos que serão executados apenas no primeiro laço */
LEAVE.
END.
/* exemplo 2 - mostrar os 5 primeiros números e sair do laço */
DEF VAR i AS INT NO-UNDO.
DO WHILE i < 10:
ASSIGN i = i + 1.
IF i > 5
THEN LEAVE.
MESSAGE i.
END.
EXTENT
Definir uma variável como array.
/* exemplo 1 - menor código possível */
DEF VAR var1 AS CHAR EXTENT 5.
/* exemplo 2 - definir e utilizar uma variável array de inteiros */
DEF VAR j AS INT EXTENT 3.
ASSIGN j[1] = 10
j[2] = 25
j[3] = 30.
MESSAGE j[2].
/* exemplo 3 - definir, inicializar e utilizar uma variável array de caracteres */
DEF VAR nomes AS CHAR EXTENT 3 INIT ["A", "B", "C"].
DISP nomes[3].
/* exemplo 4 - fazer assign em todo array ao mesmo tempo */
DEF VAR teste AS CHAR EXTENT 10.
teste = 'abcdef'.
DISP teste.
LENGTH
Retornar o tamanho de uma string
MESSAGE LENGTH('tamanho desta string').
BELL
Aviso sonoro
BELL.
AND
Operadores lógicos. AND, OR, NOT.
IF (1 = 1 AND 2 = 2) THEN MESSAGE 'Teste ok1'.
IF (1 = 1 OR 2 = 3) THEN MESSAGE 'Teste ok2'.
IF NOT (1 = 2 OR 2 = 3) THEN MESSAGE 'Teste ok3'.
FORWARDS
Pré-definir cabeçalho de uma function. Quando a definição da função precisar ficar abaixo do ponto onde ela foi utilizada no programa, o compilador dará mensagem de erro. O comando FORWARDS serve pra avisar o compilador que a função ainda será definida mais abaixo no programa.
/* exemplo 1 - menor código possível */
FUNCTION teste RETURNS CHAR FORWARDS.
/* exemplo 2 - pré-definir e utilizar a função antes de ter declarado */
FUNCTION teste RETURNS CHAR FORWARDS.
MESSAGE teste().
FUNCTION teste RETURNS CHAR:
RETURN 'mensagem da funcao'.
END FUNCTION.
VALIDATE
Definir validação de dados num FRAME.
DEF VAR idade AS INT NO-UNDO.
FORM idade VALIDATE(idade > 0 AND idade < 100, 'Idade invalida)
WITH FRAME tela1.
UPDATE idade WITH FRAME tela1.