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)