Autor Thema: DesignRefresh per LotusScript  (Gelesen 2684 mal)

Offline Otto

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
DesignRefresh per LotusScript
« am: 05.10.15 - 11:42:26 »
Hallo Forum,
 nach dem Beispiel 'HowTo designReplace per LotusScript ' von placebo habe ich dieses (und auch Varianten dazu aus dem www) durchprobiert, um das Design der pernames.ntf (Schablonenname 'pernames85)  von Server01
über die lokale names.nsf zu ziehen.
mit
 Call W32_NSFDbInfoModify( strDbInfo, 3, strTemplateName )
 rc% = W32_NSFDbInfoSet( hdb&, strDbInfo )
wird der Templatename noch übertragen, dann aber , beim Aufruf
 rc = W32_DesignRefresh(refreshServer, hDb, 0, 0, 0)
kommt immer der Fehler 2051

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: DesignRefresh per LotusScript
« Antwort #1 am: 05.10.15 - 11:58:29 »
1. Bitte immer den kompletten Code posten.
2. Code immer in code- Tags einschliessen, dann ist das auch lesbar.

So kann Dir wohl keiner helfen, ohne zu wissen, wie Deine Variablen deklariert sind, und ob Du die DLLs richtig eingebunden hast.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Otto

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: DesignRefresh per LotusScript
« Antwort #2 am: 05.10.15 - 12:20:09 »
Declarations:

Declare Function W32_NSFDbOpen Lib "nnotes.dll" Alias "NSFDbOpen" ( ByVal dbName As String, hdb As Long ) As Integer
Declare Function W32_NSFDbClose Lib "nnotes.dll" Alias "NSFDbClose" ( ByVal hdb As Long ) As Integer
Declare Function W32_NSFDbInfoGet Lib "nnotes.dll" Alias "NSFDbInfoGet" ( ByVal hdb As Long, ByVal dbInfo As String ) As Integer
Declare Sub W32_NSFDbInfoModify Lib "nnotes.dll" Alias "NSFDbInfoModify" (ByVal dbInfo As String, ByVal what As Long, ByVal newValue As String )
Declare Function W32_NSFDbInfoSet Lib "nnotes.dll" Alias "NSFDbInfoSet" ( ByVal hdb As Long, ByVal dbInfo As String ) As Integer
Declare Function W32_DesignRefresh Lib "nnotes.dll" Alias "DesignRefresh" (ByVal sourceServer As String, ByVal hDb As Long, _
ByVal dwFlags As Long, ByVal null0 As Long, ByVal null1 As Long) As Integer



Function designReplace( strTargetServer As String, strTargetFile As String,_
strSourceServer As String, strTemplateName As String)As Integer
'strTargetServer is the server where the database to get new desig resides
'strTargetFile is the database
'strSourceServer is the server where the design is refreshed from
'refreshNow = True, starts refresh right away, otherwise youll have to wait for the server Or Do it manually.

designReplace = False

Dim Sdb As String
Dim Tdb As String
Dim hdb As Long
Dim strDbInfo As String * 255
Dim strDBtitle As String * 255
Dim strDBtemplate As String * 255
Dim rc As Integer
Dim Force As Integer

'*** Build the path for target databases.
If strTargetServer = "" Then
Tdb$ = strTargetFile
Else
Tdb$ = strTargetServer & "!!" & strTargetFile
End If

'*** Get the db info from target database
rc% = W32_NSFDbOpen( Tdb$, hdb& )
If rc% <> 0 Then
'Error opening target database
Exit Function
End If

rc% = W32_NSFDbInfoGet( hdb&, strDbInfo )
If rc% <> 0 Then
'Error retrieving database info
Exit Function
End If

Call W32_NSFDbInfoModify( strDbInfo, 3, strTemplateName )

rc% = W32_NSFDbInfoSet( hdb&, strDbInfo )
If rc% <> 0 Then
   MsgBox "Fehler " & rc
   'Error setting new design info
   Exit Function
End If
rc% = W32_DesignRefresh( strSourceServer, hdb&, 0, 0, 0 )
   If rc% <> 0 Then MsgBox "Fehler " & rc

rc% = W32_NSFDbClose( hdb& )
designReplace = True
End Function


Aufruf mit


' notesServerName1 as Notesname (usw...)
' dbNames ist die geöffnete lokale names.nsf
' PERNAMESTEMPLATE = "pernames.ntf"
doDesignReplace = designReplace("", dbNames.Filepath,  notesServerName1.Canonical, PERNAMESTEMPLATE)

und das funktioniert bis zu rc% = W32_DesignRefresh


Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: DesignRefresh per LotusScript
« Antwort #3 am: 05.10.15 - 12:38:21 »
Code- tags bitte... so ist dieser Wust an Code doch nicht zu lesen...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Otto

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: DesignRefresh per LotusScript
« Antwort #4 am: 05.10.15 - 13:35:40 »
aber gerne
Declarations

Code
Declare Function W32_NSFDbOpen Lib "nnotes.dll" Alias "NSFDbOpen" ( ByVal dbName As String, hdb As Long ) As Integer
Declare Function W32_NSFDbClose Lib "nnotes.dll" Alias "NSFDbClose" ( ByVal hdb As Long ) As Integer
Declare Function W32_NSFDbInfoGet Lib "nnotes.dll" Alias "NSFDbInfoGet" ( ByVal hdb As Long, ByVal dbInfo As String ) As Integer
Declare Sub W32_NSFDbInfoModify Lib "nnotes.dll" Alias "NSFDbInfoModify" (ByVal dbInfo As String, ByVal what As Long, ByVal newValue As String )
Declare Function W32_NSFDbInfoSet Lib "nnotes.dll" Alias "NSFDbInfoSet" ( ByVal hdb As Long, ByVal dbInfo As String ) As Integer
Declare Function W32_DesignRefresh Lib "nnotes.dll" Alias "DesignRefresh" (ByVal sourceServer As String, ByVal hDb As Long, _
ByVal dwFlags As Long, ByVal null0 As Long, ByVal null1 As Long) As Integer
Code
Function designReplace( strTargetServer As String, strTargetFile As String,_
strSourceServer As String, strTemplateName As String)As Integer
'strTargetServer is the server where the database to get new desig resides
'strTargetFile is the database
'strSourceServer is the server where the design is refreshed from
'refreshNow = True, starts refresh right away, otherwise youll have to wait for the server Or Do it manually.

	designReplace = False
	
	Dim Sdb As String
	Dim Tdb As String
	Dim hdb As Long
	Dim strDbInfo As String * 255
	Dim strDBtitle As String * 255
	Dim strDBtemplate As String * 255
	Dim rc As Integer
	Dim Force As Integer
	
	'*** Build the path for target databases.
	If strTargetServer = "" Then
		Tdb$ = strTargetFile
	Else
		Tdb$ = strTargetServer & "!!" & strTargetFile
	End If
	
	'*** Get the db info from target database
	rc% = W32_NSFDbOpen( Tdb$, hdb& )
	If rc% <> 0 Then
		'Error opening target database
		Exit Function
	End If
	
	rc% = W32_NSFDbInfoGet( hdb&, strDbInfo )
	If rc% <> 0 Then
		'Error retrieving database info
		Exit Function
	End If
	
	Call W32_NSFDbInfoModify( strDbInfo, 3, strTemplateName )
	
	rc% = W32_NSFDbInfoSet( hdb&, strDbInfo )
	If rc% <> 0 Then
		MsgBox "Fehler " & rc
		'Error setting new design info
		Exit Function
	End If
	rc% = W32_DesignRefresh( strSourceServer, hdb&, 0, 0, 0 )
	If rc% <> 0 Then 
		MsgBox "Fehler " & rc
	Else
		designReplace = True
	End If
	rc% = W32_NSFDbClose( hdb& )
End Function


den Aufruf habe ich etwas verändert und auf die lokale Schablone umgebogen
die Parametersind dann noch:
- dbNames ist die geöffnete lokale names.nsf
- PERNAMESTEMPLATE = "pernames.ntf"

Code
doDesignReplace = designReplace("", dbNames.Filepath,  "", PERNAMESTEMPLATE)

nun ist das Ergebnis immer ein rc=0
allerdings ist das Design der datenbank immer noch das alte
Durch den Debugger geht der Code problemlos


Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: DesignRefresh per LotusScript
« Antwort #5 am: 05.10.15 - 14:05:27 »
So, wenn Du eine Frage so präsentierst, dann bekommt man auch Lust, den Code zu debuggen. Dein Problem ist ganz einfach: Der Schablonenname ist nicht "pernames.ntf" sondern "StdR4PersonalAddressBook/de" (wahlweise auch ohne das /de)... Wenn Du Deine Variable "PERNAMESTEMPLATE" so setzt, dann klappt das auch...

Const PERNAMESTEMPLATE = "StdR4PersonalAddressBook/de"
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Otto

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: DesignRefresh per LotusScript
« Antwort #6 am: 05.10.15 - 14:25:53 »
Danke  :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz