diff --git a/packages/fcl-web/src/webdata/extjsjson.pp b/packages/fcl-web/src/webdata/extjsjson.pp index 4525d74037..22daedb7c3 100644 --- a/packages/fcl-web/src/webdata/extjsjson.pp +++ b/packages/fcl-web/src/webdata/extjsjson.pp @@ -26,12 +26,15 @@ type { TExtJSJSONDataFormatter } TJSONObjectEvent = Procedure(Sender : TObject; AObject : TJSONObject) of Object; + TJSONExceptionObjectEvent = Procedure(Sender : TObject; E : Exception; AResponse : TJSONObject) of Object; + TExtJSJSONDataFormatter = Class(TExtJSDataFormatter) private FAfterDataToJSON: TJSONObjectEvent; FAfterRowToJSON: TJSONObjectEvent; FBeforeDataToJSON: TJSONObjectEvent; FBeforeRowToJSON: TJSONObjectEvent; + FOnErrorResponse: TJSONExceptionObjectEvent; FOnMetaDataToJSON: TJSONObjectEvent; procedure SendSuccess(ResponseContent: TStream; AddIDValue : Boolean = False); protected @@ -61,6 +64,8 @@ type Property AfterDataToJSON : TJSONObjectEvent Read FAfterDataToJSON Write FAfterDataToJSON; // Called just before response object will be streamed (response passed to handler). Property BeforeDataToJSON : TJSONObjectEvent Read FBeforeDataToJSON Write FBeforeDataToJSON; + // Called when an exception is caught and formatted. + Property OnErrorResponse : TJSONExceptionObjectEvent Read FOnErrorResponse Write FOnErrorResponse; end; implementation @@ -343,6 +348,8 @@ begin If Length(L)>0 then ResponseContent.WriteBuffer(L[1],Length(L)); Resp.Add(RowsProperty,TJSONArray.Create()); + If Assigned(FOnErrorResponse) then + FOnErrorResponse(Self,E,Resp); finally Resp.Free; end; diff --git a/packages/fcl-web/src/webdata/extjsxml.pp b/packages/fcl-web/src/webdata/extjsxml.pp index 85517b5bd9..02e6951768 100644 --- a/packages/fcl-web/src/webdata/extjsxml.pp +++ b/packages/fcl-web/src/webdata/extjsxml.pp @@ -38,6 +38,8 @@ Type { TExtJSXMLDataFormatter } TXMLElementEvent = Procedure (Sender : TObject; AElement : TDOMElement) of object; + TXMLExceptionObjectEvent = Procedure(Sender : TObject; E : Exception; AResponse : TDOMElement) of Object; + TExtJSXMLDataFormatter = Class(TExtJSDataFormatter) private FAfterDataToXML: TXMLElementEvent; @@ -45,6 +47,7 @@ Type FBeforeDataToXML: TXMLElementEvent; FBeforeRowToXML: TXMLElementEvent; FDP: String; + FOnErrorResponse: TXmlExceptionObjectEvent; FReP: String; FRP: String; function IsDocumentStored: boolean; @@ -74,6 +77,8 @@ Type Property BeforeDataToXML : TXMLElementEvent Read FBeforeDataToXML Write FBeforeDataToXML; // Called after all rows are appended to root element (passed to handler). Property AfterDataToXML : TXMLElementEvent Read FAfterDataToXML Write FAfterDataToXML; + // Called when an exception is caught and formatted. + Property OnErrorResponse : TXmlExceptionObjectEvent Read FOnErrorResponse Write FOnErrorResponse; end; implementation @@ -148,6 +153,8 @@ begin C.AppendChild(XML.CreateTextNode(E.Message)) else C.AppendChild(XML.CreateTextNode(SerrNoExceptionMessage)); + If Assigned(FOnErrorResponse) then + FOnErrorResponse(Self,E,El); WriteXMLFile(XML,ResponseContent); Finally XML.Free;