Atozed Forums
Unitialized Reply - Printable Version

+- Atozed Forums (https://www.atozed.com/forums)
+-- Forum: Atozed Software Products (https://www.atozed.com/forums/forum-1.html)
+--- Forum: IntraWeb (https://www.atozed.com/forums/forum-3.html)
+---- Forum: Português (https://www.atozed.com/forums/forum-5.html)
+----- Forum: IntraWeb Dúvidas Gerais (https://www.atozed.com/forums/forum-17.html)
+----- Thread: Unitialized Reply (/thread-1439.html)



Unitialized Reply - Raphael - 12-17-2019

Bom dia,
Estou utilizando de ContentHandlers para realizar requisições de dados simples, como por exemplo obter um data source json para preenchimento de um Chart ou até mesmo a criação de um datatable de forma dinâmica.
Exemplificando melhor a questão:

Code:
                  solicitação
Pagina de Dados ----------------> ContentHandler

                  resposta
Pagina de Dados <---------------- ContentHandler


No entanto estou recebendo a seguinte mensagem "Uninitialized Reply".

Segue abaixo meu fonte:
  • Server Controller
Code:
procedure TIWServerController.IWServerControllerBaseConfig(Sender: TObject);
begin
  // This framework requires to disable IW embeded JQuery
  JavaScriptOptions.RenderjQuery := False;

  with THandlers.Add('/', 'getGraphicData', TContentChart.Create) do
  begin
    CanStartSession := false;
    RequiresSessionStart := true;
  end;

end;



  • ContentHandler

Code:
  if Assigned(aReply) then
    begin

      //Verify action
      if aParams.Values['action'] = 'GV' then
      begin

        try
          FDataSet := TFDQuery.Create(nil);
          FDataSet.SQL.Clear;
          ...
          ...
          FDataSet.Open();

          JSON := '[' + sLineBreak;
          FDataSet.First;
          while not FDataSet.Eof do
          begin
           ...
           ...
            FDataSet.Next;
          end;
          JSON := ']' + sLineBreak;
          aReply.WriteString(JSON);

        finally
          FreeAndNil(FDataSet);
        end;

      end;
    end;
  end;
 

Está faltando ou preciso implementar algo?
Desde já agradeço a atenção.


RE: Unitialized Reply - Jose Nilton Pace - 12-17-2019

Olá Raphael, inverta a ordem e faça um teste:
Code:
procedure TIWServerController.IWServerControllerBaseConfig(Sender: TObject);
begin
  // This framework requires to disable IW embeded JQuery
  JavaScriptOptions.RenderjQuery := False;

  with THandlers.Add('/', 'getGraphicData', TContentChart.Create) do
  begin
    CanStartSession := True;        {<-- Aqui}
    RequiresSessionStart := False;  {<-- Aqui}
  end;



RE: Unitialized Reply - Raphael - 12-17-2019

Olá Nilton,
Fiz o teste conforme pediu, e continuo a receber a mesma mensagem.

Para mais informações:

Versão Delphi: XE5
Versão IW: 14.2.8

Att,


RE: Unitialized Reply - Jose Nilton Pace - 12-17-2019

Manda o seu ContentHandle COMPLETO, pode ser nele o problema.


RE: Unitialized Reply - Raphael - 12-17-2019

Conforme solicitado, segue fonte.
OBS: Algumas partes de código foram ocultas para preservar as regas de negócio do cliente, e não influenciam no caso.



Code:
unit IWContents.Test;

interface

uses
  Classes,
  IW.Content.Base,
  HTTPApp,
  IWApplication,
  IW.HTTP.Request,
  IW.HTTP.Reply;

type
  TContentChart = class(TContentBase)
  protected
    function Execute(aRequest: THttpRequest; aReply: THttpReply; const aPathname: string; aSession: TIWApplication; aParams: TStrings): boolean; override;
  public
    constructor Create; override;
  end;

implementation

uses
  IW.Content.Handlers,
  IWMimeTypes,
  FireDAC.Comp.Client,
  ServerController,
  System.DateUtils,
  System.SysUtils,
  ...;
 
constructor TContentChart.Create;
begin
  inherited;
  mFileMustExist := False;
  mCanStartSession:= true;
//  mRequiresSessionStart := true;
end;

function TContentChart.Execute(aRequest: THttpRequest; aReply: THttpReply; const aPathname: string; aSession: TIWApplication; aParams: TStrings): boolean;
var
  JSON: string;
  FDataSet: TFDquery;
begin
  Result := true;
  JSON := '';

  if aParams.Count > 0 then
  begin

    if Assigned(aReply) then
    begin

      //Verify Action
      if aParams.Values['action'] = 'GV' then
      begin

        try
          FDataSet := TFDQuery.Create(nil);
          FDataSet.SQL.Clear;
          ...
          FDataSet.Open();

          JSON := '[' + sLineBreak;
          FDataSet.First;
          while not FDataSet.Eof do
          begin
            ...
            FDataSet.Next;
          end;
          JSON := ']' + sLineBreak;
          aReply.WriteString(JSON);

        finally
          FreeAndNil(FDataSet);
        end;

      end;
    end;
  end;

end;

initialization

end.



RE: Unitialized Reply - Jose Nilton Pace - 12-17-2019

Raphael, duas coisinhas pra testar:
1o.
Code:
constructor TContentChart.Create;
begin
  inherited;
  mFileMustExist := False;  {<-- Somente esse}
end;
2o.
Code:
if Assigned(aReply) then
    begin
      aReply.ContentType:= MIME_JSON;  {<-- AQUI}
      //Verify Action
      if aParams.Values['action'] = 'GV' then



RE: Unitialized Reply - Raphael - 12-17-2019

Jose Nilton, mesma mensagem.
Já tentei diversos métodos diferentes e todos resultam neste mesmo problema.

"...raised exception class Exception with message 'Uninitialized reply".


RE: Unitialized Reply - kudzu - 12-17-2019

"...raised exception class Exception with message 'Uninitialized reply".

This happens when NO response is provided. You must *always* provide a response of some sort.


RE: Unitialized Reply - Raphael - 12-17-2019

Obrigado Nilton pela Ajuda.
Thanks kudzu for your answer.

O problema foi resolvido criando um novo ContentHandler do zero.