Copier l'ACL d'une base .... en LS

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Copier l'ACL d'une base .... en LS

Messagepar Ahamay » 23 Oct 2009 à 15:30

Hello,

Alors c'est possible ?

Y a t'il une methode / une fonction / une bidouille qui permette de recupérer l'ACL d'une base et de la copier vers une autre base sans avoir a réécrire toutes les entrées une a une ?

ce serait bien :lol:
Dernière édition par Ahamay le 27 Oct 2009 à 12:24, édité 1 fois.
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Jérome Deniau » 23 Oct 2009 à 15:35

NSFDbReadACL(
DBHANDLE hDB,
DHANDLE far *rethACL);
puis

STATUS LNPUBLIC NSFDbStoreACL(
DBHANDLE hDB,
DHANDLE hACL,
DWORD ObjectID,
WORD Method);

avec l'API
Jérome Deniau
 

Messagepar Ahamay » 23 Oct 2009 à 15:44

heu.... merci jérome, mais t'aurai un chouille plus d'infos ?

Passque là, je patauge un peu comme qui dirait.....

:(
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Jérome Deniau » 23 Oct 2009 à 16:04

En gros, ouvrir la base 1 ouvrir la base 2 copier la lca
bon c'est approximatif, LtosuScript connnait pas ;-)

declaration
const W_API_MODULE= "nnotes.dll"

Declare Function funcwNSFDbOpen Lib W_API_MODULE Alias "NSFDbOpen" _
( Byval strPathName As Lmbcs String,_
lngrethDB As Long ) As Integer

Declare Function funcwNSFDbCopyACL Lib W_API_MODULE Alias "NSFDbCopyACL" _
( Byval v_lnghSrcDB As Long,_
Byval v_lnghDstDB As Long ) As Integer


Ensuite en ls ouvrir la base avec la fonction 1

dim hDbSource as long, hDbDestination as long
dim basesrc as string *255 -> utiliser pour le nom de la base
dim basedest as string * 255 -> utiliser pour le nom de la base

if (funcwNSFDbOpen("cheminbasse1",hDbSource)=0) then
'on continue
if (funcwNSFDbOpen("cheminbasse2",hDbFDestination)=0) then
'on continue
call funcwNSFDbCopyACL(hDbSource, hDbDestination)
end if
end if
Jérome Deniau
 

Messagepar Ahamay » 23 Oct 2009 à 16:06

Yeah.... big merci
J'ai le we pour essayer d'adapter ça :\


.... jamais bosser avec les api.... et le C me colle des boutons lol
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Jérome Deniau » 23 Oct 2009 à 16:10

Oui mais c'est plus rapide, plus mieux et si cela merde c'est qu'on merde (enfin dès fois il y a windows je reconnais....)
Jérome Deniau
 

Messagepar Ahamay » 23 Oct 2009 à 16:21

Oui je sais, c'est vrai....
.... j'ai honte. lol
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar amahi » 26 Oct 2009 à 09:15

En meme temps le C est pas super optimisé par rapport a l'assembleur. Tu me deçoit sur ce coups Jerome. Faire un traitement en 30ms alors que 12 aurait suffit ne te ressemble pourtant pas.

Sinon pour en revenir a un language de noob, tu n'as effectivement pas la possibilité de faire un db.setACL(), par contre "se taper les entrees" une a une ca s'appelle une boucle et LS gere ça tres bien, pas de quoi en faire un fromage...

Si c'est vraiment tres occasionelle tu peut depuis le client d'admin copier/coller des LCA sinon.
amahi
Empereur des posts
Empereur des posts
 
Message(s) : 1032
Inscrit(e) le : 08 Jan 2007 à 16:57
Localisation : Region parisienne

Helpppppp ......

Messagepar Ahamay » 26 Oct 2009 à 10:16

Hello @ll

Alors..... j'm'y colle, mais ca marche pô :(

Dans mes declarations :

Const W_API_MODULE= "nnotes.dll"
Declare Function NSFDbOpen Lib "nnotes.dll" (Byval PathName As String, rethDB As Long) As Integer
Declare Function NSFDbClose Lib "nnotes.dll" (Byval rethDB As Long) As Integer
Declare Function NSFDbCopyACL Lib "nnotes.dll" (Byval hSrcDB As Long, Byval hDstDB As Long) As Integer


Dans mon code (initialize de mon agent) :

serverTemplate=doc.TmpDbServer(0)
cheminTemplate = doc.tmpDbPath(0)
dbSrvCible = ""
dbPath= doc.PrdDbPath(0)
(* sachant que cheminTemplate et dbPath c'est idem )

...
Call CopyACL (serverTemplate, dbPath, dbSrvCible, dbPath)
...


Et ma fonction :

Sub CopyACL(sourceServer As String, sourcePath As String, targetServer As String,targetPath As String)

Dim hSourceDb As Long, hTargetDb As Long, result As Integer

If (sourceServer <> "") Then sourcePath = sourceServer + "!!" + sourcePath
result = NSFDbOpen (sourcePath, hSourceDb)
result = result + NSFDbOpen (targetPath, hTargetDb)

If (result = 0) Then result = NSFDbCopyACL (hSourceDb, hTargetDb)
If hTargetDb <> 0 Then Call NSFDbClose (hTargetDb)
If hSourceDb <> 0 Then Call NSFDbClose (hSourceDb)

End Sub


Ou est ce que j'ai merdé ??

Merci d'avance.
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Jérome Deniau » 26 Oct 2009 à 22:18

Juste une question, tuas les droits sur la source et la cible?
Jérome Deniau
 

Messagepar Ahamay » 27 Oct 2009 à 10:59

Hello,

A priori oui... la cible est "local" pour ce qui est de la source, j'ai des droit lecteur sur la plupart des bases.

Mais le probleme semble ne pas venir de là, en fait, en debug, lorsqu'on rentre dans la procédure, en pas a pas, je vois que les valeurs de hSourceDb et hTargetDb sont identiques !!!
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

[REGLE]

Messagepar Ahamay » 27 Oct 2009 à 12:22

C'est OK....
Fallait juste utiliser 2 variables différentes (path source / path cible)... meme si c'est le même contenu . :?

Bref :

Declaration

Const W_API_MODULE= "nnotes.dll"

Declare Function NSFDbOpen Lib "nnotes.dll" (Byval PathName As String, rethDB As Long) As Integer
Declare Function NSFDbClose Lib "nnotes.dll" (Byval rethDB As Long) As Integer
Declare Function NSFDbCopyACL Lib "nnotes.dll" (Byval hSrcDB As Long, Byval hDstDB As Long) As Integer


Initialize

'Base Template
serverTemplate=doc.TmpDbServer(0)
cheminTemplate = doc.tmpDbPath(0)

'Info Nouvelle Base a Creer
NewdbSrv = ""
NewdbName = doc.PrdDbName(0)
NewdbTitle = doc.PrdDbTitle(0)
NewdBPath=doc.PrdDbPath(0)

[...]

verifDbTest = doc.TestDbPath(0)

Dim Template As New NotesDatabase(serverTemplate, cheminTemplate)

Set NewDb = New NotesDatabase(NewdbSrv, NewdBPath)
If Not NewDb.isOpen Then
Set NewDb = Template.CreateFromTemplate (NewdbSrv, NewdBPath, True)
NewDb.Title = NewdbTitle
FlagCreation="OK"

Call CopyACL (serverTemplate, cheminTemplate, NewdbSrv, NewdBPath)

End If
Else
FlagCreation="NOK"
End If

[...]

La Function

Function CopyACL(sourceServer As String, sourcePath As String, targetServer As String, targetPath As String)

Dim hSourceDb As Long, hTargetDb As Long, result As Integer

If (sourceServer <> "") Then sourcePath = sourceServer + "!!" + sourcePath
result = NSFDbOpen (sourcePath, hSourceDb)
result = result + NSFDbOpen (targetPath, hTargetDb)

If (result = 0) Then result = NSFDbCopyACL (hSourceDb, hTargetDb)
If hTargetDb <> 0 Then Call NSFDbClose (hTargetDb)
If hSourceDb <> 0 Then Call NSFDbClose (hSourceDb)

End Function



... Vais en faire un petit TIPS .... ca peux servir :)

Merci à Jeròme et a tous ceux qui m'ont mis sur la piste.
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Jérome Deniau » 29 Oct 2009 à 13:57

Ben oui le C il te patate le pointeur ;-)
Jérome Deniau
 

Messagepar Ahamay » 29 Oct 2009 à 17:13

lol.... le tout etant de le savoir.
Quoiqu'il en soit un big merci,

maintenant j'ai un chouette agent qui me génere mes bases a la volée, qui me récupère et met a jour l'ACL... et puis tant qu'a faire.... il me copie aussi les Document KeyWord et le Doc ApplicationProfile de la base de prod..... et pendant ce temps là moi j'suis a l'annexe en train de boire une bière :)
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Jérome Deniau » 29 Oct 2009 à 17:30

AAAAAAAAAAAAAAArgh,
Jérome Deniau
 


Retour vers Développement

cron