« Mot de passe Notes | Main| DDM »

LCA Endommagée v6-v7

5,14999999999998

Je ne sais pas définir de titre correct à ce post...
Mais il s'agit d'un problème de LCA altérée

...
Je pensais au début avoir à faire à un cas isolé.
Cela fait par contre déjà trois fois que je tombe sur le cas en moins de 5 mois, et j'ai trouvé quelques questions sans réponses sur le sujet dans les forums sur notes.net.
Domino 6 - Domino 7

Les symptomes :
  • la LCA des boites aux lettres positionne l'utilisateur (le compte créé) avec un niveau défini à pas d'accès, pas de type d'utilisateur affecté,
  • la boite aux lettres est correctement accessible en mode web iNotes.
  • l'accès s'avère par contre un peu plus problématique avec un ID Client lourd.
  • il est impossible de renommer l'utilisateur dans la LCA.
  • Il est impossible de changer le niveau d'accès de la personne dans la LCA.
  • Il est par contre possible de créer un doublon d'entrée pour l'utilisateur dans la LCA.

Bizarre donc Emoticonhttp://domino.stergann.org/web/domsphere.nsf/emoticons/DLYH-5N3GK5/$File/huh.gif" />

La cause ?
Aucune idée là dessus. Et je n'ai pas vraiment eu le temps de creuser.
Le problème semble se poser dans un contexte de versions 6.5.5 à 7.x, et pour des comptes utilisateur générés de manière programmée à l'aide des classes LS NotesRegistration. Je ne serai pas affirmatif sur le point suivant, mais il semble que le code ait été développé dans une version 'n' et mis en production après une montée de version 'n+x'. Peut être un problème de compilation ?

Dans tout les cas, les boites aux lettres ont été crées avec une LCA altérée, et l'entrée correspondant à l'utilisateur ressemble à une entrée fantôme.

Solution :
A défaut d'avoir eu le temps d'identifier à coup sur la cause, la recompilation du code a résolu le problème pour les nouveaux comptes.
Reste le problème de reprise des LCAs existantes impossible manuellement.

La seule solution que j'ai trouvée (il y en a peut être d'autres) a consisté en un agent d'export XML de la LCA, de vérification du fichier généré (mais je n'ai à chaque fois pas trouvé de problème dans le XML), puis de réimport XML par écrasementde la LCA .
L'agent parcourt l'ensemble des bases à corriger, puis pour les bases à problème, effectue l'export puis le réimport de LCA.

Il y a peut être d'autres solution. Celle ci a super bien marché, je ne suis pas allé voir plus loin...


Export de la LCA :
Function export(db As notesdatabase)
        Set stream = s.CreateStream
        'attention, la base doit être ouverte
             'on passe ensuite par une collection de NotesNotes  :O)
        Set nc = db.CreateNoteCollection(False)
        nc.SelectACL=True
        Call nc.BuildCollection
        'génération d'un fichier de sortie
        filename$ = "c:\temp\" & Left(db.FileName, Len(db.FileName) - 3) & "xml"
        export=filename$
        If Not stream.Open(filename$) Then
                Exit Function
        End If
        Call stream.Truncate
       
             'exécution de l'export DXL
        Dim exporter As NotesDXLExporter
        Set exporter = s.CreateDXLExporter
        Call exporter.SetInput(nc)
        Call exporter.SetOutput(stream)
        Call exporter.Process
End Function

Réimport de la LCA :
Function import (fichierXML As String, db As notesdatabase)
             'en arguments le fichier XML généré par l'export et la base à traiter
        Set stream = s.CreateStream
        If Not stream.Open(fichierXML) Then
                Messagebox "Impossible d'ouvrir le fichier " & fichierXML,, "Error"
                Exit Sub
        End If
        If stream.Bytes = 0 Then
                Messagebox "Le fichier n'existe pas ou est vide",, fichierXML
                Exit Function
        End If
       
             'Import DXL dans la base
        Set importer = s.CreateDXLImporter(stream, db)
        importer.ReplaceDBProperties = False
        importer.ReplicaRequiredForReplaceOrUpdate = False
        importer.ACLImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
        importer.DesignImportOption = DXLIMPORTOPTION_IGNORE
        Importer.DocumentImportOption=DXLIMPORTOPTION_IGNORE
        Call importer.Process
End Function

Comment identifier une base problématique en LS
Le problème est assez simple à identifier de manière programmée. Dans les cas de figures que j'ai rencontrés, Lotus Script se met en boucle sur une entrée de LCA lorsque cette dernière semble fantôme.
Il suffit donc d'attaquer la LCA par la classe NotesAcl, puis de boucler sur les entrées en en récupérant le nom (propriété name) par la classe NotesAclEntry afin d'identier s'il est commun à plus d'une entrée.

Comments

Gravatar Image1 - Il est vraie que la modificatrion d'un même code sous différentes versions de designer (ex:4.5 et 6.5) peut engendrer un fonctionnement différent selon le client utilisé ...

Mieux que çà : dans le même évènement de masque le code est différent selon la version de designer !!! Emoticon

A méditer ...Emoticon

Post A Comment

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)