Autor Thema: DesignReplace per Knopf  (Gelesen 11396 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
DesignReplace per Knopf
« am: 07.03.08 - 12:14:25 »
Hallo liebe Gemeinde,

gibt es eine Möglichkeit ein DesignReplace per Knopfdruck durchzuführen ?

Habe leider nichts in der Hilfe gefunden. Am liebsten wäre mir ne Scriptlösung. Es gibt zwar eine Möglichkeit es per @Functions zu machen, aber dies benötigt eine Usereingabe und das ist mir schon zu unsicher.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: DesignReplace per Knopf
« Antwort #1 am: 07.03.08 - 12:31:42 »
Warum lässt du denn das nicht den Design-Task des Servers machen?


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #2 am: 07.03.08 - 12:33:46 »
Weil die DB lokal liegt,

habe hier was gefunden was glaube ganz gut laufen wird.

http://domino.blogdns.org/code_snips/lotus_script/api:_replace_db_design_in_lotus_script.html
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: DesignReplace per Knopf
« Antwort #3 am: 07.03.08 - 12:38:28 »
Liest sich erstmal nicht schlecht. Würde mich mal interessieren ob's funktioniert.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #4 am: 07.03.08 - 12:54:59 »
funktioniert, ich mach es so bei lokalen DBs (z.B. privates Adressbuch)
Gruß
Dirk

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #5 am: 07.03.08 - 12:57:55 »
hmm also mit mit copy und paste funzt es nicht. komme auch leider nicht ganz mit der schreibweise klar.

die art wie er seine Befehle aufbaut.

Code
'rc% = W32_NSFDbOpen( Tdb$, hdb& )

so als beispiel. das könnte ich doch noch einfach umgehen indem ich die abfrage über script mache , oder ?


Eigentlich brauche ich doch nur diese Zeile oder ?
Code
	If refreshNow Then
'Initiate refresh immediately...
rc% = W32_DesignRefresh( strSourceServer, hdb&, 0, 0, 0 )
	End If
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #6 am: 07.03.08 - 12:58:56 »
@diali

Kann ich mal deinen Code haben ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #7 am: 07.03.08 - 13:05:11 »
Hier mal der Code den ich verwende. Dieser funktioniert ohne Fehler schon seit Jahren bei uns und bei mehreren tausend Usern.
Code
Const wAPIModule = "NNOTES"
Const NSF_INFO_SIZE = 128
Const INFOPARSE_DESIGN = 3
Const NOTE_ID_ICON = &HFFFF0010

Declare Private Function DesignRefresh Lib wAPIModule Alias "DesignRefresh" (Byval S As String, Byval hDB As Long, Byval F As Long, Byval zA As Long, Byval zM As Long) As Integer

Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" (Byval zP As Long, Byval S As String, Byval F As String, Byval N As String) As Integer

Declare Private Function NSFDbInfoGet Lib wAPIModule Alias "NSFDbInfoGet" (Byval hDB As Long, Byval D As String) As Integer
Declare Private Sub NSFDbInfoModify Lib wAPIModule Alias "NSFDbInfoModify" (Byval S As String, Byval W As Integer, Byval D As String)
Declare Private Function NSFDbInfoSet Lib wAPIModule Alias "NSFDbInfoSet" (Byval hDB As Long, Byval D As String) As Integer

Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" (Byval P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" (Byval hDB As Long) As Integer

Declare Private Function NSFItemSetText Lib wAPIModule Alias "NSFItemSetText" (Byval hNT As Long, Byval N As String, Byval D As String, Byval nD As Integer) As Integer

Declare Private Function NSFNoteOpen Lib wAPIModule Alias "NSFNoteOpen" (Byval hDB As Long, Byval NoteID As Long, Byval F As Integer, hNT As Long) As Integer
Declare Private Function NSFNoteClose Lib wAPIModule Alias "NSFNoteClose" (Byval hNT As Long) As Integer
Declare Private Function NSFNoteUpdate Lib wAPIModule Alias "NSFNoteUpdate" (Byval hNT As Long, Byval F As Integer) As Integer

Sub Click(Source As Button)
 templateserver$ = ""	' Name des Servers, auf dem sich die Schablone befindet
 templatename$ = "StdR65PersonalAdr"	' Schablonenname
 dbserver$ = ""		' Name des Servers auf dem sich die DB befindet, deren Gestaltung ersetzt werden soll (lokal = "")
 dbfilepath$ = "names.nsf"	' Pfad und Dateiname der DB, bei der die Gestaltung ersetzt werden soll
 
 dp$ = String(1024, " ")
 OSPathNetConstruct 0, dbserver$, dbfilepath$, dp$
 
 Dim hDB As Long
 NSFDbOpen dp$, hDB
 If hDB = 0 Then Exit Sub
 
 d$ = Space(NSF_INFO_SIZE)
 NSFDbInfoGet hDB, d$
 NSFDbInfoModify d$, INFOPARSE_DESIGN, templatename$
 NSFDbInfoSet hDB, d$
 
 Dim hNT As Long
 NSFNoteOpen hDB, NOTE_ID_ICON, 0, hNT
 NSFItemSetText hNT, "$TITLE", d$, Instr(d$, Chr$(0))
 NSFNoteUpdate hNT, 0
 NSFNoteClose hNT
 
 DesignRefresh templateserver$, hDB, 1, 0, 0
 
 NSFDbClose hDB
End Sub
Gruß
Dirk

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #8 am: 10.03.08 - 16:38:24 »
HI,

also irgendwas passt hier nicht habe die Code folgendermassen übernommen ;

Code
Const wAPIModule = "NNOTES"
Const NSF_INFO_SIZE = 128
Const INFOPARSE_DESIGN = 3
Const NOTE_ID_ICON = &HFFFF0010
Const errorString = "Konnte den Pfad zum Notes-Data-Verzeichnis nicht finden. Die Bearbeitung wird abgebrochen"

Declare Private Function DesignRefresh Lib wAPIModule Alias "DesignRefresh" (Byval S As String, Byval hDB As Long, Byval F As Long, Byval zA As Long, Byval zM As Long) As Integer

Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" (Byval zP As Long, Byval S As String, Byval F As String, Byval N As String) As Integer

Declare Private Function NSFDbInfoGet Lib wAPIModule Alias "NSFDbInfoGet" (Byval hDB As Long, Byval D As String) As Integer
Declare Private Sub NSFDbInfoModify Lib wAPIModule Alias "NSFDbInfoModify" (Byval S As String, Byval W As Integer, Byval D As String)
Declare Private Function NSFDbInfoSet Lib wAPIModule Alias "NSFDbInfoSet" (Byval hDB As Long, Byval D As String) As Integer

Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" (Byval P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" (Byval hDB As Long) As Integer

Declare Private Function NSFItemSetText Lib wAPIModule Alias "NSFItemSetText" (Byval hNT As Long, Byval N As String, Byval D As String, Byval nD As Integer) As Integer

Declare Private Function NSFNoteOpen Lib wAPIModule Alias "NSFNoteOpen" (Byval hDB As Long, Byval NoteID As Long, Byval F As Integer, hNT As Long) As Integer
Declare Private Function NSFNoteClose Lib wAPIModule Alias "NSFNoteClose" (Byval hNT As Long) As Integer
Declare Private Function NSFNoteUpdate Lib wAPIModule Alias "NSFNoteUpdate" (Byval hNT As Long, Byval F As Integer) As Integer



Code
Sub Click(Source As Button)
	
	Dim s As New NotesSession
	Dim ws As New NotesUIWorkspace
	
	Dim dbThis As NotesDatabase
	
	Dim docCurrent As NotesDocument
	
	Dim rtAttachment As  NotesRichTextItem
	
	Dim strPath As String
	Dim strKey As String
	
	Set docCurrent = ws.CurrentDocument.Document
	strKey = "Directory"
	
	Set rtAttachment = docCurrent.GetFirstItem("body")
	If ( rtAttachment.Type = RICHTEXT ) Then
		Forall objEmbedded In rtAttachment.EmbeddedObjects
			If ( objEmbedded.Type = EMBED_ATTACHMENT ) Then
				
				strPath = s.GetEnvironmentString(strKey,True)
				
				If strPath = "" Then
					strKey = "FileDlgDirectory"
					strPath = s.GetEnvironmentString(strKey,True)	
				End If
				
				If strPath = "" Then
					Msgbox(errorString)
					Exit Sub
				End If				
				
				If Right(strPath,1) <> "\" Then
					strPath = strPath & "\"
				End If
				
				If Lcase(Right(strPath,6)) <> "\data\" Then
					Msgbox(errorString)
					Exit Sub
				End If
				
				strPath = strPath & objEmbedded.Source
				Call objEmbedded.ExtractFile( strPath )
				Exit Forall
			End If
		End Forall
	End If
	
	
	templateserver$ = ""
	templatename$ = "StdR4PersonalAddressBook/de"
	dbserver$ = ""					
	dbfilepath$ = "names.nsf"
	
	dp$ = String(1024, " ")
	OSPathNetConstruct 0, dbserver$, dbfilepath$, dp$
	
	Dim hDB As Long
	NSFDbOpen dp$, hDB
	If hDB = 0 Then Exit Sub
	
	d$ = Space(NSF_INFO_SIZE)
	NSFDbInfoGet hDB, d$
	NSFDbInfoModify d$, INFOPARSE_DESIGN, templatename$
	NSFDbInfoSet hDB, d$
	
	Dim hNT As Long
	NSFNoteOpen hDB, NOTE_ID_ICON, 0, hNT
	NSFItemSetText hNT, "$TITLE", d$, Instr(d$, Chr$(0))
	NSFNoteUpdate hNT, 0
	NSFNoteClose hNT
	
	DesignRefresh templateserver$, hDB, 1, 0, 0
	
	NSFDbClose hDB
	
	
End Sub

wenn ich bei der Datenbank angabe eine Datenbank nehme die ich erstellt habe und die kein Design hat, stülpt er das auch rüber aber beim echten Names.nsf nicht , warum
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #9 am: 10.03.08 - 17:38:04 »
So ich habe es vermutlich gefunden, wenn man Notes als MultiUserInstallation installiert packt das Setup Programm die Template einmal unter :

C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Lotus\Notes\Data\Shared

C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Lotus\Notes\Data\Shared\mui\de

ab, wenn man nun den 2. Pfad als Pfadangabe nimmt aktualiesiert er das persönlich Adressbuch
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #10 am: 10.03.08 - 17:58:21 »
mal wieder zu früh gefreut..... also wenn jmd noch was hat, wäre ich einem Lösungsvorschlag sehr verbunden.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: DesignReplace per Knopf
« Antwort #11 am: 11.03.08 - 10:27:36 »
... ist in deinem Adressbuch in den Design-Elementen eventuell bei "Inherit from the design template" etwas eingetragen?
... sind eventuell Hächen gesetzt, daß er die Übernahme nicht übernehmen soll?
... liegt das Template oberhalb des Data-Verzeichnisses?
... hat es den korreten Namen?

Toni
Grüßle Toni :)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: DesignReplace per Knopf
« Antwort #12 am: 11.03.08 - 16:10:17 »
... ist in deinem Adressbuch in den Design-Elementen eventuell bei "Inherit from the design template" etwas eingetragen?
... sind eventuell Hächen gesetzt, daß er die Übernahme nicht übernehmen soll?
... liegt das Template oberhalb des Data-Verzeichnisses?
... hat es den korreten Namen?

Toni

zu 1. Ja hat es
zu 2. Nein
zu 3. Was meinst du mit oberhalb
zu 4. Ja hat es
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: DesignReplace per Knopf
« Antwort #13 am: 12.03.08 - 10:39:25 »
Zitat
Was meinst du mit oberhalb

Innerhalb des Data-Verzeichnises oder in einem seiner Unterverzeichnisse

Toni
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz