Hi,
ich habe einige Probleme mit dem Property right margin in bestimmten Notes 6.5 clients.
Obwohl es 100% ist, ist es nicht 100%.
Right Margin relative 100% heisst: es gibt keinen rechten Rand.
Dieses right-margin property wirkt sich ohnehin nur auf den Ausdruck aus.
Zumindest war es früher immer so.
Nun wird aber über das importieren von anderen RichtextFeld-Inhalten dieser Wert völlig anders interpretiert. Jedenfalls wird ein ziemlich heftiger rechter Rand gesetzt.
KANN DAS IRGENDJEMAND BESTÄTIGEN?
Man kann dieses Problem für DIN-A-4 beheben, wenn man den rechten Rand im zu importierenden RichTextFeld auf 19.05 cm setzt.
Nun möchte ich natürlich den User nicht zumuten, diese spannende Operation bei 120 Dokumenten durchzuführen. Hab nun in einem Domino Forumseintrag diesen Code gefunden:
Probier das mal aus.
Geht hier um die neuen RichText-Klassen.
Interessant wie damit umgegangen wird:
Dim wksp As New notesuiworkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rti As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtnav2 As NotesRichTextNavigator
Dim rtrange As NotesRichTextRange
Dim cellctr As Integer
Dim strpar As String
Set uidoc = wksp.CurrentDocument
uidoc.refresh True
Set doc = uidoc.Document
Set rti = doc.GetFirstItem("Body")
Set rtnav = rti.CreateNavigator
Set rtnav2 = rti.CreateNavigator
Set rtrange = rti.CreateRange
' change all text in table to uppercase
Do
cellctr = cellctr + 1
If Not rtnav.FindNthElement(RTELEM_TYPE_TABLECELL, cellctr) Then Exit Do
rtrange.SetBegin rtnav
rtnav2.SetPositionAtEnd(rtnav)
rtrange.SetEnd rtnav2
strPar = rtrange.TextParagraph
rtrange.Remove
rti.BeginInsert rtnav
rti.AppendText Ucase(strPar)
rti.EndInsert
rti.Update
Loop
Dim docNew As New NotesDocument(doc.ParentDatabase)
docNew.form = "Memo"
Dim rtiNew As NotesRichTextItem
Set rtiNew = rti.copyitemtodocument(docNew, "Body")
Call wksp.EditDocument(True, docNew)
Nun stand ich vor der Aufgabe mit der sehr "einfachen" Sprache xslt dieses schöne property rightmargin in das Element pardef des dxl eines Notes-Dokuments zu bekommen.
Nach 3 Stunden war ich mit den Nerven ziemlich am Ende.
Ich fragte einen hiesigen Guru. Der meinte natürlich, dass xslt ganz einfach ist. Nach 30 Minuten meinte er, dass er das seit 1 Jahr nicht mehr gemacht hat und nach 1 h bin ich dann wieder zurück in mein Büro.
Ich habe dann das sehr gute Buch "XSLT Cookbook" von O'Reilley gefunden.
Das brachte die Rettung.
So kopiere ich ein dxl per xslt und inserte/update den Attributwert pardef rightmargin auf den magischen Wert:
<pardef id="1" leftmargin="1in" rightmargin="7.5000in" tabs="L4.6063in L5in L5.5000in L6in L6.5000in L7in"/>
Hier sind die beiden Stylesheets, dh. copy.xslt wird importiert. Es ist das sogenannte identity stylesheet. Sehr nützlich für Konversion xml->xml. Es kopiert einfach alles was da ist. Das stylesheet mit dem sprechenden Namen style2.xslt nutzt dieses als service (das import statement) und macht die spezifische Arbeit.
style2.xslt:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxl="http://www.lotus.com/dxl">
<xsl:import href="copy.xslt"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8"
omit-xml-declaration="yes"/>
<!--discard parents of person elements -->
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="dxl:pardef">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="rightmargin">
<xsl:text>7.5000in</xsl:text>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
copy.xslt:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"
encoding="UTF-8"
indent="yes"
standalone="no"
omit-xml-declaration="yes"/>
<xsl:template match="node( ) | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node( )"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Hab heute eine Menge gelernt. Aber besorgt euch ein gutes Buch für xslt-Zeugs und die Typen, die erzählen das wäre ganz einfach lügen. Der hiesige Guru ist voll nett, aber das mit dem "alles ganz einfach" ist eine Art Berufskrankheit.
ICH BIN NATÜRLICH LANGE IN DER NAMESPACE FALLE RUMGEHÜPFT.
Dies ist sehr wichtig:
xmlns:dxl="http://www.lotus.com/dxl">
Axel