Index: VerpakkingsDefinitie/Main.dfm =================================================================== diff -u -r547 -r552 --- VerpakkingsDefinitie/Main.dfm (.../Main.dfm) (revision 547) +++ VerpakkingsDefinitie/Main.dfm (.../Main.dfm) (revision 552) @@ -11,6 +11,7 @@ Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False + OnCloseQuery = FormCloseQuery OnCreate = FormCreate DesignSize = ( 474 Index: VerpakkingsDefinitie/UI/Subscherm.pas =================================================================== diff -u -r551 -r552 --- VerpakkingsDefinitie/UI/Subscherm.pas (.../Subscherm.pas) (revision 551) +++ VerpakkingsDefinitie/UI/Subscherm.pas (.../Subscherm.pas) (revision 552) @@ -19,12 +19,12 @@ property Navigator: TFormMain Read FNavigator write FNavigator; property ApplicationContextObj: TApplicationContext Read FApplicationContext write FApplicationContext; public - Constructor Create(AOwner: TComponent; Navigator: TFormMain; var ApplicationContext: TApplicationContext); overload; + Constructor Create(AOwner: TComponent; Navigator: TFormMain; ApplicationContext: TApplicationContext); overload; end; implementation -constructor TFormSubscherm.Create(AOwner: TComponent; Navigator: TFormMain; var ApplicationContext: TApplicationContext); +constructor TFormSubscherm.Create(AOwner: TComponent; Navigator: TFormMain; ApplicationContext: TApplicationContext); begin inherited Create(AOwner); Index: VerpakkingsDefinitie/UI/LogInScherm.pas =================================================================== diff -u -r551 -r552 --- VerpakkingsDefinitie/UI/LogInScherm.pas (.../LogInScherm.pas) (revision 551) +++ VerpakkingsDefinitie/UI/LogInScherm.pas (.../LogInScherm.pas) (revision 552) @@ -6,7 +6,8 @@ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, - Subscherm; + Main, ApplicationContext, Subscherm, + Agent; type TFormLogin = class(TFormSubscherm) @@ -23,19 +24,27 @@ procedure PanelLogInMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PanelButtonEnableChange(Sender: TPanel); private + FAgent: TAgent; procedure Login(); public - { Public declarations } + Constructor Create(AOwner: TComponent; Navigator: TFormMain; ApplicationContext: TApplicationContext; Agent: TAgent); + overload; end; implementation uses - Main, Util, - UserServerService, Agent, ApplicationContext; + Util, + UserServerService; {$R *.dfm} +constructor TFormLogin.Create(AOwner: TComponent; Navigator: TFormMain; ApplicationContext: TApplicationContext; Agent: TAgent); +begin + inherited Create(AOwner, Navigator, ApplicationContext); + self.FAgent := Agent; +end; + procedure TFormLogin.FormCreate(Sender: TObject); begin EditWachtwoord.PasswordChar := '*'; // Verberg paswoord @@ -85,35 +94,28 @@ procedure TFormLogin.Login(); var - Agent: TAgent; ErrorMessage: string; begin - Agent := nil; - try - Agent := TAgent.Create(); - Agent.GebruikerAanmelden(EditGebruikersnaam.Text, EditWachtwoord.Text, ApplicationContextObj.UserServerServiceContext); + FAgent.GebruikerAanmelden(EditGebruikersnaam.Text, EditWachtwoord.Text, ApplicationContextObj.UserServerServiceContext); - if ApplicationContextObj.UserServerServiceContext.IsOK then + if ApplicationContextObj.UserServerServiceContext.IsOK then + begin + (self.Navigator as TFormMain).NavigeerNaar(Main.NAVZOEKPRODUCTEN); + end + else + begin + // Login gefaald + ErrorMessage := ApplicationContextObj.UserServerServiceContext.ErrorMessage; + if ApplicationContextObj.UserServerServiceContext.InternalErrorMessage <> '' then begin - (self.Navigator as TFormMain).NavigeerNaar(Main.NAVZOEKPRODUCTEN); - end - else - begin - // Login gefaald - ErrorMessage := ApplicationContextObj.UserServerServiceContext.ErrorMessage; - if ApplicationContextObj.UserServerServiceContext.InternalErrorMessage <> '' then - begin - ErrorMessage := ErrorMessage + sLineBreak + ApplicationContextObj.UserServerServiceContext.InternalErrorMessage; - end; + ErrorMessage := ErrorMessage + sLineBreak + ApplicationContextObj.UserServerServiceContext.InternalErrorMessage; + end; - if MessageDlg(ErrorMessage, TMsgDlgType.mtInformation, [mbRetry, mbCancel], 0, mbCancel) = mrRetry then - begin - // Retry gedrukt - Login(); - end; + if MessageDlg(ErrorMessage, TMsgDlgType.mtInformation, [mbRetry, mbCancel], 0, mbCancel) = mrRetry then + begin + // Retry gedrukt + Login(); end; - finally - Agent.Free(); end; end; Index: VerpakkingsDefinitie/WS/Agent.pas =================================================================== diff -u -r551 -r552 --- VerpakkingsDefinitie/WS/Agent.pas (.../Agent.pas) (revision 551) +++ VerpakkingsDefinitie/WS/Agent.pas (.../Agent.pas) (revision 552) @@ -18,10 +18,12 @@ FUserServerSoap: UserServerSoap; procedure RegistreerLoginGegevens(UserServerServiceContext: TUserServerServiceContext; pxLogInObj: pxLogIn); procedure RegistreerMislukteLogin(UserServerServiceContext: TUserServerServiceContext; pxStatusObj: pxStatus); + procedure RegistreerLogout(UserServerServiceContext: TUserServerServiceContext); + procedure RegistreerMislukteLogout(UserServerServiceContext: TUserServerServiceContext; pxStatusObj: pxStatus); public Constructor Create(); overload; - procedure GebruikerAanmelden(GebruikersNaam: string; Wachtwoord: string; - UserServerServiceContext: TUserServerServiceContext); + procedure GebruikerAanmelden(GebruikersNaam: string; Wachtwoord: string; UserServerServiceContext: TUserServerServiceContext); + procedure GebruikerAfmelden(UserServerServiceContext: TUserServerServiceContext); end; implementation @@ -89,4 +91,55 @@ UserServerServiceContext.InternalErrorMessage := pxStatusObj.InternalMessage; end; +procedure TAgent.GebruikerAfmelden(UserServerServiceContext: TUserServerServiceContext); +var + LogOutData: UserServerService.LogOut; + LogOutResponseObj: UserServerService.LogOutResponse; +begin + LogOutData := nil; + LogOutResponseObj := nil; + try + // Skip als de gebruikers nooit was ingelogd + if UserServerServiceContext.SessionKey = '' then + exit; + + // Request + LogOutData := UserServerService.LogOut.Create(); + LogOutData.SessionKey := UserServerServiceContext.SessionKey; + + LogOutResponseObj := FUserServerSoap.LogOut(LogOutData); + + // Response + if LogOutResponseObj.LogOutResult = nil then + begin + // Gelukt + RegistreerLogout(UserServerServiceContext); + end + else + begin + // Mislukt + RegistreerMislukteLogout(UserServerServiceContext, LogOutResponseObj.LogOutResult); + end; + finally + LogOutData.Free(); + LogOutResponseObj.Free(); + end; +end; + +procedure TAgent.RegistreerLogout(UserServerServiceContext: TUserServerServiceContext); +begin + UserServerServiceContext.IsOK := True; + UserServerServiceContext.ErrorMessage := ''; + UserServerServiceContext.InternalErrorMessage := ''; + UserServerServiceContext.SessionKey := ''; + UserServerServiceContext.GebruikersNaam := ''; +end; + +procedure TAgent.RegistreerMislukteLogout(UserServerServiceContext: TUserServerServiceContext; pxStatusObj: pxStatus); +begin + UserServerServiceContext.IsOK := pxStatusObj.IsOK; + UserServerServiceContext.ErrorMessage := pxStatusObj.Message_; + UserServerServiceContext.InternalErrorMessage := pxStatusObj.InternalMessage; +end; + end. Index: VerpakkingsDefinitie/Main.pas =================================================================== diff -u -r551 -r552 --- VerpakkingsDefinitie/Main.pas (.../Main.pas) (revision 551) +++ VerpakkingsDefinitie/Main.pas (.../Main.pas) (revision 552) @@ -6,7 +6,7 @@ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, - ApplicationContext; + ApplicationContext, Agent; const NAVHOME = 0; @@ -16,14 +16,14 @@ type TFormMain = class(TForm) PanelMain: TPanel; - procedure FormCreate(Sender: TObject); - procedure NavigeerNaar(schermId: Integer); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private - fAppContext: TApplicationContext; - fHuidigScherm: TForm; + FAppContext: TApplicationContext; + FHuidigScherm: TForm; + FAgent: TAgent; public - { Public declarations } + procedure NavigeerNaar(schermId: Integer); end; var @@ -36,10 +36,16 @@ {$R *.dfm} +procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + FAgent.GebruikerAfmelden(FAppContext.UserServerServiceContext); // Antwoord wordt genegeerd +end; + procedure TFormMain.FormCreate(Sender: TObject); begin - fAppContext := TApplicationContext.Create(); - { TODO -cMain: Wat doet dit in de originele applicatie?: fUiContext.ImagesScherm := TImagesScherm.Create(self); } + FAppContext := TApplicationContext.Create(); + FAgent := TAgent.Create(); + { TODO -cMain: Wat doet dit in de originele applicatie?: fUiContext.ImagesScherm := TImagesScherm.Create(self); } { TODO -cMain: Kijken of "VerwerkParamStrings;" nodig is } { TODO -cNavigatie : 'Scherm' cre�ren vanuit code. Tweede 'scherm' maken met twee secties (30%-70%). } @@ -50,26 +56,25 @@ Self.NavigeerNaar(NAVLOGIN); end; -// { TODO -cMain: afmeld optie toevoegen } - +// Dit event wordt altijd aangeroepen, OnClose niet procedure TFormMain.NavigeerNaar(schermId: Integer); begin Application.ProcessMessages; // Interrupts the execution of an application so that it can process the message queue. // Volgende subscherm laden in panel - fHuidigScherm.Free; + FHuidigScherm.Free; case schermId of NAVHOME: - fHuidigScherm := TFormZoekProducten.Create(PanelMain, Self, fAppContext); + FHuidigScherm := TFormZoekProducten.Create(PanelMain, Self, FAppContext); NAVLOGIN: - fHuidigScherm := TFormLogin.Create(PanelMain, Self, fAppContext); + FHuidigScherm := TFormLogin.Create(PanelMain, Self, FAppContext, FAgent); NAVZOEKPRODUCTEN: - fHuidigScherm := TFormZoekProducten.Create(PanelMain, Self, fAppContext); + FHuidigScherm := TFormZoekProducten.Create(PanelMain, Self, FAppContext); end; - fHuidigScherm.Parent := PanelMain; - fHuidigScherm.Align := alClient; - fHuidigScherm.Show; + FHuidigScherm.Parent := PanelMain; + FHuidigScherm.Align := alClient; + FHuidigScherm.Show; end; end.