Speicherpfad Definition


ACHTUNG
Bitte beachten Sie vor Benutzung dieser Dokumentfunktion folgende Einschränkungen:

  • Durch die verschiedenen Word-eigenen Speicherdialoge kann nicht gewährleistet werden, dass die definierten Dateinamen und -pfade greifen. Beispiel: Im Fall von Microsoft 365 klappt dies beim Speicherdialog via Taste F12, beim neuen beim neuen Speicher-Menü unter DateiSpeichern unter jedoch nicht.

Diese Dokumentfunktion wird verwendet, um beim Speichern des Dokuments im Standard-Speicherdialog einen Namen und einen Dateispeicherort vorzuschlagen. Es ist möglich, den Dateinamen mithilfe von Profildaten oder Dokument-Parameter zusammenzustellen. Das geschieht in der Konfiguration mittels Zugriff über XSLT und XPath auf Elemente aus dem CustomXMLPart.


Basiskonfiguration

Hier eine einfache Beispielkonfiguration:

<SavePathConfiguration> <SaveNewDocumentOnOpen>false</SaveNewDocumentOnOpen> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="utf-8" /> <!-- parameters from outside this stylesheet can be passed by an interface they are not used in this configuration --> <xsl:param name="filename" /> <xsl:param name="path" /> <xsl:param name="pathAndFilename" /> <xsl:param name="targetFolderFileList" /> <xsl:template match="/"> <xsl:variable name="Path" select="'C:\temp\'" /> <xsl:variable name="Filename" select="'Test_FileName'" /> <xsl:element name="DocumentFunction" namespace=""> <xsl:attribute name="name">SavePathDefinition</xsl:attribute> <xsl:element name="Path" namespace=""> <xsl:value-of select="concat($Path, $Filename,'.docx')" /> </xsl:element> <xsl:element name="CreateFolder" namespace="">false</xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet> </SavePathConfiguration>

Resultat:

Das bewirkt, dass durch das XSLT-Stylesheet das folgende XML-Dokument erzeugt wird:

<DocumentFunction name="SavePathDefinition"> <Path>C:\temp\Test_FileName.docx</Path> <CreateFolder>false</CreateFolder> </DocumentFunction>

Dieses wird wiederum von primedocs so interpretiert, dass im Speichern-Dialog der Pfad "C:\temp" und der Dateiname "Test_FileName.docx" vorgeschlagen wird. Wenn der Ordner "C:\temp" nicht existiert, soll der Ordner in diesem Beispiel nicht erstellt werden, da CreateFolder auf false gesetzt ist.

Speichern-unter-Dialog:

Mit der Option SaveNewDocumentOnOpen kann definiert werden, ob der Benutzer nach dem Generieren eines Dokuments zum Speichern aufgefordert werden soll, indem ihm der Speichern-Dialog angezeigt wird.

Bestehende Speicherpfade und Dateinamen

ACHTUNG
Bei dieser Konfiguration: Wenn bei Dokumenten, die bereits gespeichert wurden (z. B. TestDok.docx auf dem Desktop), der Speichern-Dialog aufgerufen wird, so wird erneut "Test_FileName" unter C:\temp\ vorgeschlagen und nicht wie gewohnt der bestehende Name am bestehenden Speicherort ("TestDok" auf dem Desktop).


Erweiterte Konfiguration

Hier ein Beispiel einer Konfiguration mit deutlich mehr Funktionalität:

<SavePathConfiguration> <SaveNewDocumentOnOpen>false</SaveNewDocumentOnOpen> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="utf-8" /> <!-- parameters from outside this stylesheet can be passed by an interface they are not used in this configuration --> <xsl:param name="filename" /> <xsl:param name="path" /> <xsl:param name="pathAndFilename" /> <xsl:param name="targetFolderFileList" /> <xsl:template match="/"> <!-- add primedocs data --> <xsl:variable name="CustomElements.SavePathConfig.FileName" select="//Text[@id='CustomElements.SavePathConfig.FileName']" /> <xsl:variable name="CustomElements.SavePathConfig.Path" select="//Text[@id='CustomElements.SavePathConfig.Path']" /> <xsl:variable name="CustomElements.SavePathConfig.Path_NoSpace"> <xsl:if test="not($CustomElements.SavePathConfig.Path = ' ')"> <xsl:value-of select="$CustomElements.SavePathConfig.Path" /> </xsl:if> </xsl:variable> <xsl:variable name="CustomElements.SavePathConfig.UpdateFileName" select="//Text[@id='CustomElements.SavePathConfig.UpdateFileName']" /> <xsl:variable name="DocumentProperties.DocumentName" select="//Text[@id='DocumentProperties.DocumentName']" /> <xsl:variable name="DocumentProperties.SavePath" select="//Text[@id='DocumentProperties.SavePath']" /> <xsl:variable name="DocumentProperties.SavePath_NoSpace_PathOnly"> <xsl:if test="not($DocumentProperties.SavePath = ' ')"> <xsl:call-template name="substring-before-last"> <xsl:with-param name="string" select="$DocumentProperties.SavePath" /> <xsl:with-param name="delimiter" select="'\'" /> </xsl:call-template> <xsl:text>\</xsl:text> </xsl:if> </xsl:variable> <!-- evaluate boolean variables --> <xsl:variable name="documentWasSaved" select="boolean(normalize-space($DocumentProperties.SavePath_NoSpace_PathOnly) != '')" /> <xsl:variable name="updateFileName" select="boolean($CustomElements.SavePathConfig.UpdateFileName = 'true')" /> <xsl:variable name="keepExistingPath" select="boolean($documentWasSaved)" /> <xsl:variable name="keepExistingName" select="boolean($documentWasSaved and not($updateFileName))" /> <!-- set Path and Filename --> <xsl:variable name="Path"> <xsl:choose> <xsl:when test="$keepExistingPath"> <xsl:value-of select="$DocumentProperties.SavePath_NoSpace_PathOnly" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="$CustomElements.SavePathConfig.Path_NoSpace" /> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="Filename"> <xsl:choose> <xsl:when test="$keepExistingName"> <xsl:value-of select="$DocumentProperties.DocumentName" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="translate($CustomElements.SavePathConfig.FileName, ' ', '_')" /> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- generate output XML --> <xsl:call-template name="generateOutputXML"> <xsl:with-param name="path" select="concat($Path, $Filename,'.docx')" /> </xsl:call-template> </xsl:template> <!-- generates the required output --> <xsl:template name="generateOutputXML"> <xsl:param name="path" /> <xsl:param name="createFolder" /> <xsl:element name="DocumentFunction" namespace=""> <xsl:attribute name="name">SavePathDefinition</xsl:attribute> <xsl:element name="Path" namespace=""> <xsl:value-of select="$path" /> </xsl:element> <xsl:element name="CreateFolder" namespace=""> <xsl:choose> <xsl:when test="$createFolder"> <xsl:value-of select="$createFolder" /> </xsl:when> <xsl:otherwise>false</xsl:otherwise> </xsl:choose> </xsl:element> </xsl:element> </xsl:template> <!-- determines the substring before last occurence of a specific delimiter --> <xsl:template name="substring-before-last"> <xsl:param name="string" /> <xsl:param name="delimiter" /> <xsl:choose> <xsl:when test="contains($string, $delimiter)"> <xsl:value-of select="substring-before($string, $delimiter)" /> <xsl:choose> <xsl:when test="contains(substring-after($string, $delimiter), $delimiter)"> <xsl:value-of select="$delimiter" /> </xsl:when> </xsl:choose> <xsl:call-template name="substring-before-last"> <xsl:with-param name="string" select="substring-after($string, $delimiter)" /> <xsl:with-param name="delimiter" select="$delimiter" /> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet> </SavePathConfiguration>

Mit der Funktion translate(...) werden in diesem Beispiel alle Leerschläge mit Unterstrichen ("_") ersetzt.

Einbindung in andere Dokumentfunktionen

Einbindung von Skripten

Hier wird auf folgende Skripte zugegriffen:

Die Funktion der einzelnen Skripte sollte anhand des Namens selbsterklärend sein. Diese Skripte müssen auf jeder Vorlage verfügbar sein, bei der die "Speicherpfad Definition" mit dieser Konfiguration angehängt ist.

Zugriff auf "Toolboxen im Editormodus"

Zudem wird auf diese primedocs-Inhalte zugegriffen:

  • DocumentProperties.SavePath

  • DocumentProperties.DocumentName

Damit diese Inhalte zur Verfügung stehen, muss die Dokumentfunktion Toolboxen im Editormodus angehängt sein (in der Regel ist sie schon in der Layoutvorlage angehängt, falls im Dokument ein Logo enthalten ist.)

Bestehende Speicherpfade und Dateinamen

Mit dem obigen Einbeziehen des bestehenden Speicherpfads und Dokumentnamens wird bei bereits gespeicherten Dokumenten bewirkt, dass der bestehende Speicherpfad und Dateinamen verwendet wird (siehe "Bestehende Speicherpfade und Dateinamen" bei der Basiskonfiguration oben).

Ein Problem, das hier aber bleibt: Wenn eine Word-Datei verschoben oder umbenannt wird, werden die Felder DocumentProperties.SavePath und DocumentProperties.DocumentName nicht aktualisiert. In diesem Fall wird der alte Speicherpfad und Dateinamen vorgeschlagen, der bei der letzten Speicherung noch aktuell war.

PrimeSoft AG, Bahnhofstrasse 4, 8360 Eschlikon, Switzerland