Archive for: ‘März 2013’
Lotus Notes Clients stürzt beim Replizieren ab
Ein vollständiger Windows Neustart scheint anfangs Besserung zu versprechen (der Absturz beim Replizieren ließ einen Augenblick auf sich warten). Nun schien guter Rat teuer: Knowledgebase Einträge der IBM verwiesen lediglich auf einzelne Datenbanken, bei denen dieses Verhalten auftritt.
Doch nachgedacht und als Ursache eine fehlerhafte Replikatorseite in der Arbeitsumgebung in Betracht gezogen! Deshalb habe ich eine neue Arbeitsumgebung (mit den gleichen Daten wie bisher) erstellt (keine Kopie des Dokumentes !!!!) und aktiviert. Und siehe da: Alles im Grünes Bereich. Mein Lotus Notes Client repliziert wieder für mich. Nun kann ich wieder anfangen mich meiner eigentlichen Aufgabe zu widmen.
Lotus Notes Clients stürzt beim Replizieren ab
Ein vollständiger Windows Neustart scheint anfangs Besserung zu versprechen (der Absturz beim Replizieren ließ einen Augenblick auf sich warten). Nun schien guter Rat teuer: Knowledgebase Einträge der IBM verwiesen lediglich auf einzelne Datenbanken, bei denen dieses Verhalten auftritt.
Doch nachgedacht und als Ursache eine fehlerhafte Replikatorseite in der Arbeitsumgebung in Betracht gezogen! Deshalb habe ich eine neue Arbeitsumgebung (mit den gleichen Daten wie beisher) erstellt (keine Kopie des Dokumentes !!!!) und aktiviert. Und siehe da: Alles im Grünes Bereich. Mein Lotus Notes Client repliziert wieder für mich. Nun kann ich wieder anfangen mich meiner eigentlichen Aufgabe zu widmen.
Lotus Notes Clients stĂĽrzt beim Replizieren ab
Ein vollständiger Windows Neustart scheint anfangs Besserung zu versprechen (der Absturz beim Replizieren ließ einen Augenblick auf sich warten). Nun schien guter Rat teuer: Knowledgebase Einträge der IBM verwiesen lediglich auf einzelne Datenbanken, bei denen dieses Verhalten auftritt.
Doch nachgedacht und als Ursache eine fehlerhafte Replikatorseite in der Arbeitsumgebung in Betracht gezogen! Deshalb habe ich eine neue Arbeitsumgebung (mit den gleichen Daten wie bisher) erstellt (keine Kopie des Dokumentes !!!!) und aktiviert. Und siehe da: Alles im GrĂĽnes Bereich. Mein Lotus Notes Client repliziert wieder fĂĽr mich. Nun kann ich wieder anfangen mich meiner eigentlichen Aufgabe zu widmen.
“Object variable not set” beim Beenden eines Agenten – Die Rache mangelnder Fehlerbehandlung
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
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.
“Object variable not set” beim Beenden eines Agenten – Die Rache mangelnder Fehlerbehandlung
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
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, dass Fehler stufenweise bis an den oberste Aufruferebene zurückliefert). Man tut sich selbst etwas gutes.
“Object variable not set” beim Beenden eines Agenten – Die Rache mangelnder Fehlerbehandlung
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
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.
“Object variable not set” beim Beenden eines Agenten – Die Rache mangelnder Fehlerbehandlung
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
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.
[DE] Meine 10 Thesen zu Social Business in Deutschland auf dem #Twittwoch [Video]
Hier die Aufzeichnung vom Twittwoch, der während der CeBIT 2013 stattfand. Pia Kleine Wieskamp hatte mich eingeladen, einige Minuten zu sprechen, und ich habe gerne meine 10 Thesen zu Social Business in Deutschland vorgetragen:
Hier Link zu Foliensatz und zum orignären Blogartikel.
Lesenswert in diesem Zusammenhang der Beitrag vom geschätzten Gunnar Sohn: Warum deutsche Unternehmen anfangen sollten, mit dem Social Web zu spielen #twittwoch #cebit #webciety
Filed under: Deutsch Tagged: CeBIT, Germany, SocBiz
[DE] Wo bleibt der Aufschrei der angeblichen Netzelite zur Einstellung von Google Reader?
Unfassbar (mal wieder), diese Arroganz vom Gutkonzern:
Vor wenigen Tagen hatte Google bekannt gegeben, mehrere Dienste einzustellen und damit einen Proteststurm ausgelöst, vor allem, weil Google Reader ab 1. Juli nicht mehr funktionieren wird. Der beliebte Dienst aggregiert von Nutzern abonnierte RSS-Feeds unter anderem von Nachrichtenseiten und erlaubt es, diese zentral zu lesen, zu verwalten und zwischen mehreren Geräten zu synchronisieren. Die Nutzung sei in letzter Zeit zu Gunster sozialer Netze stark zurückgegangen, argumentiert Google.
via Feedly empfängt Google-Reader-Nutzer mit offenen Armen | heise online.
Die Nutzung sei zu Gunsten sozialer Netze zurückgegange. Zu Gunsten von Google+, hätte Google wohl gerne. Wo bleibt eigentlich der Aufschrei der sonst ach so gegenüber anderen Diensten wie Facebook etc. kritischen vermeintlichen Netzelite? Auf dem Google-Auge ist die wohl eher blind.
Filed under: Deutsch Tagged: Google, RSS
How to activate and use the expressions view in the SSJS debugger
Go to the "Window->Show Eclipse View" menu and activate the "expressions" view.
After that we can use the expressions view to analyze the state of all objects available in our code when the execution is stopped at a breakpoint in the debugger.
For example we have the following serverside java script code in our xPage.
var view=session.getCurrentDatabase().getView("Employees");
var doc=view.getFirstDocument();
var money=0;
while(doc!=null){
money=money+100/doc.getItemValueDouble("value");
doc=view.getNextDocument(doc);
}
getComponent("result").setValue(money);
The following screenshot shows what is possible with the expressions view in SSJS Debugger at a brekpoint inside the loop.
You can access every field from the doc Object with getItemValueString() or every java script variable. You can get every information from the session, for example the effective username running this script. From the session you can acces databases and from the databases you cann acess views and so on and on. The possibilitys are endless.
To add, change or remove expressions in the expression view simply right click the view and select the appropriate menu action. Or use the actions in the toolbar. When you hove over a toolbar icon you get a simple description of the action.
So i hope IBM will activate the expressions view by default in future service packs of Designer 9 so that every xPage developer knows about this great tool. A right click Option "Watch this expression" in the source editor would be nice too.
How to activate and use the expressions view in the SSJS debugger
Go to the "Window->Show Eclipse View" menu and activate the "expressions" view.
After that we can use the expressions view to analyze the state of all objects available in our code when the execution is stopped at a breakpoint in the debugger.
For example we have the following serverside java script code in our xPage.
var view=session.getCurrentDatabase().getView("Employees");
var doc=view.getFirstDocument();
var money=0;
while(doc!=null){
money=money+100/doc.getItemValueDouble("value");
doc=view.getNextDocument(doc);
}
getComponent("result").setValue(money);
The following screenshot shows what is possible with the expressions view in SSJS Debugger at a brekpoint inside the loop.
You can access every field from the doc Object with getItemValueString() or every java script variable. You can get every information from the session, for example the effective username running this script. From the session you can acces databases and from the databases you cann acess views and so on and on. The possibilitys are endless.
To add, change or remove expressions in the expression view simply right click the view and select the appropriate menu action. Or use the actions in the toolbar. When you hove over a toolbar icon you get a simple description of the action.
So i hope IBM will activate the expressions view by default in future service packs of Designer 9 so that every xPage developer knows about this great tool. A right click Option "Watch this expression" in the source editor would be nice too.
Entwicklercamp 2013 – Responsive Web Design
Das Entwicklercamp 2013 ist vorüber. Alle Teilnehmer haben einen reichhaltigen Korb an wertvollen Informationen mit nach Hause genommen.
Meine Präsentation zum Thema "Responsive Web Design" ist auf Slideshare zu finden.
Eine Demo Applikation kann unter der Apache 2.0 Lizenz heruntergeladen werden.
Wir danken Rudi Knegt für die tolle Organisation und Moderation des Camps und freuen uns schon auf das nächste Jahr.
IBM bekennt sich ausdrücklich zu Notes/Domino
DNUG Pavillon zur CeBIT 2013 – Präsentationen des Standforums sind verfügbar
Der Fokus der Präsentationen lag auf dem kollaborativen Arbeitsplatz der Zukunft mit interessanten Integrationsszenarien rund um den Activity Stream. Integrative Aspekte standen auch im Vordergrund, als es um die Zusammenführung der verschiedenen Informationswelten in neuen oder bestehenden Business Anwendungen ging.
Bezug nehmend auf die wichtigsten Einsatzmöglichkeiten von Social Software in Unternehmen wurde den Besuchern deutlich, was Unternehmen heute erfolgreicher macht. Anhand konkreter Kommunikationsapplikationen wurde zudem gezeigt, welchen Anforderungen moderne Kommunikationsmittel heute genügen müssen.
Moderator des Forums war auch in diesem Jahr Joachim Haydecker, Selbstständiger IT-Consultant und Mitglied im DNUG Beirat / der Leitung des Arbeitskreises Social Software & Knowledge Management.
Die Präsentationen stehen Interessenten zum Download zur Verfügung.