Autor Tópico: Download com registro de dados  (Lida 3368 vezes)

waae

  • Avançado
  • ****
  • Mensagens: 292
    • Email
Download com registro de dados
« Online: Setembro 22, 2009, 09:24:43 am »
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!!!

robsonsilva

  • Visitante
Re: Download com registro de dados
« Responder #1 Online: Outubro 15, 2009, 12:14:36 am »
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...
Código: [Selecionar]
// 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:
Código: [Selecionar]
{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).

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:
Código: [Selecionar]
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

William .'.

  • Iniciante
  • **
  • Mensagens: 83
    • Email
Re: Download com registro de dados
« Responder #2 Online: Outubro 15, 2009, 08:49:38 am »
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 .'.

robsonsilva

  • Visitante
Re: Download com registro de dados
« Responder #3 Online: Outubro 15, 2009, 07:21:06 pm »
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

William .'.

  • Iniciante
  • **
  • Mensagens: 83
    • Email
Re: Download com registro de dados
« Responder #4 Online: Outubro 16, 2009, 08:38:29 am »
Robson, Vc tem razão !!

Waee desculpe o equivoco amigo, acredito que a solução do Robson deva funcionar..

WSCA .'.

Rodrigo Lins

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 504
    • Overalt I.T
Re: Download com registro de dados
« Responder #5 Online: Outubro 16, 2009, 09:14:46 am »
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.

robsonsilva

  • Visitante
Re: Download com registro de dados
« Responder #6 Online: Outubro 16, 2009, 07:36:25 pm »
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:
Código: [Selecionar]
// 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():
Código: [Selecionar]
// 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:
Código: [Selecionar]
// 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

Cleyton Euler

  • Expert
  • *****
  • Mensagens: 1149
    • Associação de Usuários Scriptcase
    • Email
Re: Download com registro de dados
« Responder #7 Online: Dezembro 16, 2009, 11:15:28 am »
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.
Associação de Usuários Scriptcase
http://www.auscriptcase.com.br

Consultoria Scriptcase Versão 5
http://www.infinitusweb.com.br

waae

  • Avançado
  • ****
  • Mensagens: 292
    • Email
Re: Download com registro de dados
« Responder #8 Online: Janeiro 29, 2010, 08:47:11 am »
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+