INECO Forum Overzicht Overzicht Aanmelden Aanmelden Registreer Registreer Profiel Profiel Ledenlijst Ledenlijst Groepen Groepen Zoeken Zoeken

Policy problemen en instellingen maken met Lotusscript
 
 
 
 
 Geplaatst   Bericht 
Marcel Rothuizen

Marcel Rothuizen
 

Aanmelddatum: 10-11-2000
Woonplaats: Heteren (Gld)
Datum: 09-02-2009 23:36:08    Bericht: Policy problemen en instellingen maken met Lotusscript

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 

 

 E-mail Website ICQ MSNM Skype Hyves LinkedIn 
Zoek in afgelopen ok
 
   Overzicht / Lotus Notes Beheer / Werkstation  
Pagina 1 van 1 

IBM LOTUS NOTES migratie doet u samen met INECO

Powered by Lotus Domino R8.5.3 on Fedora Core 14 Dit  forum is gemaakt door Intranet &  Network Consultancy. © 2011.
Voor vragen of opmerkingen  kunt u contact opnemen met:  .
Deze site is gemaakt met Lotus Notes R8.5.3 en draait op Fedora Core 14.

INECO Support Contract banner