202 Lotus blogs updated hourly. Who will post next? Home | Blogs | Search | About 
 
Latest 7 Posts
Hier sollte man dabei sein - Social Connection 12 in Wien
Mon, Sep 25th 2017 4
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Thu, May 26th 2016 7
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Mon, May 2nd 2016 7
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Mon, May 2nd 2016 7
Cloud Extender zur Steuerung eines Notes Traveler Servers
Sat, Jan 16th 2016 8
Cloud Extender erfordert keinen lokalen Notes Client
Sat, Jan 16th 2016 9
Traveler Task start nicht
Sat, Jan 16th 2016 9
Top 10
Verwendung der iNotes Active-X Controls in restriktiven Arbeitsplatzumgebungen
Sun, Sep 28th 2014 10
Cloud Extender zur Steuerung eines Notes Traveler Servers
Sat, Jan 16th 2016 10
Traveler Task start nicht
Sat, Jan 16th 2016 9
Cloud Extender erfordert keinen lokalen Notes Client
Sat, Jan 16th 2016 9
Traveler Task start nicht
Sat, Jan 16th 2016 9
Automatische Statusänderung in Sametime bei Besprechungen
Wed, Aug 26th 2009 8
Cloud Extender zur Steuerung eines Notes Traveler Servers
Sat, Jan 16th 2016 8
mailto Links starten Internet Explorer statt Lotus Notes
Mon, Nov 25th 2013 7
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Mon, May 2nd 2016 7
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Thu, May 26th 2016 7


"Object variable not set" beim Beenden eines Agenten - Die Rache mangelnder Fehlerbehandlung
Twitter Google+ Facebook LinkedIn Addthis Email Gmail Flipboard Reddit Tumblr WhatsApp StumbleUpon Yammer Evernote Delicious
Manfred Meise    

Jüngst habe ich eine Menge Zeit für die Fehlersuche bei einem Agenten (welcher zahlreich eigene Klassen nutzt) verwendet. Dieser erzeugte (in einzelnen seltenen Fällen) einen Laufzeitfehler "Object variable not" - wer kennt ihn nicht?.... Offensichtlich eine Stelle Code, bei der schlampig programmiert wurde - doch wo? Nach intensiver Analyse stellt sich heraus, dass dieser Fehler nach dem letzten ausführbaren Statement ("Exit Sub" im Terminate Event) des Agenten generiert wurde. Schnell ist mir klar: Das kann nur ein Destructor ("Sub Delete") einer eigenen Klasse sein - doch welcher?

Das Analyseergebnis (in vereinfachter Form) zeigt den Übeltäter:

 
Option
Public
Option
Declare
%Include
"LsConst.lss"
Class
myClass
    Private m_doc As NotesDocument
    Sub New (doc As NotesDocument)
            Set Me.m_doc = doc
    End Sub
    Sub Delete
            Call Me.m_doc.Save(True, False)        
    End Sub
End
Class
Sub
Initialize
    Dim objMyClass As MyClass
    Set objMyClass = New MyClass (Nothing)
End
Sub


Hier kann es (durch verschiedene Ursachen) geschehen, dass das bei der Instanziierung übergebene NotesDocument beim Zerstören eines Objektes der Klasse nicht mehr existiert.

Hätte ich hier

1. Konservativ codiert (Prüfung ob ein vermutetes Objekt auch vorhanden ist, bevor man darauf zugreift)
und/oder
2. Fehlerbehandlung in jede Routine, sowie Methoden von Klassen

eingebaut, dann wird der Umfang des Codes bei einfachen Funktionen zwar erheblich größer, doch auch die Fehlersuche ganz einfach.

 
Option
Public
Option
Declare

%Include
"LsConst.lss"
Class
myClass
    Private m_doc As NotesDocument
    Sub New (doc As NotesDocument)
            On Error GoTo ErrorBubble        
            Set Me.m_doc = doc
SingleExit:
            Exit Sub
            '......................................................................................................        
ErrorBubble:        
            Error Err, Error & Chr(13) & { --> in } & TypeName(Me) & {.} & GetThreadInfo (LSI_THREAD_PROC) &  { : } & Erl        
            Resume SingleExit
    End Sub
    Sub Delete
            On Error GoTo ErrorBubble
            If Not (Me.m_doc Is Nothing) Then Call Me.m_doc.Save(True, False)        'Konservative Programmierung
            Call Me.m_doc.Save(True, False)                                                'Riskante Programmierung
SingleExit:
            Exit Sub
            '......................................................................................................        
ErrorBubble:        
            Error Err, Error & Chr(13) & { --> in } & TypeName(Me) & {.} & GetThreadInfo (LSI_THREAD_PROC) &  { : } & Erl        
            Resume SingleExit
    End Sub
End
Class
Sub
Initialize
    On Error GoTo ErrorBubble
    Dim objMyClass As MyClass
    Set objMyClass = New MyClass (Nothing)
SingleExit:
    Exit Sub
    '......................................................................................................        
ErrorBubble:        
    Error Err, Error & Chr(13) & { --> in } & GetThreadInfo (LSI_THREAD_PROC) &  { : } & Erl        
    Resume SingleExit
End
Sub


Image:"Object variable not set" beim Beenden eines Agenten - Die Rache mangelnder Fehlerbehandlung
Diese Fehlermeldung weist auf die Zeile 28 der Methode "Delete" in Klasse "MyClass", welche in Zeile 11 der Initialize Methode des Agenten ausgelöst wurde.

Also: Stets Fehlerbehandlungen einbauen (im Beispiel ein simples "Bubble up" Prinzip, das Fehler stufenweise bis an die oberste Aufruferebene zurückliefert). Man tut sich selbst etwas gutes.

---------------------
http://www.mmi-consult.de/FAQ/dx/object-variable-not-set-beim-beenden-eines-agenten-die-rache-mangelnder-fehlerbehandlung.htm
Mar 18, 2013
3 hits



Recent Blog Posts
4
Hier sollte man dabei sein - Social Connection 12 in Wien
Mon, Sep 25th 2017 9:20a   Manfred Meise
Wien ist stets eine Reise wert: Nicht nur wegen des einzigartigen Charmes ("Wiener Schmäh") oder der zahlreichen historischen Gebäude - nein auch für IT Menschen wie uns wegen der Social Connection 12 am 16. und 17. Oktober 2017 ! Denn hier trifft sich die IBM Connections Gemeinde im Palais Pallavicini . Allein dieses historische Gebäude mit seinen Prunksälen ist sehenswert. Von Gryffindor - Eigenes Werk, CC BY 2.5, Palais Pallavicini Hier können Sie im Rahmen von Gleichgesinnten
7
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Mon, May 2nd 2016 3:45p   Manfred Meise
Auch dieses Jahr hat sich das chileische Energieministerium entschieden, einen Wechsel der Zeitzone und damit WiedereinfĂĽhrung der Sommer- und Winterzeit zu machen. Allerdings wissen Politiker wohl nicht, welche Aufwand sie in der Industrie (wie z.B. der IT) sie damit verursachen. Ab dem Stichtag wird die RĂĽckkehr zur Zeitzone von bisher UTC-3 (nur Normalzeit) zu UTC-4 (mit Sommer-/Winterzeit) wirksam. Dieses muss in System technisch nachgezogen werden (besonders wenn System mit zentra
8
Cloud Extender zur Steuerung eines Notes Traveler Servers
Sat, Jan 16th 2016 12:43p   Manfred Meise
Um Mailboxen auf einem IBM Notes Traveler Servermittels MaaS360 zu managen, ist der Cloud Extender erforderlich. Da die Dokumentation leicht missverständlich ist, habe ich hier eine kurze Anleitung zusammengetragen. Voraussetzungen Zugriff auf die nachfolgenden URLs von der Cloud Extender Maschine. Man erhält entweder die Nachricht "It Works!" oder "1234567890" bzw. eine leere Seite im Fehlerfall https://mpns.maas360.com https://services.fiberlink.com http://internettest.fi
9
Cloud Extender erfordert keinen lokalen Notes Client
Sat, Jan 16th 2016 12:32p   Manfred Meise
Zum Management unser mobilen Geräte sowie die der Kunden unseres Managed Services Angebotes setzen wir MaaS360 in Verbindung mit dem Cloud Extender ein, um Email.Konten (Notes Traveler) zu managen. Leider findet sich in der MaaS360 Produktinformation eine irreführender Information. Hier wird als Voraussetzung ein durchkonfigurierter Notes Client auf dem Systen des Cloud Extenders genenannt, Diese Information/Formulierung führt leicht in die Irre und trifft lediglich für die Verw
9
Traveler Task start nicht
Sat, Jan 16th 2016 12:01p   Manfred Meise
Die Installation in Konfiguration eines Standard-Traveler Servers gestaltet sich einfach und ist kein Hexenwerk. Schwieriger wird es, wenn das Management ĂĽber MaaS360 erfolgen soll und zu diesem Zweck ein Cloud Extender (auf der selben Maschine) installiert werden soll. Folgt man der IBM Installationaleitung, so ist als Voraussetzung ein durchkonfigurierter Lotus Notes Client auf dem System erforderlich. Dieses bedeutete im Fall unseres Cloud-Servers: Windows 2008 R2 Domino 9.0.1 (64 bit
2
Wie finde ich aktuelle Notes / Domino 9.0.1 FixPacks?
Sun, Apr 26th 2015 11:36a   Manfred Meise
IBM hat uns eine Sammlung aktueller FixPacks sowie deren Download-Optionen in einem Artikel in der Knowledge Base zusammengestellt. Dort findent sich auch ein weiterführender Link, welcher die zugehörigen Interim Fixes listet und Links zum Download der jeweiligen Interim Fixes anbietet: http://www-01.ibm.com/support/docview.wss?uid=swg24037141
2
Chile ändert mit Wirkung zum 26.04.2015 seine Zeitzone
Fri, Apr 24th 2015 1:04p   Manfred Meise
Auch Chile hat sich entschieden, keine jährlichen Wechsel zwischen Sommer- und Winterzeit mehr zu machen. Allerdings hat man auch entschieden ab dem Stichtag der vorgesehen Rückkehr zur bisherigen Normalzeit in der aktuellen Sommerzeit zu bleiben und diese zukünftig als Normalzeit zu führen. Dieses kommt einem Wechsel der Zeitzone von bisher UTC-4 (mit Sommer-/Winterzeit) auf jetzt UTC-3 (nur Normalzeit) gleich. Dieses muss in System technisch nachgezogen werden (besonders wenn S
0
Erneute Registrierung eines gelöschten Benutzers schlägt fehl
Fri, Apr 24th 2015 12:36p   Manfred Meise
Gelegentlich kommt es vor, dass Benutzer registiert werden (z.B. Schreibfehler im Namen). Bis der Account noch nicht Betrieb ist (Notes Client konfiguriert ist), stelle ich mir als Administrator stets die Farge, wei ich den Fehler am einfachsten (schnellsten) beseitigen kann und somit kurzfristig der richtigen Account zur Verfügung stellen kann. Hier bieten sich aus meiner Sicht grundsätzlich zwei Vorgehensweisen an: 1. Arbeitsplatz in Betrieb nehmen und dann kurzfristig die Umbenennun
2
Erneute Registrierung eines gelöschten Benutzers schlägt fehl
Fri, Apr 24th 2015 12:36p   Manfred Meise
Gelegentlich kommt es vor, dass Benutzer registiert werden (z.B. Schreibfehler im Namen). Bis der Account noch nicht Betrieb ist (Notes Client konfiguriert ist), stelle ich mir als Administrator stets die Farge, wei ich den Fehler am einfachsten (schnellsten) beseitigen kann und somit kurzfristig der richtigen Account zur Verfügung stellen kann. Hier bieten sich aus meiner Sicht grundsätzlich zwei Vorgehensweisen an: 1. Arbeitsplatz in Betrieb nehmen und dann kurzfristig die Umbenennun
0
Erneute Registrierung eines gelöschten Benutzers schlägt fehl
Fri, Apr 24th 2015 12:36p   Manfred Meise
Gelegentlich kommt es vor, dass Benutzer registiert werden (z.B. Schreibfehler im Namen). Bis der Account noch nicht Betrieb ist (Notes Client konfiguriert ist), stelle ich mir als Administrator stets die Farge, wei ich den Fehler am einfachsten (schnellsten) beseitigen kann und somit kurzfristig der richtigen Account zur Verfügung stellen kann. Hier bieten sich aus meiner Sicht grundsätzlich zwei Vorgehensweisen an: 1. Arbeitsplatz in Betrieb nehmen und dann kurzfristig die Umbenennung du




Created and Maintained by Yancy Lent - About - Planet Lotus Blog - Advertising - Mobile Edition