Comunicação Forms com Host CMD

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Olá pessoal, estou utilizando Forms 6i, criei uma procedure que verifica se existe em um diretório da rede um determinado arquivo. Porém preciso retornar a resposta ao forms, se existe ou se não existe o arquivo, para informar o usuário se o arquivo está lá ou não.
Eis o meu problema, como faço a comunicação do Host com o Forms?????
Tentei habilitar o host como 'screen' para que o usuário lesse o retorno da busca na própria tela do cmd, mas ele executa muito rápido, não tem como parar a tela do Host pro usuário ler a mensagem....

Me ajudem please!!
Obrigada
Esta é a minha procedure:

Selecionar tudo


PROCEDURE CONFIRMA_ENVIO_FTP IS

	   COMMAND      VARCHAR2(4000); 
	   W_TEXTO      VARCHAR2(4000) := NULL;
	   ARQ_FILE     TEXT_IO.FILE_TYPE;

BEGIN
     
     ARQ_FILE := TEXT_IO.FOPEN('C:\TEMP\confirma.bat', 'W'); 
     W_TEXTO := 'T:';
     TEXT_IO.PUT_LINE(ARQ_FILE, W_TEXTO);
     W_TEXTO := 'cd \ '||:OCORRENCIA_VENDAS.NUMOCO;
     TEXT_IO.PUT_LINE(ARQ_FILE, W_TEXTO);
     W_TEXTO := 'dir b/ '||:OCORRENCIA_VENDAS_DOCUMENTOS.NM_ARQUIVO;
     TEXT_IO.PUT_LINE(ARQ_FILE, W_TEXTO);
     TEXT_IO.FCLOSE(ARQ_FILE);    
     
     command := 'C:\TEMP\confirma.bat';
     Host(command, screen);

END;
Renato Menezes Viana
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Sáb, 18 Nov 2006 11:51 am
Localização: Rio de Janeiro - RJ

djoq: Observe o início e o fim desta pequena procedure onde marquei um trecho --- para teste de problemas na abertura do arquivo (fique de olho no nível de erros).

Selecionar tudo

PROCEDURE PR_LISTA_ARQ_RETORNO (P_ARQUIVO IN VARCHAR2) IS
 wfile   varchar2(1000);
 wcmd    varchar2(1000);
 warq    varchar2(1000) := 'c:\meudiretorio\meuarquivo.txt'; 
 --
 wl_s_ret    boolean;
 wfim        varchar2(1);
 in_file TEXT_IO.FILE_TYPE; 
 wtxt        varchar2(4000);
 wlevel      varchar2(100);
BEGIN
  -- Começando e guardando level error
  wlevel := :system.message_level;
  :system.message_level := '25';
  -- Exemplo como verificar se existe ou não um arquivo
  -- Apenas um exemplo, assim serve como "...deu erro na abertura"  
  Begin
     in_file := TEXT_IO.FOPEN(warq,'r');
  Exception
  	When others then
      pr_msg_alert ('Erro : arquivo '||warq||' não existe','i',true);     
  end;  
  -- Fim exemplo teste erro abertura
  wfim := 'N';
  begin
    Text_IO.Get_Line(in_file,wtxt);
  exception
  	when no_data_found then
  	  wfim := 'S';
  end;
  while wfim = 'N' loop
  	 create_record;
  	 :nome_arquivo := wtxt;
  	 :in_processar := 'N';
     begin
       Text_IO.Get_Line(in_file,wtxt);
     exception
  	  when no_data_found then
  	   wfim := 'S';
     end;  	
  end loop; -- wfim = 'N'
  -- Terminando e restaurando level error
  TEXT_IO.FCLOSE(in_file);
  :system.message_level := wlevel;
EXCEPTION
	 WHEN OTHERS THEN
	 :system.message_level := wlevel;
	    NULL;
END;
Abs,
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Fiz desta forma e funcionou perfeitamente:

Selecionar tudo

PROCEDURE CONFIRMA_ENVIO_FTP IS
warq varchar2(1000) := NULL;
in_file TEXT_IO.FILE_TYPE;

BEGIN

	  warq :='T:\'||:OCORRENCIA_VENDAS_DOCUMENTOS.NR_OCORRENCIA||'\'||:OCORRENCIA_VENDAS_DOCUMENTOS.NM_ARQUIVO;
		
        Begin

		in_file := TEXT_IO.FOPEN(warq,'r');
		Exception
		When others then
		msg_alert ('Erro : arquivo '||:OCORRENCIA_VENDAS_DOCUMENTOS.NM_ARQUIVO||' não foi inserido!!','i',true);

	end;
		
END;
Muito Obrigada pela ajuda!! :D
Abraço
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes