Concevoir ses propres documents profils
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.
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.