Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: bikerboy am 25.09.07 - 12:25:59

Titel: per Script Schablonen erstellen
Beitrag von: bikerboy am 25.09.07 - 12:25:59
Hallo zusammen,

ich will per Script Schablonen von Datenbanken erstellen. Im Prinzip muss ich die DB ja nur nehmen und kopieren, dabei schon den Pfad auf *.ntf ändern.

Nun soll die Schablone aber auch "gestempelt" werden, heisst wenn ich anhand der Schablone eine DB erstelle soll auf dem Reiter die Informationen stehen wie , Schablonenname, Build und das ReleaseDate. Es gibt ein Tool das das kann, also ist es möglich, nur muss mir noch jemand die Tür zeigen  ;D

Habe leider vergebens die Forum suche benutzt
Titel: Re: per Script Schablonen erstellen
Beitrag von: Driri am 25.09.07 - 13:20:49
Also eine DB anhand einer Schablone kannst Du per NotesDatabase.CreateFromTemplate erzeugen. Ob dabei die Infos gesetzt werden, kann ich nicht sagen, müßtest Du ausprobieren.

Die Datenbank-Eigenschaften wie TemplateName und DesignTemplateName können per Script nicht gesetzt werden (siehe auch Designer-Hilfe).

Evtl. läßt sich da was über API drehen, da kann ich allerdings nichts zu sagen.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 25.09.07 - 13:33:42
@Driri:

Nein nein du hast mich falsch verstanden, ich will aus einer DB eine Schablone machen nicht anders herum.
Titel: Re: per Script Schablonen erstellen
Beitrag von: Glombi am 25.09.07 - 13:42:35
Mit
Set notesDatabaseNew = notesDatabase.CreateCopy( newServer$, newDbFile$ [, maxsize% ] )
erstellt man eine neue Kopie.

Den Titel setzt man mit
To set: notesDatabase.Title = title$

Wozu ein Tool?
Den Namen der Schablone (Masterschablone) kann man mit Script via DXL setzen. Das habe ich hier im Forum gepostet... Einfach mal nach suchen.

Ein Tool braucht man da nicht wirklich. Es sei denn, Du meinst mit "gestempelt", dass das Teil mit einer bestimmten ID signiert wird.

Andreas
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 25.09.07 - 14:09:34
mit "gestempelt" meine ich, dass der Name der Schablone, die Version (Build) und das Datum gesetzt werden.

Dazu muss anscheinend ein Doc in der DB da sein, dass die Felder

"$Title" = "$TemplateBuild"
"$TemplateBuild" = <entsprechender Nummer>
"$TemplateBuildName" = <entsprechende Name>
"$TemplateBuildDate" = < Datumswert >

zumindest wird es so in dem Tool gemacht, aber wenn ich es so mache klappt es mal mal nicht.
Titel: Re: per Script Schablonen erstellen
Beitrag von: Glombi am 25.09.07 - 14:21:13
Das ist mal wieder so ein berühmter Notes Hack  ;)

Hier ein paar Links dazu:

http://www.ibm.com/developerworks/lotus/library/ls-Templates1/index.html

http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/6458449828de139d85256cf6007900a4?OpenDocument

http://gcc.uni-paderborn.de/www/WI/WI2/wi2_lit.nsf/L3KEY/C1DD32F4632FCA3AC1256CF90064DB88?OpenDocument

http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/e3636fa675d2f26d85256e37002e3e08?OpenDocument
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 25.09.07 - 14:34:27
@Glombi :

Fettes Merci ( Hoffe das verstösst nicht gegen die Forumsregularien, wenn doch @Replace("Fettes Merci";"Vielen Herzlichen Dank"))
Titel: Re: per Script Schablonen erstellen
Beitrag von: Glombi am 25.09.07 - 14:45:10
de rien  ;)

Andreas
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 26.09.07 - 09:37:28
Jetzt noch mal ne Doofe Frage,

Diese Eigenschaften liegen in einem Dokument in der DB , ohne Maske und der gleichen, haben die nicht immer die selber noteID ?
Titel: Re: per Script Schablonen erstellen
Beitrag von: Glombi am 26.09.07 - 09:42:48
Das sind gemeinsame Felder. Die haben also immer eine unterschiedliche ID.

This new feature (introduced in Notes/Domino 6.0.1) lets you maintain a shared field called $TemplateBuild, allowing for easier template identification. The field’s properties must be set via background with LotusScript or formula language. (The two key fields containing this data are $TemplateBuildName and $TemplateBuildDate. The Notes/Domino 6 discussion forum contains sample LotusScript code for retrieving this information written by Thomas Gumz.) Databases are associated with templates via a design property.

Den Link hatte ich ja bereits eingefügt.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 26.09.07 - 10:09:51
so ich habe nun den teil fertig mit dem ich das Template stempeln lassen sollte:

Code

	Dim session As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim dbTarget As NotesDatabase	
	Dim notesColl As NotesNoteCollection
	Dim sharedFieldDoc As NotesDocument
	Dim currentDoc As NotesDocument
	Dim noteID As String
	
	Set currentDoc  = ws.CurrentDocument.Document
	Set dbTarget = session.GetDatabase(Cstr(currentDoc.GetItemValue("serverPath")(0)),Cstr(currentDoc.GetItemValue("filePath")(0)),False)
	
	Set notesColl = dbTarget.CreateNoteCollection(False)
	notesColl.SelectSharedFields = True
	Call notesColl.BuildCollection
	
	noteID = notesColl.GetFirstNoteId
	
	Do Until noteID = "" 
		Set sharedFieldDoc = dbTarget.GetDocumentByID(noteID)
		If sharedFieldDoc.HasItem("$TemplateBuild") Then
			Exit Do
		End If
		
	Loop
	
	If Not sharedFieldDoc Is Nothing Then
		
		Dim releaseDate As New NotesDateTime(Cstr(currentDoc.GetItemValue("tmpBuildDate")(0)))
		
		Call sharedFieldDoc.ReplaceItemValue("$TemplateBuildName",currentDoc.GetItemValue("tmpBuildName")(0))
		Call sharedFieldDoc.ReplaceItemValue("$TemplateBuild", currentDoc.GetItemValue("tmpBuild")(0))
		Call sharedFieldDoc.ReplaceItemValue("$TemplateBuild", releaseDate )
		Call sharedFieldDoc.Save(True,True)
	End If

aber warum, setze ich das dokument am ende auf mark to reponse. das stand so bei dem notesgott aus Paderborn auf der Seite ?
Titel: Re: per Script Schablonen erstellen
Beitrag von: Glombi am 26.09.07 - 10:26:03
Auf welcher Seite?
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 26.09.07 - 10:42:24
http://gcc.uni-paderborn.de/www/WI/WI2/wi2_lit.nsf/L3KEY/C1DD32F4632FCA3AC1256CF90064DB88?OpenDocument
Titel: Re: per Script Schablonen erstellen
Beitrag von: koehlerbv am 26.09.07 - 11:56:30
Zitat
If the force parameter is True, the createResponse parameter has no effect.

Da könnte also auch "Dauerregen" stehen, wenn es syntaktisch okay wäre - es hat keinen Effekt.

Bernhard
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 27.09.07 - 13:34:59
gut aber warum nimmt notes oder die DB das nun nicht an ?  :-:
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 28.09.07 - 14:10:07
so .... was muss ich beim signieren von DBs beachten.


Bekomme hier die Meldung Design Note nicht gefunden, aber was bedeutet es ?
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 02.10.07 - 10:50:19
Hmmm also habe nochmal ein bisschen gecodet, aber nichts ändert sich.

Code
	For i = i To Ubound(varDBList)
		
		serverPath = Strtoken(varDBList(i),"~",1)
		filePath = Strtoken(varDBList(i),"~",2)
		
		Set dbTarget = session.GetDatabase(serverPath,filePath)
		
		newFileName = tmpPrefix + "-"  + Replace(dbtarget.FileName,".nsf",".ntf")
		targetServer = currentDoc.GetItemValue("targetServer")(0)
		targetFilePath = currentDoc.GetItemValue("targetFilePath")(0)
		targetFilename = targetFilePath + Cstr(currentDoc.GetItemValue("tmpPrefix")(0)) + newFileName
		
		Set dbTemplate = dbTarget.CreateCopy(targetServer,targetFilename)
		Set designDoc = dbTemplate.CreateDocument
		
		designDoc.~$TemplateBuildName = newFileName
		designDoc.~$TemplateBuild = tmpBuild
		designDoc.~$TemplateBuildDate =  tmpDate
		Call designDoc.Save(True,False,False)
		
		'Call dbTemplate.Sign(32767,False,signerName,False)
		
	Next

Die Schablonen werden sauber erstellt , landen da wo sie hingehören, aber ich bekomme diesen vermaledeiten Stempel nicht drauf. Das verwirrende für mich ist, dass wenn ich die Schablone mit dem Tool einlese meine Daten richtig drin stehen. Aber warum ??? *heul*
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 05.10.07 - 15:08:36
hmmm habe nun gesehen, dass meine Schablone doch nicht so sauber ist.

Nun meine Frage wie würdet ihr ne Schablone per Code erstellen?

Ich bin hingegangen, habe die Quelldatenbank im Zugriff, habe einen neuen Namen und Endung vergeben, aber jetzt kommts die Datei die am Ende herauskommt wird nicht als Schablone geführt wo man anhaken kann das designänderungen mit übernommen werden sollen. Was muss ich dabei beachten ?
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 05.10.07 - 15:14:12
Code
Set dbTarget = session.GetDatabase(serverPath,filePath)
		
		newFileName = tmpPrefix + "-"  + Replace(dbtarget.FileName,".nsf",".ntf")
		targetServer = currentDoc.GetItemValue("targetServer")(0)
		targetFilePath = currentDoc.GetItemValue("targetFilePath")(0)
		targetFilename = targetFilePath + Cstr(currentDoc.GetItemValue("tmpPrefix")(0)) + newFileName
		
		Set dbTemplate = dbTarget.CreateCopy(targetServer,targetFilename)


Für Codenatiker :P
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 12:10:15
hmmm

eine Frage wenn ich über die session mir ne DB hole, wieso kann ich sie nicht kopieren?

Er meckert immer das die DB noch nicht geöffnet sei, aber wie öffne ich sie denn im Backentd? Das widerspricht sich doch schon wenn ich die Frage stelle.

Naja und wie bekäme ich es denn hin dass sie als vollwertige Schablonen annerkannt werden ? Also das ich den haken setzen kann , dass zukünftige Änderungen mit übernommen werden?
Titel: Re: per Script Schablonen erstellen
Beitrag von: DAU-in am 15.10.07 - 12:18:22

Er meckert immer das die DB noch nicht geöffnet sei, aber wie öffne ich sie denn im Backentd? Das widerspricht sich doch schon wenn ich die Frage stelle.


if not notesdatabase.isOpen then
call notesdatabase.open
end if

Opens a database. A database must be open in order to access all its properties and methods. For details on accessing the properties and methods of a database, see the Usage section in NotesDatabase.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 12:51:03
Hmmm keine Verbesserung,

Mich dünkt dass ich das schon ausprobiert habe.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 14:29:14
Code
serverPath = Strtoken(varDBList(i),"~",1)
		filePath = Strtoken(varDBList(i),"~",2)
		
		Set dbTarget = session.GetDatabase(serverPath,filePath)
		
		If Not dbTarget.IsOpen Then
			Call dbTarget.Open(serverPath,filePath)			
		End If
		
		newFileName = tmpPrefix + "-"  + Replace(dbtarget.FileName,".nsf",".ntf")
		targetServer = currentDoc.GetItemValue("targetServer")(0)
		targetFilePath = currentDoc.GetItemValue("targetFilePath")(0)
		targetFilename = targetFilePath + newFileName
		
		Set dbTemplate = dbTarget.CreateCopy(targetServer,targetFilename)


So warum kann ich dbTarget nun nicht kopieren.
Titel: Re: per Script Schablonen erstellen
Beitrag von: DAU-in am 15.10.07 - 14:31:29
die Rechte zum Anlegen von DBs auf dem Server hast du aber?
Ich dürfte das hier nämlich nicht als Entwickler.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 14:38:37
die Rechte habe ich. Die DBs liegen dann bei mir im lokal in nem Verzeichnis , dass im Feld targetFilePath hinterlegt ist.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 15:21:30
so das problem sass mal wieder vor dem Bildschirm.

Wenn ich eine einzelne DB ausgewählt hatte hat er sie geöffnet, bei meheren nicht, also habe ich mal geguckt was in meinem Quellfeld steht wenn ich mehere DB drin habe und siehe da der DB.filePath war mit " aufgelistet, das habe ich mal durch nen ReplaceSubString rausgefiltert und schwupp konnte er sie öffnen und kopieren, jetzt muss ich nur noch die anderen Probleme hinbekommen und dann ist es fertig 8)
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 17:02:47
So wir nähern uns einem Ende.......

Was muss ich beachten wenn ich eine Schablone erstelle die Notes auch als solche erkennt habe,

die Felder $TemplateBuildName, $TemplateBuild und $TemplateBuildDate sind gesetzt, aber im Dialog wird sie nicht als "vollwertige" Schablone gelistet.

Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 15.10.07 - 18:06:57
So habe mal wieder was gefunden,

Code
			Dim stream As NotesStream
			Set stream = session.CreateStream
			stream.WriteText {<database
      xmlns='http://www.lotus.com/dxl'
      version='6'
      templatename='} + Replace(newFileName,".ntf","")+ {'
      fromtemplate=''>
      </database>}
			
			
			Dim mp As NotesDXLImporter
			Set mp = session.CreateDXLImporter(stream, dbTemplate)
			With mp
				.ReplaceDbProperties = True
				.Process
			End With

Das läuft auch soweit, das einzige was ich in der Hilfe nun nicht gefunden habe sind die namen von den anderen Felder die  äquivalent zu

$TemplateBuild
$TemplateBuildDate sind

Deswegen meine Frage an Glombi , ich hab ihn in nem Zusammenhang meiner Recherche gefunden.

@Glombi du verweist auf nen Hilfeeintrag den ich zwar finde aber nicht die elemente dich ich benötige, und leider nicht mal das Feld templatename

Edit : Sorry man muss auch die augen auf machen, aber die anderen Felder finde ich dennoch nicht.
Titel: Re: per Script Schablonen erstellen
Beitrag von: bikerboy am 16.10.07 - 11:35:19
So was lange wert wird endlich gut.... hab es, jetzt werde ich den Code noch abrunden und dann am Ende hier posten.

Ich bedanke mich bei allen die geholfen haben, auch wenn es am Ende eher ein Blog war, aber ohne euch wäre das nie Fertig geworden.