Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: bikerboy am 20.08.08 - 15:25:08

Titel: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 15:25:08
So ich brauche mal wieder einen Kognitiven-Anstoss

Ich habe ein DesignElement per DXL-Exporter exportiert und möchte dies nun in einer anderen DB  erstellen.

Nun habe ich ein bisschen die Suche gequält und bin auch schon soweit, dass ich die NotesDXLImporter-Klasse brauche

Habe dann folgenden Code getippert :

Code
	Dim s As New NotesSession
	Dim ws As New NotesUIWorkspace
	
	Dim streamer As NotesStream
	Dim dxlImporter As NotesDXLImporter
	
	Dim dbTarget As NotesDatabase
	
	Dim varChoice As Variant
	
	varChoice = ws.Prompt(13,"Choose Database","Please select the Target Database",0,0)
	
	If Isarray(varChoice) Then
		Set dbTarget = s.GetDatabase(varChoice(0), varChoice(1))
		If Not dbTarget.IsOpen Then
			Call dbTarget.Open(dbTarget.Server,dbTarget.FilePath)
		End If
		
		If Not dbTarget.IsOpen Then
			Msgbox "Konnte die angebene Datenbank nicht finden" , 16 , "Fehler"
			Exit Sub
		End If
		
		Set dxlImporter = s.CreateDXLImporter(newAgent)
		dxlImporter.DesignImportOption = DXLIMPORTOPTION_CREATE
		Call dxlImporter.SetOutput(newAgent)
		Call dxlImporter.Process

newAgent ist eine Konstante

FehlerMeldung ist die folgende :

Titel: Re: DesignElemente per DXL erstellen
Beitrag von: jBubbleBoy am 20.08.08 - 15:32:07
Input und Output wird mit der "Konstanten" newAgent beschrieben ????
Überleg mal was Input und was Output sein müsste ;)
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 15:35:24
Ich habe ehrlich gesagt, keine Ahnung ich brauch ja eigentlich nur einen Ouput, aber das hat er auch kritisiert.
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 15:38:14
Code
		Set dxlImporter = s.CreateDXLImporter(newAgent)
		dxlImporter.DesignImportOption = DXLIMPORTOPTION_CREATE
		Call dxlImporter.SetOutput(dbTarget)
		Call dxlImporter.Process

So müsste das schon ein bisschen eher hinkommen
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: jBubbleBoy am 20.08.08 - 15:40:38
Geht es jetzt?
Was sind newAgent und dbTarget, ich hoffe keine Konstanten!!
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 15:42:30
newAgent ist eine Constante die den DXL-export enthält

dbTarget ist eine NotesDatabase

ja und laufen tut das auch nicht
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 15:45:19
habe aus der CONST newAgent ein

Dim strDXL as String gemacht und ersetzt , bringt aber leider auch nichts
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 16:00:02
So habe noch folgende Version :

Code
		Set dxlImporter = s.CreateDXLImporter()
		dxlImporter.DesignImportOption = DXLIMPORTOPTION_CREATE
		Call dxlImporter.Import(strDXL,dbTarget)
		


auch nicht lauffähig
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: jBubbleBoy am 20.08.08 - 16:03:27
newAgent oder strDXL der Name ist doc egal. Es darf halt keine Stringkonstante sein sondern z.B. ein StreamInput oder ein DXLOutputStream usw.
steht alles in der Hilfe.
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: bikerboy am 20.08.08 - 16:09:59
Also

habe es auch mal über die Stream-Klasse probiert.

Habe die Stream-Klasse initiiert und mit ReadText meinen DXL-Export darein gelutscht und dann das ganze an in den DXL-Importer gegeben, hat auch nichts gebracht.

Aber ich glaube die Import-Methode sollte doch genau das sein was ich brauche.

Der kann man auch einen String mitgeben,laut Hilfe  ;D (Liesst er nämlich doch mal, versteht er nur nicht immer)
Titel: Re: DesignElemente per DXL erstellen
Beitrag von: flaite am 20.08.08 - 17:35:00
Du musst das pipelinen.
Beispiel für import-domParser-export Pipeline.
Der exporter bekommt eine Node-Collection (hier das Design-Element Datenbankscript).
Das wird durch den Dom Parser gejagt, wo es editiert werden kann.
Am Ende wird das Designelement in die Datenbank importiert. 
Code
        Set nc = dbUmzug.CreateNoteCollection(False)
	nc.SelectDatabaseScript = True
	
'Pipeline creation
	Set exporter = session.CreateDXLExporter
	Set parser = session.CreateDOMParser	
	Set importer = session.CreateDXLImporter
	Call exporter.SetInput(nc)
	Call exporter.SetOutput(parser)
	Call parser.SetOutput(importer)
	Call importer.SetOutput(dbUmzug)

importer.ReplicaRequiredForReplaceOrUpdate = False
	importer.DocumentImportOption = DXLIMPORTOPTION_IGNORE
	importer.DesignImportOption = DXLIMPORTOPTION_REPLACE_ELSE_CREATE

       On Event PostDOMParse From parser Call PostDOMParseAdd
' die Funktion PostDomParseAdd wird aufgerufen, wenn das DXL vom Dom Parser voll geparsed und als DOM-Modell dargestellt ist. In der Funktion können Nodes verändert werden. 


       Call Exporter.Process