<strike>I need a</strike> DXL/XML guru's advise!
I'm working on a project, that will reunite a bunch of databases that once were one back into a common template. One tool that worked very well is DXL export, XSLT transformation and importing that stuff back. I'm using the Body field of a Notes document to store the DXL, which creates some kind of documentation/audit trail. This morning we hit the wall.
I exported a rather complex form (a lot of subforms, multi-nested tables, hotspots and a lot of fields). When I tried to reimport the DXL untouched I was greeted with this error dialogue:
(For RSS readers: the message says: "Left margin cannot be greater than right margi". I did the msgbox, but that was the error in the DXL importer. Please note the typo/truncation. Anybody came across this and could advise what to do?
Update: I found a solution (and opened another can of worms)! The form I tried to export has quite a bit of "history" So in the table tag there is an attribute
This is the agent we use for import:
As usual YMMV
I exported a rather complex form (a lot of subforms, multi-nested tables, hotspots and a lot of fields). When I tried to reimport the DXL untouched I was greeted with this error dialogue:

(For RSS readers: the message says: "Left margin cannot be greater than right margi". I did the msgbox, but that was the error in the DXL importer. Please note the typo/truncation. Anybody came across this and could advise what to do?
Update: I found a solution (and opened another can of worms)! The form I tried to export has quite a bit of "history" So in the table tag there is an attribute
r4spacing="true"
. With this attribute set I get the error message. The attribute tells the designer to use the fixed values provided in refwidth="10.4778in"
. Once you remove the attribute "r4spacing" import works. Of course now the table rendering follows a different rule set, so it gets all messed up. Looks like another session in XSLT to clean this up.
This is the agent we use for import:
Sub Initialize 'Exports DXL design elements from the base line code into a 'database. Can be new, might exist Dim db As NotesDatabase Dim dCol As NotesDocumentCollection Dim newDB As NotesDatabase Dim doc As NotesDocument Dim rt As NotesRichTextItem Dim txtServerName As String Dim txtNewDBName As String Dim s As New NotesSession Set db = s.CurrentDatabase txtServerName = db.Server txtNewDBName = Inputbox("Create/Update db on "+txtServerName,"") If txtNewDBName = "" Then Exit Sub End If Set newDB = New NotesDatabase(txtServerName,txtNewDBName) If Not newDB.IsOpen Then 'We need to create it! Call newDB.Create(txtServerName,txtNewDBName,True) Else If Msgbox("This DB does exist, update it? (Exisiting elements will be overwritten)",36) <> 6 Then Exit Sub End If End If 'Final check If Not newDB.IsOpen Then 'Something went wrong! Msgbox"Can't open the selected database, I'm sorry!" Exit Sub End If Set dCol = db.UnprocessedDocuments Set doc = dCol.GetFirstDocument Do Until doc Is Nothing If doc.HasItem("Body") Then Set rt = doc.GetFirstItem("Body") If doc.HasItem("Subject") Then Print "Working on " & doc.subject(0) End If Call ImportDXLfromRT(rt,newDB) End If Set doc = dCol.GetNextDocument(doc) Loop End Sub Sub ImportDXLfromRT(rt As NotesRichTextItem, db As NotesDatabase) Dim dxi As NotesDXLImporter On Error Goto Err_ImportDXLfromRT Dim s As New NotesSession Set dxi = s.CreateDXLImporter 'Set the import to ONLY import design elements dxi.ACLImportOption = DXLIMPORTOPTION_IGNORE dxi.DesignImportOption = DXLIMPORTOPTION_REPLACE_ELSE_CREATE dxi.DocumentImportOption = DXLIMPORTOPTION_IGNORE dxi.ReplaceDBProperties = False dxi.ReplicaRequiredForReplaceOrUpdate = False 'Set the source to RT and the target to the db Call dxi.setInput(rt) Call dxi.setOutput(db) Call dxi.process Exit_ImportDXLfromRT: Exit Sub Err_ImportDXLfromRT: 'Error from dxi Print Error$ Msgboxdxi.log ResumeExit_ImportDXLfromRT End Sub
As usual YMMV
Posted by Stephan H Wissel on 05 July 2005 | Comments (1) | categories: IBM Notes Lotus Notes