Verificar de X em X segundos um Select de usuário logado

Preciso de uma forma de que o ScriptCase fique verificando este select
SELECT id, titulo_para_pesquisa FROM PESQUISA_PAIMAE_OK WHERE usuario = ?
se tiver retorno aparecer na tela o titulo_para_pesquisa e em seguida excluir o registro do id do select

Onde deve aparecer a mensagem?

No menu?
Em uma formulário específico?

1 Curtida

um alerta ou notificação ou popup

Onde quer essa mensagem?
No menu, em uma aplicação específica?

Aparecer no menu da aplicação

O menu novo já não tem
Sistema de notificação?

Não, meu scriptcase e versão anterior a com notificação

Qual versão é seu SCRIPTCASE?

9.12.013(8)
image

Então seu problema é construir um sistema de notificação em uma versão mais antiga do SC.
Já pensou se não vale a pena pagar a atualização para ter tudo isso nativo da própria ferramenta?

Não estou negando em ajudar, apenas dar uma solução mais plausível.

desculpa a ignorância, pensei que seria fácil, porque pensei que daria apenas para colocar um timer de X em X minutos verificando um select.

Bom dia.

Como disse , precisa de conhecimento avançado.

@MetroScience,
Não costumo postar código, mas acabei usando sua dúvida como exercício, acho justo compartilhar.
Coloca o código abaixo no onLoad do teu menu e faz as alterações necessárias pra teu ambiente.

  1. Troque o nome da aplicação pelo nome que vc tem aí. Eu só gerei uma aplicação de menu com nome aleatório pra testar, pq não uso o menu do SC.
    Na linha: xhr.open(‘POST’, ‘menu_teste.php’, true);

  2. Muda a query pra sua necessidade.

  3. Muda o tempo do timer: setInterval(executarQuery, 10000);

Até fiz um exemplo com alert() puro, mas ele trava o navegador inteiro até vc clicar em ok.
Se jogar numa IA dá pra ir lapidando e aproveitando pra aprender sobre requisições ajax. Neste código, a primeira parte (o endpoint) faz a consulta e retorna o código JS a ser executado. A segunda parte (o script JS) faz a requisição pro endpoint de acordo com o timer definido e executa o JS retornado, quando há retorno. Se o select não retornar dados, nada é executado.
Espero que sirva como um ponto de partida. Creio que funcione normalmente com a sua release do SC.

Aqui tem as possibilidades do sweetalert: https://sweetalert2.github.io/

[vg_meu_id] = 65;

if(isset($_POST['action']) && $_POST['action'] == 'executar_query') {
    $sql = "SELECT DATE_FORMAT(datahora, '%d/%m/%Y') FROM erro WHERE erro = " . [vg_meu_id];
    sc_lookup(rs, $sql);

    if(!{rs} === false && isset({rs[0][0]})) {
        $valor = {rs[0][0]};

        // Retornar apenas o código JavaScript (sem tags script)
        $alert_js = "
        if (typeof Swal !== 'undefined') {
            Swal.fire({
                title: 'Atenção!',
                html: '<div style=\"font-size: 16px; color: #2c3e50;\"><span style=\"color: #e74c3c; font-weight: bold;\">Atenção!<br>" . addslashes($valor) . "</span></div>',
                timer: 4000,
                showConfirmButton: false,
                confirmButtonText: 'OK',
                confirmButtonColor: '#3085d6',
                position: 'top-end',
                toast: true,
                background: '#fff',
				customClass: {
					popup: 'text-left-popup',
					title: 'text-center-title',
					htmlContainer: 'text-left-content'
				}
            });
        }";

        header('Content-Type: application/json');
        echo json_encode(['success' => true, 'alert_js' => $alert_js]);
        exit;
    } else {
        header('Content-Type: application/json');
        echo json_encode(['success' => false]);
        exit;
    }
}

?>
<script>
    function executarQuery() {
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'menu_31072026.php', true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                try {
                    var response = JSON.parse(xhr.responseText);
					if(response && response.success === true && response.alert_js) {
						eval(response.alert_js); // Executa o JavaScript retornado pelo endpoint
					}
                } 
				catch(e) {
                    console.log('Erro ao processar resposta:', e);
                }
            }
        };
        xhr.send('action=executar_query');
    }

    setInterval(executarQuery, 10000); // Executar a função a cada 10 segundos
    executarQuery(); // Dá o start na execução
</script>
<?php
1 Curtida

Obrigado, vou testar

Não consegui com seu exemplo, mas aqui deu certo desta forma a seguir:
No evento OnLoad do Menu foi colocado isso:

?>
<script>
	  setInterval(function(){
            $.post("../menu_ajax/", { userLogin : '[usr_login]' })
            .done(function( data ) {
                const obj = data;
                //console.log(obj);
				if (data != "")
					{
						let params = {type: 'warning', timer: '7000', toast: true, showConfirmButton :false, position : 'center'};
						scJs_alert(data, params);
				 	}
                });
                }, 60000);
	 
  </script>
<?php

foi criado uma Blank (menu_ajax) e no onExecute foi colocado isso:

$usuario = [usr_login];
$sql = "SELECT id, titulo_para_pesquisa FROM PESQUISA_PAIMAE_OK WHERE (usuario = '$usuario');";
sc_lookup(rs, $sql);

if({rs} !== false && isset({rs[0][0]}))	
	{
		$valor = {rs[0][1]};
		$sql_delete = "DELETE FROM PESQUISA_PAIMAE_OK WHERE id = " . intval({rs[0][0]});
		sc_exec_sql($sql_delete);
		echo "Concluída pesquisa por paternidade: " . $valor;
	} 

no meu caso eu apago o registro que é apresentado, porque não preciso mais dessa informação.

Fabiano, coloque código entre [code][/code]
Assim fica melhor visualizado.

Apresente também o código js do evento onload.

Parabéns por ter resolvido.

Boa tarde, fiz o ajuste, mais uma vez muito obrigado pela dica e por ter me ajudado a resolver.

1 Curtida