Delphi - Intraweb: Passar e recuperar parâmetros entre requisições HTTP
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} interface uses 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.
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} interface uses 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.
Feito isso já é possível testar. No browser, chame o diretório virtual definido no deploy da primeira aplicação (AppEstacaoZNSubmit.dll).
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") }
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!!!
Artigo completo (View Full Post)