Situatie:
Het ERP pakket dat hier gebruikt wordt heeft de mogelijk om via COM benaderd te worden. Deze COM heeft o.a. een functie Login() en Logout(). Bij de door mij te maken applicatie moet ingelogd worden, het idee daarbij is dat men inlogt met de credentials die men gebruikt in het ERP pakket. In de te maken applicatie controleer ik dan met behulp van een aanroep naar Login() of die gegevens kloppen. Deze geeft namelijk 'true' terug wanneer er ingelogd is. Wanneer ik 'true' terug krijgen, kloppen de gegevens en krijgt de persoon toegang tot mijn applicatie.
Probleem:
Aanname: Er is ingelogd met juiste credentials en Login() heeft een 'true' teruggegeven.
De gebruiker wil nu uitloggen en onder een andere naam of gewoon opnieuw inloggen. We roepen Logout() aan en vervolgens loggen we in met de (nieuwe) credentials, er volgt dus weer een aanroep naar Login(), maar deze returned nu 'false' ondanks dat de credentials wel degelijk correct zijn.
Een test (in VB) door de leverancier liet zien dat als je het object verwijderd en weer opnieuw aanmaakt, dat Login() wel weer 'true' geeft bij juiste credentials.
Dat ben ik dus gaan uitproberen, zet die variabele op null (na een Logout()) en creëer hem opnieuw bij een nieuwe inlog, dat werkt, geen enkel probleem, toch? Wel dus, want de aangeroepen COM blijft als process draaien en er wordt gewoon een nieuw process gestart. Bij het uiteindelijk afsluiten van de te maken applicatie, sluit hij het laatst gestarte process af en de rest blijft actief.
Oplossing:
Nou had ik bedacht dat ik misschien zelf kan bijhouden dat het process gestart is en deze gewoon geforceerd via Process.Kill() kan afsluiten na een aanroep naar Logout(). Een klein probleempje hierbij is dat het process, aangezien het om de exe van het ERP pakket gaat, waarschijnlijk al minimaal één keer actief is bij de gebruiker. Ik wil er dus achter komen wie het process gestart heeft, was dat de gebruiker die het ERP pakket gestart heeft of was dat mijn applicatie? Hij moet natuurlijk alleen dat process afsluiten dat door mijn applicatie is gestart.
Vraag:
Kan ik zien wie het process gestart heeft of is dat niet te achterhalen? Dan kan ik namelijk gewoon dat process afsluiten. Of moet ik gaan bijhouden welke gestart is en hoe weet ik dan alsnog dat mijn programma dat was en niet de gebruiker die daarna nog een keer het ERP heeft gestart?
Overige:
Ergens lijkt het er overigens op dat Logout() niet goed is geïmplementeerd in de COM, helaas kan ik daar niets aan wijzigen. Het probleem is doorgegeven bij de leverancier van de software en deze gaat hier naar kijken, maar ik heb geen idee hoe lang dit gaat duren en of het juist opgelost gaat worden.
Het ERP pakket dat hier gebruikt wordt heeft de mogelijk om via COM benaderd te worden. Deze COM heeft o.a. een functie Login() en Logout(). Bij de door mij te maken applicatie moet ingelogd worden, het idee daarbij is dat men inlogt met de credentials die men gebruikt in het ERP pakket. In de te maken applicatie controleer ik dan met behulp van een aanroep naar Login() of die gegevens kloppen. Deze geeft namelijk 'true' terug wanneer er ingelogd is. Wanneer ik 'true' terug krijgen, kloppen de gegevens en krijgt de persoon toegang tot mijn applicatie.
Probleem:
Aanname: Er is ingelogd met juiste credentials en Login() heeft een 'true' teruggegeven.
De gebruiker wil nu uitloggen en onder een andere naam of gewoon opnieuw inloggen. We roepen Logout() aan en vervolgens loggen we in met de (nieuwe) credentials, er volgt dus weer een aanroep naar Login(), maar deze returned nu 'false' ondanks dat de credentials wel degelijk correct zijn.
Een test (in VB) door de leverancier liet zien dat als je het object verwijderd en weer opnieuw aanmaakt, dat Login() wel weer 'true' geeft bij juiste credentials.
Dat ben ik dus gaan uitproberen, zet die variabele op null (na een Logout()) en creëer hem opnieuw bij een nieuwe inlog, dat werkt, geen enkel probleem, toch? Wel dus, want de aangeroepen COM blijft als process draaien en er wordt gewoon een nieuw process gestart. Bij het uiteindelijk afsluiten van de te maken applicatie, sluit hij het laatst gestarte process af en de rest blijft actief.
Oplossing:
Nou had ik bedacht dat ik misschien zelf kan bijhouden dat het process gestart is en deze gewoon geforceerd via Process.Kill() kan afsluiten na een aanroep naar Logout(). Een klein probleempje hierbij is dat het process, aangezien het om de exe van het ERP pakket gaat, waarschijnlijk al minimaal één keer actief is bij de gebruiker. Ik wil er dus achter komen wie het process gestart heeft, was dat de gebruiker die het ERP pakket gestart heeft of was dat mijn applicatie? Hij moet natuurlijk alleen dat process afsluiten dat door mijn applicatie is gestart.
Vraag:
Kan ik zien wie het process gestart heeft of is dat niet te achterhalen? Dan kan ik namelijk gewoon dat process afsluiten. Of moet ik gaan bijhouden welke gestart is en hoe weet ik dan alsnog dat mijn programma dat was en niet de gebruiker die daarna nog een keer het ERP heeft gestart?
Overige:
Ergens lijkt het er overigens op dat Logout() niet goed is geïmplementeerd in de COM, helaas kan ik daar niets aan wijzigen. Het probleem is doorgegeven bij de leverancier van de software en deze gaat hier naar kijken, maar ik heb geen idee hoe lang dit gaat duren en of het juist opgelost gaat worden.