|
Bij een klant met Lotus Notes 8.02 liepen we op een verveldende manier tegen een bug aan. Wanneer bij de Policy instellingen gekozen wordt voor Prevent changes (wij gebruiken de Engelse Lotus Notes), dan is het voor de gebruiker niet mogelijk de voorkeuren aan te passen, tot zo ver werkt het goed. Echter werden aanpassingen aan het veld ook niet meer doorgevoerd wanneer de beheerder iets veranderde aan die Policy.
Helemaal lastig wordt het dan als dit een instelling betreft die veel invloed heeft op de werking, bijvoorbeeld een proxy instelling of het encrypten van berichten.
Maar hoe zit het nu eigenlijk met die Policies, geblokeerde instellingen en dat soort zaken?
Op de server kan men policies aanmaken. Er zijn drie soorten policies, in volgorde van uitvoering zijn dat: Explicit, Dynamic en Organizational.
Om te controleren of de Policy zoals die bedacht is ook daadwerkelijk toegepast wordt op een persoon kun je vanuit de Domino Administrator een Synopsis uitvoeren waarbij je gedetailleerde informatie kunt krijgen over de waarde die ingesteld zijn. Wanneer er problemen zijn met de Policy instelling "mail" kan de beheerder op de domino console nog het commando "tell adminp proccess mailpolicy" uitvoeren om de mailpolicy door te voeren op de postbussen. Wanneer het op de server allemaal klopt kunnen we verder zoeken.
Policies worden periodiek van de server over gehaald en geplaatst in het Persoonlijk Naam en Adresboek (names.nsf) op het werkstation. Dynamic Client Configuration kortweg DCC is verantwoordelijk voor het ophalen van deze policies. Dit is eigenlijk een programma bestand ndyncfg.exe in de Notes programma map. Controleer bij problemen ook of DCC toevallig niet uitgeschakeld staat bij de client, wanneer er in de notes.ini een regel DisableDynConfigClient=1 staat, betekend dat DCC uit staat. Verwijder de regel om DCC weer mogelijk te maken.
In de praktijk blijkt dat het nogal regelmatig voorkomt dat hier het een en ander mis gaat, bijvoorbeeld blijken er meerdere instellingen te staan, replicatie conflicten e.d.
Bij problemen kan het helpen om in het Persoonlijk Naam en Adresboek de documenten in de verborgen weergave ($Policies), te verwijderen, en DDC handmatig te starten. Dit wordt overigens niet aanbevolen, en blijkt ook niet altijd de oplossing te zijn voor problemen. In ons geval bleek het dus ook niet voldoende.
Om snel een aantal zaken aan te kunnen passen besloten we gebruik te maken van Lotusscript, hiermee kun je snel aanpassingen maken in de notes.ini en profiel documenten. Voor velden in de locatie documenten, adresboek (contacts) preferences, en mail preferences aan te passen kun je eenvoudig een replaceItemValue doen van het gewenste veld. Om het veld vervolgens te blokeren tegen aanpassingen door de gebruiker kan de veldnaam worden toegevoegd aan het veld $DPLocked. Als voorbeeld een agent met slechts een veld dat we willen aanpassen, namelijk het veld dat aangeeft of de spellingscontrole moet starten bij het versturen van mail:
Sub Initialize Dim db As NotesDatabase Dim Doc As NotesDocument Dim Locked As Variant Set db = New NotesDatabase("","") Call db.OpenMail Set Doc = db.GetProfileDocument("CalendarProfile") Redim Locked(0) Call Doc.ReplaceItemValue("SpellCheck","1") 'Spell-check messages before sending|1 Locked = Arrayappend(Locked,"SpellCheck") 'Add fieldname to Locked items Call Doc.ReplaceItemValue("$DPLocked",Fulltrim(Locked)) 'Replace the field with Locked items Call Doc.Save(True,False) End Sub
Wil je echter de velden gewoon "unlocken" volstaat het om het veld $DPLocked te verwijderen.
Wat anders wordt het als de instellingen via File/Preferences direct in de notes.ini worden weggeschreven.
Bij het handmatig aanpassen 'kijkt' de Notes client in de policy die opgeslagen is in het PNAB of de waarde aangepast mag worden of niet. Is een veld geblokkeerd en wil je dit aanpassen kan wederom de policy uit de view $Policy worden verwijderd. (In Notes versie 8 blijkt er overigens ook gebruik te worden gemaakt van een extra notes.ini parameter veldnaam$HA="1" maar hier kon ik geen feiten over achterhalen..)
Als de policy weg is kan men de velden aanpassen. Natuurlijk zal, wanneer de policies op de server actief zijn, de waarde opnieuw worden gezet door de server. In ons geval bleek dat niet te werken als er in de Policy instelling afgedwongend wordt dat het veld niet mag worden aangepast, vandaar dat dit noodzakelijk was.
Met het de Lotusscript methode SetEnvironmentVar kunnen we eenvoudig de notes.ini regels aanpassen:
Sub Initialize Dim Session As New NotesSession Call Session.SetEnvironmentVar("NewMailInterval","15",True) 'Check for mail every 15 minutes End Sub
Maar een stapje moeilijker wordt het als deze instellingen niet een op een in de notes.ini terug te lezen zijn, maar "verborgen" zijn in de parameter Preferences=.... Na een tijdje zoeken op internet vond ik op notes.net in het Notes 4.5 forum een stukje code dat bruikbaar leek ndat er wat aanpassingen aan gemaakt zijn. De code maakt van het getal dat achter preferences staat een binair getal, waarnaar de juiste bits omgezet kunnen worden. (Waarde van de bits zijn o.a. ook op notes.net te vinden). Daarna wordt het binaire getal weer omgezet naar een normaal getal. De code is in dit voorbeeld wat korter gemaakt.
Sub Initialize Dim Session As New NotesSession Dim Preferences As String Dim sPreferences As String Dim bMin As Boolean Dim dPreferences As Double Dim iPos As Integer Dim pref List As String Dim x As Integer Dim lPreferences As Integer bMin = False Preferences = Session.GetEnvironmentString( "Preferences", True ) dPreferences = Cdbl( Preferences )
If dPreferences <0 Then bMin = True dPreferences = 0 - dPreferences End If
sPreferences = Bin$( dPreferences ) lPreferences = Len(sPreferences)
If lPreferences < 32 Then For x = 1 To 32-lPreferences sPreferences$ = "0" & sPreferences$ Next End If 'Enable Save send mail (both 11 en 28) pref(11) = "0" pref(28) = "1"
Forall i In pref iPos = Len( sPreferences ) - Listtag(i) If Not bMin Then If i = 0 Then i =1 Else i = 0 End If End If If Not Mid$( sPreferences, iPos, 1 ) = i Then sPreferences = Left$( sPreferences, iPos-1) & i & Mid$( sPreferences,iPos+1) End If End Forall
sPreferences = Right(sPreferences,lPreferences) dPreferences = getDBLfromBIN( sPreferences ) If dPreferences = 0 Then Exit Sub If bMin Then dPreferences = 0-dPreferences
Call Session.SetEnvironmentVar( "Preferences", Cstr( dPreferences ), True ) End Sub
Function getDBLfromBIN(sBin As String) As Double On Error Goto ErrorHandler Dim y As Double Dim x As Integer y = 0 For x = Len(sBin) To 1 Step -1 If Mid(sBin, x, 1) = "1" Then y = y + 2 ^ (Len(sBin) - x) Next x getDBLfromBIN = y
Exit Function
ErrorHandler: getDBLfromBIN = 0 Print Error & " (" & Err & ") on line " & Erl Exit Function Resume Next End Function
|