Archive

Posts Tagged ‘Hide-When’

Notes: Hide-When Formel in Mails

16/01/2012 3 comments

Heute hatte ich mal wieder eine meiner wilden Ideen. Ist es möglich in E-Mails Hide-When Formeln zu benutzen?

Die Antwort: Ja, ist es!

Es ist sogar ziemlich einfach. Man muss nur den gewünschten Text markieren, rechtsklicken und die Hide-When Formel, wie gewohnt, eintragen. Der Text wird dann entsprechend der Bedingung versteckt.

Dabei gibt es natürlich einiges zu beachten.

1. Die Formel wird vom Domino Server computed, d.h. das funktioniert auch bei externen Mails. Wenn z.B. ein Web.de Account die Mail bekommt und die Bedingung wird auf dem Server als True berechnet, so wird derjenige diesen versteckten Text nie zu Gesicht bekommen. Da die Formel auf dem Domino Server berechnet wird funktioniert das ganze in externen Mails nur begrenzt. Will man z.B. dass eine bestimmte Person den Text nicht sieht, so muss man aufpassen wie man die Bedingung formuliert, denn die Formel wird mit dem Namen des Servers berechnet, dementsprechend wird das extern nicht so funktionieren wie man das beabsichtigt hatte.

2. Bleibt die Mail innerhalb eines Lotus Notes Systems, so wird die Formel nur über den Text gelegt, wenn man sich das Body-Feld, beispielsweise mit dem DocViewer von Domiclipse, ansieht, so steht dort der Text über dem die Formel liegt.

3. Es ist möglich diese Formel auszuhebeln. Schreibt man beispielsweise folgenden Text in eine Mail:

Test 1
Test 2
Test 3

und versteckt Test 3, so kann man wenn man den Cursor hinter Test 2 platziert und ENTF drückt den versteckten Text eine Zeile höher nehmen, wobei die Hide-When Formel ungültig wird. Das allerdings nur bei internen Mails, weil der Text bei externen Mails niemals auf dem Zielserver ankommt.

Jetzt bleibt noch die Frage: Wozu das ganze eigentlich?

Bei uns in der Firma gibt es eine Regelung dass an interne Kollegen eine gekürzte Fassung unseres Mail-Footers gesendet werden soll und nur an externe Kunden der volle Mail-Footer mit dem ganzen rechtlichen Geraffel, einerseits um Speicherplatz auf den Mailservern zu sparen (Ich hab’s hochgerechnet, beläuft sich auf mehrere 100GiB pro Jahr) und andererseits um die armen Kollegen mit BlackBerry nicht zu überfordern (nur eine Vermutung von mir ).

Durch dieses kleine Feature ist es mit ein paar weiteren Tricks möglich das einzurichten, sodass der der arme, sowieso schon mmit Notes überforderte User nicht auch noch eine Signatur auswählen muss.

Dass man mit diesem Trick seinen Kollegen einen kleinen Streich spielen kann ist natürlich vollkommen ausgeschlossen, sowas würde auch niemand von uns tun, dazu sind Notes-Entwickler viel zu ehrlich =)

Ein viel interessanterer Zweck ist natürlich Code-Injection. Ich habe das bisher noch nicht testen können ob dies möglich ist und inwieweit das zwischen Notes-Servern unterschiedlicher Domains möglich ist und welche Spuren derjenige hinterlässt. Auf jeden Fall wäre das aus meiner Sicht technisch möglich wenn man Schad-Code in der Hide-When Formel versteckt. Ich werde das in den nächsten Tagen mal testen und ein Update schreiben. Hoffen wir das beste.

Bleibt ehrlich =)

Advertisements

Stolperfalle: view.getEntryCount()

16/12/2011 1 comment

Mal wieder eine kleine Stolperfalle.

Situation war folgende: In einer Anwendung gibt es so etwas wie eine Community, jeder kann Fragen einstellen, diese können kommentiert werden usw. Das ganze soll in verschiedenen Gruppen ablaufen. Nun kann man sich entscheiden ob man die Frage öffentlich (für alle Gruppen sichtbar) oder privat (nur für meine Gruppe sichtbar) einstellen will.

Dazu musste es eine Ansicht geben, wo ich hin und her schalten kann, welche Kategorie ich sehen will.

Dazu habe ich den Viewnamen meiner Datasource berechnen lassen, je nach URL-Parameter um entsprechend die View mit den öffentlichen Dokumenten oder die mit den privaten Dokumenten abzufragen.

Auch musste innerhalb meines Codes abgefragt werden ob sich ein Dokument in der View befindet was angezeigt werden kann, um hässliche Null-Pointer Exceptions zu vermeiden.
Die Lösung dafür war denkbar einfach: myView.getEntryCount()

Damit habe ich abgefragt ob die Anzahl der Einträge 0 ist oder nicht und habe entsprechend die jeweiligen Blöcke angezeigt.

Nun habe ich mir noch jemanden zu testen  , der leider eine Null-Pointer Exception an dieser Stelle bekommen hat. Mit ein paar Printouts fiel uns auf, dass getEntryCount() bei ihm nicht 0 zurückgibt, obwohl es das hätte tun müssen.

Lange Rede kurzer Sinn: getEntryCount() ignoriert sämtliche Lese- und Autorenfelder. Bzw. wird der Befehl wahrscheinlich mit den Rechten des Servers ausgeführt, welcher die Dokumente scheinbar sehen darf.

Die bessere Lösung ist es myView.getFirstDocument() == null abzufragen. Dort bekommt man nur die Dokumente auf die man zugreifen darf.

Notes: Attachments in Subforms

Mal wieder trieb mich Notes in den Wahnsinn, diesmal mit Attachments in RichText-Feldern.

Das Problem war, ich hatte einige Forms, welche im Grunde exakt gleich ausgesehen haben, daher mussten Subforms her.
Ich hatte in jeder Form eine Subform, welche das Layout abbildete und dann noch jeweils eine Subform für den Datenteil der jeweiligen Form und noch eine für die Attachments. Da die Attachments nicht in jeder Form auftauchen sollten, war die entsprechend computed.

Da war dann das Phänomen dass ständig unterhalb der Form noch die Attachments sichtbar waren, also nochmal separat aufgelistet wurden. Sehr nervig.
Normalerweise tritt dieses Phänoment nur auf, wenn das Dokument Attachments enthält, aber das Feld wo es drin liegt, ausgeblendet ist. Das war aber gar nicht der Fall.

Nach einigem hin und her probieren stand dann die Ursache fest. Das Problem war einfach, dass die Subform computed war. Scheinbar wird Notes intern erst dieser Mechanismus durchlaufen, also prüfen ob das RichText Feld da ist, wenn ja dann zeige es dort an, wenn nicht, dann zeig es unterhalb der Form an. Erst danach werden dann die Subforms berechnet. Von daher ist es vollkommen egal ob das Feld angezeigt wird oder nicht, Notes geht erstmal davon aus dass das Feld potentiell nicht angezeigt werden könnte und packt sie zur Sicherheit nochmal unter die Form. Wenn man die Subform so wie sie ist direkt einbaut funktioniert alles wie es soll. Statt der computed subform habe ich dann entsprechend Hide-When Formeln benutzt, dort tritt das Problem seltsamerweise nicht auf, die werden scheinbar vor dem Attachment Mechanismus berechnet.

%d bloggers like this: