Deploying custom baggage files
Our WebWorks Help template needs to be able to add static files on a per-project basis after design-time; something like the Files directory, but stored with the source documents. At run-time, I determine if the source directory exists and copy any files from it with CopyDirectoryFiles(). This adds the files to the staging directory, but they do not get deployed. I have added code to set the deploy attribute to true (per Ben's suggestion, thanks!).
However, it only works code when there is a single group. When there are multiple groups, this code fails (see error below)
<xsl:param name="GlobalInput" /> <xsl:param name="GlobalProject" /> <xsl:param name="GlobalPipelineName" /> <xsl:param name="GlobalFiles" /> <xsl:key name="wwfiles-files-by-type" match="wwfiles:File" use="@type" /> <xsl:key name="wwsplits-split-by-documentid" match="wwsplits:Split" use="@documentID" /> <xsl:variable name="GlobalActionChecksum"> <xsl:variable name="VarTransformChecksums"> <xsl:value-of select="concat(wwuri:AsFilePath('wwtransform:self'), ':', wwfilesystem:GetChecksum(wwuri:AsFilePath('wwtransform:self')))" /> </xsl:variable> <xsl:value-of select="wwstring:MD5Checksum($VarTransformChecksums)" /> </xsl:variable> <xsl:variable name="VarProjectChecksum" select="$GlobalProject/wwproject:Project/@ChangeID" /> <!-- Main --> <!-- --> <xsl:template match="/"> <wwfiles:Files version="1.0"> <xsl:variable name="VarIgnore1Start" select="wwprogress:Start(1)" /> <xsl:variable name="VarIgnore1Status" select="wwprogress:SetStatus('Generating Nuance files')" /> <!-- Call directory copy --> <xsl:call-template name="CopyCustomFiles" /> <xsl:variable name="VarIgnore1End" select="wwprogress:End()" /> </wwfiles:Files> </xsl:template> <!-- Copy custom files --> <!-- --> <xsl:template name="CopyCustomFiles"> <xsl:variable name="VarProjectGroups" select="$GlobalProject/wwproject:Project/wwproject:Groups/wwproject:Group" /> <xsl:for-each select="$VarProjectGroups"> <xsl:variable name="VarProjectGroup" select="." /> <!-- NOTE: Source is hard-coded --> <xsl:variable name="VarSourceDirectoryPath" select="'C:\_wwfiles\files'" /> <xsl:variable name="VarOutputDirectoryPath" select="wwfilesystem:Combine(wwprojext:GetTargetOutputDirectoryPath(), wwprojext:GetGroupName($VarProjectGroup/@GroupID) )" /> <xsl:if test="wwfilesystem:DirectoryExists($VarSourceDirectoryPath)" > <xsl:variable name="VarLogCopy" select="wwlog:Warning('[Custom] Copying files from ',$VarSourceDirectoryPath, ' to ', $VarOutputDirectoryPath)" /> <xsl:variable name="VarCopiedFiles" select="wwfilesystem:CopyDirectoryFiles($VarSourceDirectoryPath,$VarOutputDirectoryPath)" /> <!-- Add them to the deploy list --> <xsl:for-each select="$VarCopiedFiles"> <xsl:copy> <xsl:copy-of select="@*" /> <xsl:attribute name="deploy"> <xsl:text>true</xsl:text> </xsl:attribute> <xsl:copy-of select="./*" /> </xsl:copy> </xsl:for-each> </xsl:if> </xsl:for-each> </xsl:template>
This file is called directly from the .wfmt
<Pipeline name="nuan_files"> <Depends pipeline="page" /> <Depends pipeline="MergeFiles" /> <Stage type="xsl" action="wwformat:Transforms/copy_files.xsl"> </Stage> </Pipeline>
Here is the error I get:
[Warning] [Custom] Copying files from C:\_wwfiles\files to C:\webworks\wwhelp_test2\Output\Target 1\First_group [Warning] [Custom] Copying files from C:\_wwfiles\files to C:\webworks\wwhelp_test2\Output\Target 1\Second_group [Error] An error occurred in pipeline 'custom_files' while processing stage transform 'wwformat:Transforms/custom_files.xsl'. [Error] Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added.
Why is this failing?
2011-06-13
Mike,
Where is this template being invoked? It matters only because the <wwfiles:File> elements must be emitted at the top-level of your root match template. Can you attach the full override .xsl file?
2011-06-13
Ben,
I updated the list to include everything except the xsl:stylesheet declaration. That's all there is to it, and it is called from the .wfmt. And here is the attachment nuan_files.xsl.
-- Mike
2011-06-14
Mike,
Please review the attached project Baggage Files.2011-06-14.zip. It contains further changes to your original transform which add the deploy attribute and update the groupID attribute.
I found two issues:
The <Depends> declaration in the format.wwfmt file referenced the "page" pipeline rather than the "Page" pipeline.
The <xsl:for-each> loop selected $CopiedFiles rather than $VarCopiedFiles/wwfiles:Files/wwfiles:File. The first one is a File Info document, so when the root element was emitted, things were processed in an unexpected order.
2011-06-15
Ben,
I suspected that for-each argument was the problem. I tried playing with it but could not get the namespace right. Your clarification is clear-as-a-bell (and helps explain namespace too). Thanks for the help!!!