Page 1 sur 1

Concevoir ses propres documents profils

MessagePublié: 28 Juil 2005 à 06:17
par oguruma
En attendant que les profils de Lotus fonctionnent mieux (voir forum développement, un de mes documents profils s'est fait la belle)
voici une méthode de contournement ; en fait cela revient à utiliser une technique employée en V3 mais là avec du LS en Classe.

1/ créer un masque ou plusieurs masques profils.

2/ donner le nom que vous souhaitez mais avec un alias débutant pas $Profile, $Profile0 pour le premier document profil et ainsi de suite.

3/ Réserver un champ afin de nommer votre profil, et ce nom de champ sera le même pour tous les masques profils, soit $ProfileName

4/ Ensuite concever votre masque comme bon vous semble avec les nom de champs de votre choix ; je préfixe mes noms de champs par le signe $

5/ créer une vue appelée _ApplicationProfile

6/ formule de sélection SELECT @Contains( Form ; "$Profile" )

7/ colonne 1 : votre champ $ProfileName

8/ Ne pas oublier de trier cette colonne

ensuite vous accèderez à vos profils via cette classe que vous nommerez ApplicationProfileClass

[syntax="ls"]
Public Class SuperApplicationProfile
Private m_session As NotesSession
Private m_db As NotesDatabase
Private m_viewProfile As NotesView

Sub new()
Set m_session = New NotesSession
Set m_db=m_session.CurrentDatabase
Set m_viewProfile=m_db.Getview("_ApplicationProfile")
End Sub

End Class

Public Class ApplicationProfile As SuperApplicationProfile
Private m_docProfile As NotesDocument
Private m_exist As Integer

Sub new (pProfileName As String)
If Not m_viewProfile Is Nothing Then
Set m_docProfile=m_viewProfile.GetDocumentByKey(pProfileName)
If Not m_docProfile Is Nothing Then m_exist=True
End If
End Sub

Property Get Exist As Integer
Exist=m_exist
End Property

Public Function getProfileValue(pField As String) As Variant
getProfileValue=m_docProfile.GetItemValue(pField)(0)
End Function

Public Function getProfileValues(pField As String) As Variant
getProfileValues=m_docProfile.GetItemValue(pField)
End Function

Public Sub setProfileValue(pField As String, value As Variant)
Call m_docProfile.ReplaceItemValue(pField, value)
Call m_docProfile.save(True,False)
End Sub

End Class
[/syntax]

Un exemple d'utilisation

[syntax="ls"]
use "ApplicationProfileClass"

Dim ap1 As ApplicationProfile
Dim ap2 As ApplicationProfile
Dim ap3 As ApplicationProfile
Set ap1=New ApplicationProfile("Profile0")
Set ap2=New ApplicationProfile("Profile1")
Set ap3=New ApplicationProfile("Key1")
Msgbox ap1.GetProfileValue("$TempDir")
Msgbox ap2.GetProfileValue("$Env")
Msgbox ap3.GetProfileValue("$Value")
[/syntax]

je recherche une solution simple pour utiliser cette méthode via un masque... le @dblookup sera inévitable... sauf qu'il consomme un peu de ressources....

Je peux envoyer ma base d'exemple pour ceux qui la souhaitent.