Delphi - Intraweb: Passar e recuperar parâmetros entre requisições HTTP
Autor: ralencar | Publicado: 2009-08-24T18:04:00-03:00

Inicie uma aplicação Intraweb no Delphi. O Assunto é sobre passar, e recuperar, parâmetros entre requisições HTTP. Especificamente, pretendo exemplificar como chamar uma outra aplicação web, sendo que nesta chamada passaremos parâmetros, os quais, obviamente, serão recuperados e processados pela aplicação que foi requisitada.Neste artigo criaremos duas aplicações Intraweb ISAPI. Um delas (“AppEstacaoZNSubmit”) servirá para passar parâmetros para outra (“AppRequestQueryFieldsEstacaoZN”). Esta segunda por sua vez, recupera os valores destes parâmetros processa e os exibe. Ok, definido o que pretendemos fazer passamos agora a parte prática.A seguir o código fonte da aplicação ISAPI que chama e passa os parâmetros. Salvei essa app de com o nome “AppEstacaoZNSubmit”.O Form principal e único desta aplicação “IWUnit1.pas”:unit IWUnit1;{PUBDIST}interfaceuses  IWAppForm, IWApplication, IWTypes, IWCompButton, Classes, Controls,  IWControl, IWCompEdit, IWCompLabel;type  TformMain = class(TIWAppForm)    IWEdit1: TIWEdit;    IWButton1: TIWButton;    IWLabel1: TIWLabel;    EdtURLZN: TIWEdit;    IWLabel2: TIWLabel;    procedure IWAppFormCreate(Sender: TObject);    procedure IWButton1Click(Sender: TObject);  public  end;implementation{$R *.dfm}uses  ServerController, SysUtils, IWForm;procedure TformMain.IWAppFormCreate(Sender: TObject);begin  IWEdit1.Text      := '';  IWButton1.Caption := 'Enviar - ZN';  IWLabel1.Caption  := 'Digite o valor que será enviado';  IWLabel2.Caption  := 'Digite a URL da aplicação ISAPI que será chamada' +    'e exibirá o valor digitado acima.';  EdtURLZN.Text     := '';end;procedure TformMain.IWButton1Click(Sender: TObject);const  AJSComando = 'window.open("%s?estacaoZnValor=%s")';begin  AddToInitProc(Format(AJSComando, [EdtURLZN.Text, IWEdit1.Text]));end;end.Em seguida o “.dpr”:library AppEstacaoZNSubmit;uses  IWInitISAPI,  ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},  IWUnit1 in 'IWUnit1.pas' {formMain: TIWForm1};{$R *.RES}begin  IWRun(TFormMain, TIWServerController);end.Não editei nada no “IWServerController”, portanto após compilar e efetuar o deploy da “AppEstacaoZNSubmit.dll” no IIS damos por encerrada esta etapa do nosso exemplo. O próximo passo é codificar a segunda aplicação. Logo, novamente inicie um novo projeto Intraweb ISAPI, salve com o nome de “AppRequestQueryFieldsEstacaoZN”. No evento “OnRender” do IWForm1 implementaremos o que especificamos anteriormente. Abaixo, o fonte da IWUnit1.pas:unit IWUnit1;{PUBDIST}interfaceuses  IWAppForm, IWApplication, IWTypes, Classes, Controls, IWControl,  IWCompLabel, IWCompListbox, IWCompMemo;type  TformMain = class(TIWAppForm)    IWLabel1: TIWLabel;    procedure IWAppFormRender(Sender: TObject);  public  end;implementation{$R *.dfm}uses  ServerController, IWForm, SysUtils;procedure TformMain.IWAppFormRender(Sender: TObject);const  ZnMsg = 'www.estacaozn.blogspot.com O Valor recebido de "%s" é: %s';begin  IWLabel1.Caption := Format(ZnMsg,  [WebApplication.Request.RemoteAddr,   WebApplication.Request.QueryFields.Values['estacaoZnValor']]);  IWLabel1.Font.Size := 20;  end;Vejamos o “.dpr” da “AppRequestQueryFieldsEstacaoZN.dpr”.library AppRequestQueryFieldsEstacaoZN;uses  IWInitISAPI,  ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},  IWUnit1 in 'IWUnit1.pas' {formMain: TIWForm1};{$R *.RES}begin  IWRun(TFormMain, TIWServerController);end.Após proceder a implementação deste módulo conforme ilustrado acima, semelhante ao exemplo anterior compile e efetue o deploy da “AppRequestQueryFieldsEstacaoZN.dll” no ISS. Feito isso já é possível testar. No browser, chame o diretório virtual definido no deploy da primeira aplicação (AppEstacaoZNSubmit.dll). Digite no “IWEdit1” o valor para parâmetro “estacaoZnValor”, o qual será exibido. Digite também a URL da segunda aplicação no “EdtURLZN”, para somente então clicar no IWButton1.Na primeira aplicação, no evento OnClick do IWButton1, chamamos o método “AddToInitProc” de “TformMain”. Este método nos permite “colocar” scripts (Javascript) que serão executados quando a função “Initialize()" padronizada pelo framework Intraweb, quando o browser estiver interpretando a tag “body”, da página construída pelo Intraweb. No body onload é definida a chamada a função “Initialize()". function Initialize() {InitSubmitter();StaticInit();if (document.body.leftMargin < 0 && document.body.topMargin < 0) {  document.body.leftMargin = 0;  document.body.topMargin = 0;}InitRects(614, 451);InitIWCLObjects();window.open("http://localhost/requesestacaozn/?estacaoZnValor=Landjah Estação ZN")}Então, podemos concluir que, no Intraweb quando você precisar executar uma função qualquer no evento “onload” no body basta para isso passá-la como parâmetro no método “AddToInitProc” do TIWForm em questão.Na segunda aplicação,  “AppEstacaoZNSubmit”, o comando"WebApplication.Request.QueryFields.Values" pode ser entendido da mesma forma que o Webbrocker trabalha com o protocolo http.Podemos também recuperas outras variáveis através do  objeto “WebApplication”, sua propriedade “Request”, tais como o “RemoteHost”, “UserAgent” e etc..Por hora é só .... Até a próx!!!