Tenho uma consulta onde existe um campo tipo “Arquivo (nome do arquivo)”. Nele o usuário deveria conseguir fazer o download desse arquivo, mas o problema é que eu precisava registrar os dados do usuário que está fazendo o download, data, hora… . Como não consegui fazer nenhum evento registrar esses dadosqdo o usuário clicasse sobre o arquivo para baixar, forcei ele a entrar em um controle onde no botão “Download” ele baixa o arquivo e o Sistema registra os dados. Até ai ok!!!
Só que aquele negócio do IE bloqueia o download da primeira vez… ai se a gente libera pro IE fazero download, ele pede “repetir” ou “cancelar”, se coloca o “repetir” ele não faz nada… ai tem que entrar na consulta de novo, entrar no controle e só assim faz o download…
Como faço pra tirar toda essa “burocracia” pq isso tá stressando todo mundo !!!
Agradeço a quem ajudar!!!
Amigo,
Esse problema no IE ocorre quando a página tenta realizar o download automaticamente, não?
Nesse controle que criou, se vc colocar um campo label com um link para o arquivo de download, imagino que não acontecerá isso…
// Evento onLoad da aplicação controle
$arquivo = [variavel_com_nome_do_arquivo_para download];
{campo_label} = "<a href='/pasta/padrao/dos/arquivos/".$arquivo."'> Realizar download </a>";
Acho que dá pra fazer uma pequena adaptação na consulta pra não precisar usar esse controle… estava tentando alguma coisa aqui, mas parei no 6º item e não consegui fazer funcionar:
1º - Criei um novo campo tipo texto, chamado “acao_download”;
2º - Criei um botão PHP chamado “btndownload”;
3º - Escondi o botão (btndownload) da barra de ferramentas;
4º - Escondi o campo que contem o arquivo de download, usando a macro sc_field_display (no evento onInit da consulta);
5º - No evento onRecord, coloquei o seguinte:
[code]{acao_download}="<input type=image name=‘sc_btndownload’ onclick=sc_btn_btndownload(); return false; title=‘Download’ border=0 src=".$this->Ini->path_botoes."/sys__NM__link.png align=absmiddle>";
//Créditos.: essa solução foi adaptada do exemplo do Haroldo, na comunidade scriptcaseajax (www.scriptcaseajax.com.br).[/code]
6º - No código php do botão criado, executar as rotinas para salvar os dados no banco e mostrar o link do download.
O problema no 6º item é que não consigo passar as variáveis e o conteúdo dos campos da aplicação pro botão PHP que foi criado… O conteúdo deste botão deveria ser algo parecido com isso:
sc_exec_sql("INSERT INTO .... "); // gravar dados do acesso no banco
echo "<a href='/pasta_dos_arquivos/".{campo_arquivo}."'> Realizar Download </a>";
Se eu descobrir uma forma de fazer isso eu posto aqui…
Att.
Robson
Waee,
Está é uma caracteristica do proprio IE, então não existe como mudar via programação, o que pode ser feito é configurar as propriedades de Zona do navegador para desabilitar esta maldita ‘barrinha’.
WSCA .’.
William,
Posso estar falando besteira pois não utilizo o IE há um bom tempo, mas pelo o que me lembro essa tal “barrinha” só aparece quando a página tenta iniciar um download sem uma ação direta do usuário, certo? Acontecia constantemente na página do superdownloads por exemplo… Mas se for um link direto pro arquivo, onde o usuário clique nele para realizar o download, a barrinha não aparece e a janela de download abre diretamente, não?
Talvez nesta aplicação do Waee o download esteja sendo executado através de um script (num evento ou em algum botão). Acho que esse problema será resolvido se realizar o download através de um link…
Att.
Robson
Robson, Vc tem razão !!
Waee desculpe o equivoco amigo, acredito que a solução do Robson deva funcionar…
WSCA .’.
Bom Dia Robson,
Tente fazer os passos que você disse que não conseguiu, conforme expliquei neste tópico:
http://www.netmake.com.br/forum/index.php?topic=1275.0;topicseen
Que seria através de variável global.
Rodrigo Lins.
Olá Rodrigo, boa tarde!
Esta solução realmente irá funcionar, mas o detalhe é que a aplicação é uma consulta…
Na verdade eu que não percebi um “pequeno” detalhe: apesar de estar chamando a função do botão em cada linha da consulta, o botão é o mesmo para toda a aplicação… e mesmo tentando registrar a variável global no evento onRecord, cada nova linha carregada na consulta irá apagar o valor na sessão e setar o valor da nova linha.
O mais fácil é criar uma ligação com uma aplicação controle mesmo, como ele fez logo no início…
Mas pra quem gosta de complicar as coisas, dá pra fazer algo assim:
1º - Criar um novo campo tipo texto, chamado “acao_download”;
2º - No evento onInit da consulta, esconder o campo que contem o arquivo de download e criar a rotina em php:
// Evento onInit da consulta
// Verificar se foi solicitado algum download. Caso positivo, realiza o insert no banco e
// insere o javascript para abrir a janela de download
sc_field_display({campo_arquivo},off);
$arquivo = [alvo];
sc_reset_global([alvo]);
if ($arquivo != NULL)
{
sc_exec_sql("INSERT INTO ...."); //insere dados de acesso no banco
echo "
<script language='javascript'>
janela_download = window.open ('', '', 'height=400, width=400, location=no, menubar=no, resizable=yes, scrollbars=yes, status=no, toolbar=no ,top=150,left=300');
janela_download.document.open();
janela_download.document.write ('<html><head><title>Download de arquivo</title></head><body>');
janela_download.document.write ('<a href=/pasta_dos_arquivos/".$arquivo."> Realizar download </a>');
janela_download.document.write ('</body></html>');
janela_download.document.close();
</script>
";
}
3º - No evento onRecord, colocar um formulário (escondido) e uma imagem ou link executando o submit():
// Evento onRecord da consulta (Opção com link)
// obs.: incluí o ID do registro no nome do formulario para não haver vários formularios com o mesmo nome
{acao_download}="<form action='#' name=form".{campo_id}." method=POST><input type='hidden' id='alvo' name='alvo' value='".{campo_arquivo}."'>/form>
<a href='#' onclick='javascript:document.form".{campo_id}.".submit()'> Download </a>";
ou:
// Evento onRecord da consulta (Opção com imagem)
// obs.: incluí o ID do registro no nome do formulario para não haver vários formularios com o mesmo nome
{acao_download}="<form action='#' name=form".{campo_id}." method=POST><input type='hidden' id='alvo' name='alvo' value='".{campo_arquivo}."'>/form>
<input type=image name='sc_btndownload' onclick='javascript:document.form".{campo_id}.".submit()' title='Download' border=0 src=".$this->Ini->path_botoes."/sys__NM__link.png align=absmiddle>
neste exemplo estou supondo que o nome do campo “arquivo” seja {campo_arquivo}, e do campo com o “ID” da linha seja {campo_id}.
Funcionou certinho aqui, mas o problema é que ele faz um “reload” da página em cada download, o que pode não ser muito viável…
Att.
Robson
Poxa, era uma dúvida que eu tinha e acabei resolvendo com uma página em PHP.
Na consulta usei um link redirecionando para uma página que faz todo o serviço, inclusive o download do arquivo. Ficou legal pq a página abre na iFRAME do SC mesmo. Então é uma solução que uso muito quando o SC me limita em alguma coisa. É o caso da integração com o Google Maps que faço.
Agora com o SC5 ficou ainda melhor pq vc tem a aplicação do tipo Blank.
Olá galera…
Passei um tempo muito ocupada… por isso não dei continuidade aqui!!
O que aconteceu foi que precisava resolver isso com muita urgencia… entao criei um informativo dentro do painel ensinando como evitar essa Barrinha Chata!!
Tb não consegui outra forma de realizar o Download e registrar os dados a não ser com esse controle!!
Mas vou tentando… qq novidade posto aqui!!
Muito Obrigada a todos que tentaram ajudar!!!
T+